Fix issue RUBY-391

Fix a problem with the exception raised when trying to insert
in a replicaset when primary is not available.

The ssue is reported here: https://jira.mongodb.org/browse/RUBY-391
This commit is contained in:
Jorge Bejar 2011-12-16 13:44:21 -02:00
parent 4858d3030b
commit 6b8ab02ec8
2 changed files with 24 additions and 3 deletions

View File

@ -87,10 +87,14 @@ module Mongo
end end
if num_received == 1 && (error = docs[0]['err'] || docs[0]['errmsg']) if num_received == 1 && (error = docs[0]['err'] || docs[0]['errmsg'])
close if error == "not master" 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" error = "wtimeout" if error == "timeout"
raise OperationFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0]) raise OperationFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
end end
end
docs[0] docs[0]
end end

View File

@ -80,6 +80,23 @@ class ConnectTest < Test::Unit::TestCase
end end
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 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}") @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) assert @conn.is_a?(ReplSetConnection)