-
Type: Bug
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: 2.2.4
-
Component/s: Replica Set
-
Environment:Ubuntu, 3 node replicaset, Ruby 2.2.x, mongoid5.1
This issue happens when the primary node in a Replicaset is shut down (pull the plug, not shutdown -h).
The driver is configured with a read mode of `primary`.
The driver attempts to write on a socket that is `nil`, this is not caught by the `handle_errors` method on the socket so it will raise an error as opposed to retrying the query.
Here is a stacktrace:
```
NoMethodError: undefined method `write' for nil:NilClass
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/socket.rb:157:in `block in write'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/socket.rb:191:in `handle_errors'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/socket.rb:157:in `write'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection.rb:179:in `block in write'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connectable.rb:91:in `ensure_connected'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection.rb:179:in `write'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection.rb:157:in `deliver'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection.rb:104:in `block in dispatch'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/monitoring/publishable.rb:47:in `publish_command'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection.rb:103:in `dispatch'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/operation/executable.rb:36:in `block in execute'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/connection_pool.rb:108:in `with_connection'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/server/context.rb:63:in `with_connection'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/operation/executable.rb:34:in `execute'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/collection/view/iterable.rb:79:in `send_initial_query'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/collection/view/iterable.rb:41:in `block in each'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/retryable.rb:51:in `call'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/retryable.rb:51:in `read_with_retry'
my_app/vendor/bundle/ruby/2.2.0/gems/mongo-2.2.4/lib/mongo/collection/view/iterable.rb:39:in `each'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/query_cache.rb:207:in `each'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/contextual/mongo.rb:252:in `first'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/contextual/mongo.rb:252:in `find_first'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/contextual.rb:20:in `find_first'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/findable.rb:114:in `find_by'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/criteria.rb:497:in `block in method_missing'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/scopable.rb:230:in `with_scope'
my_app/vendor/bundle/ruby/2.2.0/gems/mongoid-5.1.1/lib/mongoid/criteria.rb:496:in `method_missing'
my_app/app/models/site.rb:83:in `for_worker'
```