Changed Mongo#new so it takes a Hash for paired servers.
This commit is contained in:
parent
9bc1a15c40
commit
3ffc8942b0
|
@ -73,9 +73,12 @@ module XGen
|
||||||
@pk_factory = pk_factory
|
@pk_factory = pk_factory
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Instances of DB are normally obtained by calling Mongo#db.
|
||||||
|
#
|
||||||
# db_name :: The database name
|
# db_name :: The database name
|
||||||
#
|
#
|
||||||
# nodes :: An array of [host, port] pairs.
|
# nodes :: An array of [host, port] pairs. See Mongo#new, which offers
|
||||||
|
# a more flexible way of defining nodes.
|
||||||
#
|
#
|
||||||
# options :: A hash of options.
|
# options :: A hash of options.
|
||||||
#
|
#
|
||||||
|
|
|
@ -27,12 +27,16 @@ module XGen
|
||||||
|
|
||||||
# Create a Mongo database server instance. You specify either one or a
|
# Create a Mongo database server instance. You specify either one or a
|
||||||
# pair of servers. If one, you also say if connecting to a slave is
|
# pair of servers. If one, you also say if connecting to a slave is
|
||||||
# OK. The host default is "localhost" and port default is
|
# OK. In either case, the host default is "localhost" and port default
|
||||||
# DEFAULT_PORT. If you specify a pair, pair_or_host is an array of two
|
# is DEFAULT_PORT.
|
||||||
# arrays, where each is a host/port pair (or a host with no port), and
|
|
||||||
# the +port+ argument is ignored.
|
|
||||||
#
|
#
|
||||||
# Options are passed on to each DB instance:
|
# If you specify a pair, pair_or_host is a hash with two keys :left
|
||||||
|
# and :right. Each key maps to either
|
||||||
|
# * a server name, in which case port is DEFAULT_PORT
|
||||||
|
# * a port number, in which case server is "localhost"
|
||||||
|
# * an array containing a server name and a port number in either order
|
||||||
|
#
|
||||||
|
# +options+ are passed on to each DB instance:
|
||||||
#
|
#
|
||||||
# :slave_ok :: Only used if one host is specified. If false, when
|
# :slave_ok :: Only used if one host is specified. If false, when
|
||||||
# connecting to that host/port a DB object will check to
|
# connecting to that host/port a DB object will check to
|
||||||
|
@ -51,11 +55,20 @@ module XGen
|
||||||
# Mongo.new # localhost, DEFAULT_PORT, !slave
|
# Mongo.new # localhost, DEFAULT_PORT, !slave
|
||||||
# Mongo.new("localhost") # localhost, DEFAULT_PORT, !slave
|
# Mongo.new("localhost") # localhost, DEFAULT_PORT, !slave
|
||||||
# Mongo.new("localhost", 3000) # localhost, 3000, slave not ok
|
# Mongo.new("localhost", 3000) # localhost, 3000, slave not ok
|
||||||
# Mongo.new("localhost", 3000, :slave_ok => true) # localhost, 3000, slave ok
|
# # localhost, 3000, slave ok
|
||||||
|
# Mongo.new("localhost", 3000, :slave_ok => true)
|
||||||
|
# # localhost, DEFAULT_PORT, auto reconnect
|
||||||
|
# Mongo.new(nil, nil, :auto_reconnect => true)
|
||||||
|
#
|
||||||
# # A pair of servers. DB will always talk to the master. On socket
|
# # A pair of servers. DB will always talk to the master. On socket
|
||||||
# # error or "not master" error, we will auto-reconnect to the
|
# # error or "not master" error, we will auto-reconnect to the
|
||||||
# # current master.
|
# # current master.
|
||||||
# Mongo.new([["db1.example.com", 3000], ["db2.example.com", 3000]]], nil, :auto_reconnect => true)
|
# Mongo.new({:left => ["db1.example.com", 3000],
|
||||||
|
# :right => "db2.example.com"}, # DEFAULT_PORT
|
||||||
|
# nil, :auto_reconnect => true)
|
||||||
|
#
|
||||||
|
# # Here, :right is localhost/DEFAULT_PORT. No auto-reconnect.
|
||||||
|
# Mongo.new({:left => ["db1.example.com", 3000]})
|
||||||
#
|
#
|
||||||
# When a DB object first connects to a pair, it will find the master
|
# When a DB object first connects to a pair, it will find the master
|
||||||
# instance and connect to that one.
|
# instance and connect to that one.
|
||||||
|
@ -63,8 +76,11 @@ module XGen
|
||||||
@pair = case pair_or_host
|
@pair = case pair_or_host
|
||||||
when String
|
when String
|
||||||
[[pair_or_host, port || DEFAULT_PORT]]
|
[[pair_or_host, port || DEFAULT_PORT]]
|
||||||
when Array
|
when Hash
|
||||||
pair_or_host.collect { |nh| [nh[0], nh[1] || DEFAULT_PORT] }
|
connections = []
|
||||||
|
connections << pair_val_to_connection(pair_or_host[:left])
|
||||||
|
connections << pair_val_to_connection(pair_or_host[:right])
|
||||||
|
connections
|
||||||
when nil
|
when nil
|
||||||
[['localhost', DEFAULT_PORT]]
|
[['localhost', DEFAULT_PORT]]
|
||||||
end
|
end
|
||||||
|
@ -111,6 +127,26 @@ module XGen
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
# Turns an array containing an optional host name string and an
|
||||||
|
# optional port number integer into a [host, port] pair array.
|
||||||
|
def pair_val_to_connection(a)
|
||||||
|
case a
|
||||||
|
when nil
|
||||||
|
['localhost', DEFAULT_PORT]
|
||||||
|
when String
|
||||||
|
[a, DEFAULT_PORT]
|
||||||
|
when Integer
|
||||||
|
['localhost', a]
|
||||||
|
when Array
|
||||||
|
connection = ['localhost', DEFAULT_PORT]
|
||||||
|
connection[0] = a[0] if a[0].kind_of?(String)
|
||||||
|
connection[0] = a[1] if a[1].kind_of?(String)
|
||||||
|
connection[1] = a[0] if a[0].kind_of?(Integer)
|
||||||
|
connection[1] = a[1] if a[1].kind_of?(Integer)
|
||||||
|
connection
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Send cmd (a hash, possibly ordered) to the admin database and return
|
# Send cmd (a hash, possibly ordered) to the admin database and return
|
||||||
# the answer. Raises an error unless the return is "ok" (DB#ok?
|
# the answer. Raises an error unless the return is "ok" (DB#ok?
|
||||||
# returns +true+).
|
# returns +true+).
|
||||||
|
|
|
@ -50,10 +50,10 @@ class DBTest < Test::Unit::TestCase
|
||||||
assert_equal 'ruby-mongo-test.test', @db.full_coll_name(coll.name)
|
assert_equal 'ruby-mongo-test.test', @db.full_coll_name(coll.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_array
|
def test_pair
|
||||||
@db.close
|
@db.close
|
||||||
@users = nil
|
@users = nil
|
||||||
@db = Mongo.new([["nosuch.example.com"], [@host, @port]]).db('ruby-mongo-test')
|
@db = Mongo.new({:left => "nosuch.example.com", :right => [@host, @port]}).db('ruby-mongo-test')
|
||||||
assert @db.connected?
|
assert @db.connected?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -41,4 +41,24 @@ class MongoTest < Test::Unit::TestCase
|
||||||
assert !@mongo.database_names.include?('will-be-deleted')
|
assert !@mongo.database_names.include?('will-be-deleted')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_pair
|
||||||
|
db = Mongo.new({:left => ['foo', 123]})
|
||||||
|
pair = db.instance_variable_get('@pair')
|
||||||
|
assert_equal 2, pair.length
|
||||||
|
assert_equal ['foo', 123], pair[0]
|
||||||
|
assert_equal ['localhost', Mongo::DEFAULT_PORT], pair[1]
|
||||||
|
|
||||||
|
db = Mongo.new({:right => 'bar'})
|
||||||
|
pair = db.instance_variable_get('@pair')
|
||||||
|
assert_equal 2, pair.length
|
||||||
|
assert_equal ['localhost', Mongo::DEFAULT_PORT], pair[0]
|
||||||
|
assert_equal ['bar', Mongo::DEFAULT_PORT], pair[1]
|
||||||
|
|
||||||
|
db = Mongo.new({:right => [123, 'foo'], :left => 'bar'})
|
||||||
|
pair = db.instance_variable_get('@pair')
|
||||||
|
assert_equal 2, pair.length
|
||||||
|
assert_equal ['bar', Mongo::DEFAULT_PORT], pair[0]
|
||||||
|
assert_equal ['foo', 123], pair[1]
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue