Merge pull request #75 from jmbejar/fix_replset_insert_exception_issue

RUBY-391: raise ConnectionFailure on 'not master' error.
This commit is contained in:
Kyle Banker 2011-12-16 08:07:44 -08:00
commit 63708a5f16
2 changed files with 24 additions and 3 deletions

View File

@ -87,9 +87,13 @@ module Mongo
end
if num_received == 1 && (error = docs[0]['err'] || docs[0]['errmsg'])
close if error == "not master"
error = "wtimeout" if error == "timeout"
raise OperationFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
if error.include?("not master")
close
raise ConnectionFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
else
error = "wtimeout" if error == "timeout"
raise OperationFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
end
end
docs[0]

View File

@ -80,6 +80,23 @@ class ConnectTest < Test::Unit::TestCase
end
end
def test_save_with_primary_stepped_down
@conn = ReplSetConnection.new([self.rs.host, self.rs.ports[0]], [self.rs.host, self.rs.ports[1]],
[self.rs.host, self.rs.ports[2]])
primary = Mongo::Connection.new(@conn.primary_pool.host, @conn.primary_pool.port)
# Adding force=true to avoid 'no secondaries within 10 seconds of my optime' errors
step_down_command = BSON::OrderedHash.new
step_down_command[:replSetStepDown] = 60
step_down_command[:force] = true
primary['admin'].command(step_down_command)
rescue_connection_failure do
@conn[MONGO_TEST_DB]['bar'].save({:a => 1}, {:safe => {:w => 3}})
end
end
def test_connect_with_connection_string
@conn = Connection.from_uri("mongodb://#{self.rs.host}:#{self.rs.ports[0]},#{self.rs.host}:#{self.rs.ports[1]}?replicaset=#{self.rs.name}")
assert @conn.is_a?(ReplSetConnection)