minor: rs test framework updates

This commit is contained in:
Kyle Banker 2011-02-10 14:48:59 -05:00
parent 4abf6b8875
commit 04033bf5a3
1 changed files with 21 additions and 6 deletions

View File

@ -1,5 +1,7 @@
#!/usr/bin/ruby #!/usr/bin/ruby
require 'thread'
STDOUT.sync = true STDOUT.sync = true
unless defined? Mongo unless defined? Mongo
@ -17,6 +19,7 @@ class ReplSetManager
@host = opts[:host] || 'localhost' @host = opts[:host] || 'localhost'
@retries = opts[:retries] || 60 @retries = opts[:retries] || 60
@config = {"_id" => @name, "members" => []} @config = {"_id" => @name, "members" => []}
@durable = opts.fetch(:durable, false)
@path = File.join(File.expand_path(File.dirname(__FILE__)), "data") @path = File.join(File.expand_path(File.dirname(__FILE__)), "data")
@arbiter_count = opts[:arbiter_count] || 2 @arbiter_count = opts[:arbiter_count] || 2
@ -96,19 +99,21 @@ class ReplSetManager
def start_cmd(n) def start_cmd(n)
@mongods[n]['start'] = "mongod --replSet #{@name} --logpath '#{@mongods[n]['log_path']}' " + @mongods[n]['start'] = "mongod --replSet #{@name} --logpath '#{@mongods[n]['log_path']}' " +
" --dbpath #{@mongods[n]['db_path']} --port #{@mongods[n]['port']} --fork" " --dbpath #{@mongods[n]['db_path']} --port #{@mongods[n]['port']} --fork"
@mongods[n]['start'] += " --dur" if @durable
@mongods[n]['start']
end end
def kill(node) def kill(node, signal=2)
pid = @mongods[node]['pid'] pid = @mongods[node]['pid']
puts "** Killing node with pid #{pid} at port #{@mongods[node]['port']}" puts "** Killing node with pid #{pid} at port #{@mongods[node]['port']}"
system("kill -2 #{@mongods[node]['pid']}") system("kill -#{signal} #{@mongods[node]['pid']}")
@mongods[node]['up'] = false @mongods[node]['up'] = false
sleep(1) sleep(1)
end end
def kill_primary def kill_primary(signal=2)
node = get_node_with_state(1) node = get_node_with_state(1)
kill(node) kill(node, signal)
return node return node
end end
@ -184,6 +189,16 @@ class ReplSetManager
get_all_host_pairs_with_state(7) get_all_host_pairs_with_state(7)
end end
# String used for adding a shard via mongos
# using the addshard command.
def shard_string
str = "#{@name}/"
str << @mongods.map do |k, mongod|
"#{@host}:#{mongod['port']}"
end.join(',')
str
end
private private
def initiate def initiate
@ -239,13 +254,13 @@ class ReplSetManager
while count < @retries do while count < @retries do
begin begin
return yield return yield
rescue Mongo::OperationFailure, Mongo::ConnectionFailure rescue Mongo::OperationFailure, Mongo::ConnectionFailure => ex
sleep(1) sleep(1)
count += 1 count += 1
end end
end end
raise exception raise ex
end end
end end