Ruby 1.9.2, Mongo 2.0.2에서 실행되는 Mongoid를 ODM으로 사용하는 Rails 3.1 앱이 있는데, 대부분 Mongoid를 우회하고 MongoDB Ruby 드라이버 만 사용해야합니다. 한 페이지로드에서 MapReduce 쿼리를 몇 번 실행하고 있습니다. 이 의지 쿼리 한 후, 반나절 같은 말 개발에 잠시 동안 수행 성능 페이지 새로 고침에서 [MongoDB MapReduce 쿼리가 무작위로 실패합니다.
(assertion: 'value has to be set';
assertionCode: '10210';
errmsg: 'db assertion failure';
ok: '0.0')
실패합니다, 모든 몇 시간 동안 멋지고 계속 작동합니다. 실행에서 로그 (일부는 밖으로 손질과) ...
(R) MONGODB development['$cmd'].find({"mapreduce"=>"values", "map"=><BSON::Code:70098680478720 @data="function() {
var value = { a: 0, b: 0 };
var count = { a: 0, b: 0 };
var min = { a: 100, b: 100 };
var max = { a: -100, b: -100 };
if (this.c == "a" || this.c == "b") {
value[this.c] = parseInt(this.value);
count[this.c]++;
min[this.c] = parseInt(this.value);
max[this.c] = parseInt(this.value);
emit(this.item_id,
{
count: count,
values: value,
min: min,
max: max,
avg: { a: null, b: null }
}
);
}
}" @scope="{}">, "reduce"=><BSON::Code:70098680478680 @data="function(key, data) {
var newDatum = data.pop();
data.forEach(function(item) {
newDatum.values.a += item.values.a;
newDatum.count.a += item.count.a;
if (item.min.a < newDatum.min.a)
newDatum.min.a = item.min.a;
if (item.max.a > newDatum.max.a)
newDatum.max.a = item.max.a;
// same for b
});
newDatum.avg.a = newDatum.values.actual/newDatum.count.a;
newDatum.avg.b = newDatum.values.ideal/newDatum.count.b;
return newDatum;
}" @scope="{}">, :out=>{:inline=>1}, :query=>{:about_id=>BSON::ObjectId('4f1d84de69c238941d000012'), :by_id=>{"$ne"=>BSON::ObjectId('4f1d84de69c238941d000012')}, :comp_id=>{"$in"=>[BSON::ObjectId('4f1d84de69c238941d000016'), BSON::ObjectId('4f1d84de69c238941d000019')]}}}).limit(-1)
지금 같은 요청에 실패 하나 ...에 대한 쿼리 부분 (다시하지만이 훨씬 더 자주 실패합니다보다)
}" @scope="{}">, :out=>{:inline=>1}, :query=>{:about_id=>BSON::ObjectId('4f1d84de69c238941d000012'), :by_id=>BSON::ObjectId('4f1d84de69c238941d000012'), :comp_id=>BSON::ObjectId('4f1d84de69c238941d000019')}}).limit(-1)
Completed 500 Internal Server Error in 516ms
Mongo::OperationFailure (Database command 'mapreduce' failed: (assertion: 'value has to be set'; assertionCode: '10210'; errmsg: 'db assertion failure'; ok: '0.0').):
아무 가치가있는 경우 Mongo가 homebrew를 통해 설치된 Mac OS X Lion에서 발생합니다.
$ mongod --version
db version v2.0.2, pdfile version 4.5
Wed Feb 8 16:33:11 git version: 514b122d308928517f5841888ceaa4246a7f18e3
그리고이 이벤트 중 로그 파일에서 볼 수있는 내용은 다음과 같습니다. 미스터 씨에 관한 한 줄은 사건과 일치하는 것 같습니다.
Wed Feb 8 15:08:36 [clientcursormon] mem (MB) res:15 virt:2630 mapped:80
Wed Feb 8 15:11:37 [clientcursormon] mem (MB) res:17 virt:2630 mapped:80
Wed Feb 8 15:16:37 [clientcursormon] mem (MB) res:17 virt:2630 mapped:80
Wed Feb 8 15:21:37 [clientcursormon] mem (MB) res:17 virt:2630 mapped:80
Wed Feb 8 15:26:37 [clientcursormon] mem (MB) res:17 virt:2630 mapped:80
Wed Feb 8 15:31:37 [clientcursormon] mem (MB) res:17 virt:2630 mapped:80
Wed Feb 8 15:32:55 [conn3] mr failed, removing collection :: caused
by :: 10210 value has to be set
Wed Feb 8 15:36:37 [clientcursormon] mem (MB) res:18 virt:2630 mapped:80
Wed Feb 8 15:39:26 [initandlisten] connection accepted from 127.0.0.1:57001 #4
내 질문은 무엇이 문제를 추적하는 데 도움이 될까요? 나는 우리가 몽고를 사용함에있어서 어떤 추가적인 이슈도 발견하지 못했다. 나는 이것을 파헤 치고 어떻게되는지 알아낼 방법이 없다.