Class: XGen::Mongo::Driver::Mongo

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/mongo.rb

Overview

Represents a Mongo database server.

Constant Summary collapse

DEFAULT_PORT =
27017

Instance Method Summary collapse

Constructor Details

#initialize(pair_or_host = nil, port = nil, options = {}) ⇒ Mongo

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 OK. In either case, the host default is “localhost” and port default is DEFAULT_PORT.

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 that order

options are passed on to each DB instance:

:slave_ok

Only used if one host is specified. If false, when connecting to that host/port a DB object will check to see if the server is the master. If it is not, an error is thrown.

:auto_reconnect

If a DB connection gets closed (for example, we have a server pair and saw the “not master” error, which closes the connection), then automatically try to reconnect to the master or to the single server we have been given. Defaults to false.

Since that’s so confusing, here are a few examples:

Mongo.new                         # localhost, DEFAULT_PORT, !slave
Mongo.new("localhost")            # localhost, DEFAULT_PORT, !slave
Mongo.new("localhost", 3000)      # localhost, 3000, slave not 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
# error or "not master" error, we will auto-reconnect to the
# current master.
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 instance and connect to that one.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/mongo/mongo.rb', line 75

def initialize(pair_or_host=nil, port=nil, options={})
  @pair = case pair_or_host
           when String
             [[pair_or_host, port ? port.to_i : DEFAULT_PORT]]
           when Hash
            connections = []
            connections << pair_val_to_connection(pair_or_host[:left])
            connections << pair_val_to_connection(pair_or_host[:right])
            connections
           when nil
             [['localhost', DEFAULT_PORT]]
           end
  @options = options
end

Instance Method Details

#clone_database(from) ⇒ Object

Not implemented.



114
115
116
# File 'lib/mongo/mongo.rb', line 114

def clone_database(from)
  raise "not implemented"
end

#copy_database(from_host, from_db, to_db) ⇒ Object

Not implemented.



119
120
121
# File 'lib/mongo/mongo.rb', line 119

def copy_database(from_host, from_db, to_db)
  raise "not implemented"
end

#database_infoObject

Returns a hash containing database names as keys and disk space for each as values.



99
100
101
102
103
104
105
106
# File 'lib/mongo/mongo.rb', line 99

def database_info
  doc = single_db_command('admin', :listDatabases => 1)
  h = {}
  doc['databases'].each { |db|
    h[db['name']] = db['sizeOnDisk'].to_i
  }
  h
end

#database_namesObject

Returns an array of database names.



109
110
111
# File 'lib/mongo/mongo.rb', line 109

def database_names
  database_info.keys
end

#db(db_name, options = {}) ⇒ Object

Return the XGen::Mongo::Driver::DB named db_name. The slave_ok and auto_reconnect options passed in via #new may be overridden here. See DB#new for other options you can pass in.



93
94
95
# File 'lib/mongo/mongo.rb', line 93

def db(db_name, options={})
  XGen::Mongo::Driver::DB.new(db_name, @pair, @options.merge(options))
end

#drop_database(name) ⇒ Object

Drops the database name.



124
125
126
# File 'lib/mongo/mongo.rb', line 124

def drop_database(name)
  single_db_command(name, :dropDatabase => 1)
end