def initialize(*args)
opts = args.last.is_a?(Hash) ? args.pop : {}
nodes = args.flatten
if nodes.empty? and ENV.has_key?('MONGODB_URI')
parser = URIParser.new ENV['MONGODB_URI']
if parser.direct?
raise MongoArgumentError, "Mongo::MongoShardedClient.new called with no arguments, but ENV['MONGODB_URI'] implies a direct connection."
end
opts = parser.connection_options.merge! opts
nodes = [parser.nodes]
end
unless nodes.length > 0
raise MongoArgumentError, "A MongoShardedClient requires at least one seed node."
end
@seeds = nodes.map do |host_port|
host, port = host_port.split(":")
[ host, port.to_i ]
end
@seeds.freeze
@last_refresh = Time.now
@refresh_version = 0
@manager = nil
@old_managers = []
@id_lock = Mutex.new
@pool_mutex = Mutex.new
@connected = false
@safe_mutex_lock = Mutex.new
@safe_mutexes = Hash.new {|hash, key| hash[key] = Mutex.new}
@connect_mutex = Mutex.new
@refresh_mutex = Mutex.new
@mongos = true
check_opts(opts)
setup(opts)
end