RUBY-314 test for update when a node is removed
This commit is contained in:
parent
1c430abd88
commit
5559f91da2
|
@ -67,6 +67,10 @@ module Mongo
|
|||
"#{@host}:#{@port}"
|
||||
end
|
||||
|
||||
def host_port
|
||||
[@host, @port]
|
||||
end
|
||||
|
||||
# Return the time it takes on average
|
||||
# to do a round-trip against this node.
|
||||
def ping_time
|
||||
|
|
|
@ -61,10 +61,9 @@ module Mongo
|
|||
@primary = nil
|
||||
@primary_pool.close
|
||||
@primary_pool = nil
|
||||
elsif rejected_pool = @secondary_pools.reject! {|pool| pool.host_string == node}
|
||||
@secondaries.reject! do |secondary|
|
||||
secondary.port == rejected_pool.port && secondary.host == rejected_pool.host
|
||||
end
|
||||
elsif rejected_pool = @secondary_pools.detect {|pool| pool.host_string == node}
|
||||
@secondary_pools.delete(rejected_pool)
|
||||
@secondaries.delete(rejected_pool.host_port)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -62,6 +62,19 @@ class ReplicaSetRefreshTest < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_automated_refresh_with_removed_node
|
||||
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
||||
[RS.host, RS.ports[2]], :refresh_interval => 2, :auto_refresh => true)
|
||||
|
||||
assert @conn.secondaries.length == 2
|
||||
p @conn.secondaries
|
||||
p @conn.secondary_pools.length
|
||||
|
||||
RS.remove_secondary_node
|
||||
sleep(6)
|
||||
|
||||
p @conn.secondaries
|
||||
p @conn.secondary_pools.length
|
||||
assert @conn.secondaries.length == 1
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -103,6 +103,27 @@ class ReplSetManager
|
|||
@mongods[n]['start']
|
||||
end
|
||||
|
||||
def remove_secondary_node
|
||||
primary = get_node_with_state(1)
|
||||
con = get_connection(primary)
|
||||
config = con['local']['system.replset'].find_one
|
||||
secondary = get_node_with_state(2)
|
||||
host_port = "#{@host}:#{@mongods[secondary]['port']}"
|
||||
@config['members'].reject! {|m| m['host'] == host_port}
|
||||
|
||||
@config['version'] = config['version'] + 1
|
||||
|
||||
primary = get_node_with_state(1)
|
||||
con = get_connection(primary)
|
||||
|
||||
begin
|
||||
con['admin'].command({'replSetReconfig' => @config})
|
||||
rescue Mongo::ConnectionFailure
|
||||
end
|
||||
|
||||
con.close
|
||||
end
|
||||
|
||||
def add_node
|
||||
primary = get_node_with_state(1)
|
||||
con = get_connection(primary)
|
||||
|
|
Loading…
Reference in New Issue