причина для "RuntimeError (не может добавить новый ключ в хэш во время итерации)" из Mongo? - PullRequest
0 голосов
/ 12 сентября 2011

Наше приложение является приложением Rails, запущенным на MongoDB через mongoid.Мы периодически видим эту ошибку:

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 1.3.1
  • mongoid 2.0.1

Кто-нибудь сталкивался с этим раньше?

1 Ответ

2 голосов
/ 13 сентября 2011

После некоторого дальнейшего изучения, похоже, что сам новый камень rpm_contrib был виновником.Обычно, когда я вижу это в трассировке стека, я просто игнорирую это, так как newrelic участвует в журналировании ошибок, но в этом случае это фактически вызывало ошибку.Вчера днем ​​мы обновили гем до 2.1.4, потому что думали, что newrelic ведет себя немного ненадежно, как раз в то время, когда мы перестали видеть ошибки в работе.Если посмотреть на первую строку трассировки стека, то этот новый код реликта был изменен, чтобы предотвратить состояние гонки, что сопряжено с RuntimeError.Итак, я собираюсь предположить, что это исправлено и на самом деле не связано с самой монго.

...