我们的应用程序是通过mongoid在MongoDB上运行的Rails应用程序。我们间歇地看到这个错误:
RuntimeError (can't add a new key into hash during iteration)
…contrib-2.1.3/lib/rpm_contrib/instrumentation/mongo.rb: 17:in `instrument_with_newrelic_trace'
…d_gems/ruby/1.9.1/gems/mongo-1.3.0/lib/mongo/cursor.rb: 391:in `send_initial_query'
…contrib-2.1.3/lib/rpm_contrib/instrumentation/mongo.rb: 33:in `refresh_with_newrelic_trace'
…d_gems/ruby/1.9.1/gems/mongo-1.3.0/lib/mongo/cursor.rb: 75:in `next_document'
…ndled_gems/ruby/1.9.1/gems/mongo-1.3.0/lib/mongo/db.rb: 492:in `command'
…ms/ruby/1.9.1/gems/mongo-1.3.0/lib/mongo/collection.rb: 685:in `new_group'
…ms/ruby/1.9.1/gems/mongo-1.3.0/lib/mongo/collection.rb: 600:in `group'
…1/gems/mongoid-2.0.1/lib/mongoid/collections/master.rb: 19:in `block (3 levels) in <class:Master>'
….1/gems/mongoid-2.0.1/lib/mongoid/collections/retry.rb: 29:in `retry_on_connection_failure'
…1/gems/mongoid-2.0.1/lib/mongoid/collections/master.rb: 18:in `block (2 levels) in <class:Master>'
…uby/1.9.1/gems/mongoid-2.0.1/lib/mongoid/collection.rb: 21:in `block (2 levels) in <class:Collection>'
…ngin/releases/20110902181215/app/models/stat_module.rb: 86:in `aggregate_team_stats'
….9.1/gems/mongoid-2.0.1/lib/mongoid/relations/proxy.rb: 111:in `method_missing'
当我运行任何类型的[MongoidModel] .collection.group()命令时,似乎会发生这种情况。堆栈跟踪似乎表明问题出现在mongo / mongoid内部的某个地方。更重要的是,它只是我们生产环境中的一个问题,因此隔离和调试非常困难。
我们正在使用这些宝石:
有没有人遇到过这个?
答案 0 :(得分:2)
经过一番进一步的调查后,它看起来像是新手 rpm_contrib gem本身就是罪魁祸首。通常当我看到一个 堆栈跟踪我只是忽略它,因为newrelic涉及日志记录 错误,但在这种情况下,它实际上是导致错误。我们 碰巧昨天下午将宝石升级到2.1.4,因为我们想到了 newrelic表现得有点片状,这是我们停止的时间 看到生产中的错误。查看堆栈的第一行 跟踪,该行修改了新的代码以防止竞争 条件,与RuntimeError一起生效。所以,我要假设 这是固定的,实际上与mongo本身无关。