2012-02-10 28 views
0

Ruby 1.9.2、Mongo 2.0.2で実行されているMongoidをODMとして使用していますが、これはMongoDBのほとんどをバイパスし、MongoDB Rubyドライバを使用するだけです。私はMapReduceクエリを1ページの負荷で数回実行しています。この意志のクエリは開発中しばらく許容できる動作します、半日のように、そのページのリフレッシュで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) 

同じ要求に失敗した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が自作でインストールされたMac OS X Lionで起こっています。

$ mongod --version 
db version v2.0.2, pdfile version 4.5 
Wed Feb 8 16:33:11 git version: 514b122d308928517f5841888ceaa4246a7f18e3 

このイベント中にログファイルには何が表示されますか。 mr失敗に関する1行は、イベントに一致するようです。

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 

私の質問は、これを追跡するために何ができるのですか?私は、モンゴーの使用に関する追加の問題に気づいていません。私はこれを掘り起こして何が起こっているのか把握する方法がわかりません。

答えて

0

したがって、JavaScript自体がデータベースに格納されていたようです。 db.system.js.find()は、valueのないエントリを示しています。 mongodbメーリングリストの投稿ごとに、jsを削除するとエラーが修正されたようです。うまくいけば、誰かがこれに遭遇すれば、彼らはsystem.jsをチェックすることを学ぶでしょう。

関連する問題