class Mongo::Server
Represents a single server on the server side that can be standalone, part of a replica set, or a mongos.
@since 2.0.0
Constants
- CONNECT_TIMEOUT
The default time in seconds to timeout a connection attempt.
@since 2.4.3
Attributes
@return [ String ] The configured address for the server.
@return [ Cluster ] cluster The server cluster.
@return [ Monitor ] monitor The server monitor.
@return [ Monitoring ] monitoring The monitoring.
@return [ Hash ] The options hash.
Public Class Methods
When the server is flagged for garbage collection, stop the monitor thread.
@example Finalize the object.
Server.finalize(monitor)
@param [ Server::Monitor ] monitor The server monitor.
@since 2.2.0
# File lib/mongo/server.rb, line 147 def self.finalize(monitor) proc { monitor.stop! } end
Instantiate a new server object. Will start the background refresh and subscribe to the appropriate events.
@api private
@example Initialize the server.
Mongo::Server.new('127.0.0.1:27017', cluster, monitoring, listeners)
@note Server must never be directly instantiated outside of a Cluster.
@param [ Address ] address The host:port address to connect to. @param [ Cluster ] cluster The cluster the server belongs to. @param [ Monitoring ] monitoring The monitoring. @param [ Event::Listeners ] event_listeners The event listeners. @param [ Hash ] options The server options.
@since 2.0.0
# File lib/mongo/server.rb, line 168 def initialize(address, cluster, monitoring, event_listeners, options = {}) @address = address @cluster = cluster @monitoring = monitoring @options = options.freeze publish_sdam_event( Monitoring::SERVER_OPENING, Monitoring::Event::ServerOpening.new(address, cluster.topology) ) @monitor = Monitor.new(address, event_listeners, options.merge(app_metadata: cluster.app_metadata)) monitor.scan! monitor.run! ObjectSpace.define_finalizer(self, self.class.finalize(monitor)) end
Public Instance Methods
Is this server equal to another?
@example Is the server equal to the other?
server == other
@param [ Object ] other The object to compare to.
@return [ true, false ] If the servers are equal.
@since 2.0.0
# File lib/mongo/server.rb, line 91 def ==(other) return false unless other.is_a?(Server) address == other.address end
Determine if a connection to the server is able to be established and messages can be sent to it.
@example Is the server connectable?
server.connectable?
@return [ true, false ] If the server is connectable.
@since 2.1.0
# File lib/mongo/server.rb, line 119 def connectable? with_connection do |connection| connection.connectable? end end
Get a new context for this server in which to send messages.
@example Get the server context.
server.context
@return [ Mongo::Server::Context ] context The server context.
@since 2.0.0
@deprecated Will be removed in version 3.0
# File lib/mongo/server.rb, line 106 def context Context.new(self) end
Disconnect the server from the connection.
@example Disconnect the server.
server.disconnect!
@return [ true ] Always tru with no exception.
@since 2.0.0
# File lib/mongo/server.rb, line 133 def disconnect! pool.disconnect! monitor.stop! and true end
Handle authentication failure.
@example Handle possible authentication failure.
server.handle_auth_failure! do Auth.get(user).login(self) end
@raise [ Auth::Unauthorized ] If the authentication failed.
@return [ Object ] The result of the block execution.
@since 2.3.0
# File lib/mongo/server.rb, line 262 def handle_auth_failure! yield rescue Auth::Unauthorized unknown! raise end
Get a pretty printed server inspection.
@example Get the server inspection.
server.inspect
@return [ String ] The nice inspection string.
@since 2.0.0
# File lib/mongo/server.rb, line 191 def inspect "#<Mongo::Server:0x#{object_id} address=#{address.host}:#{address.port}>" end
Determine if the provided tags are a subset of the server's tags.
@example Are the provided tags a subset of the server's tags.
server.matches_tag_set?({ 'rack' => 'a', 'dc' => 'nyc' })
@param [ Hash ] tag_set The tag set to compare to the server's tags.
@return [ true, false ] If the provided tags are a subset of the server's tags.
@since 2.0.0
# File lib/mongo/server.rb, line 217 def matches_tag_set?(tag_set) tag_set.keys.all? do |k| tags[k] && tags[k] == tag_set[k] end end
Get the connection pool for this server.
@example Get the connection pool for the server.
server.pool
@return [ Mongo::Pool ] The connection pool.
@since 2.0.0
# File lib/mongo/server.rb, line 203 def pool @pool ||= cluster.pool(self) end
Restart the server monitor.
@example Restart the server monitor.
server.reconnect!
@return [ true ] Always true.
@since 2.1.0
# File lib/mongo/server.rb, line 231 def reconnect! monitor.restart! and true end
Execute a block of code with a connection, that is checked out of the server's pool and then checked back in.
@example Send a message with the connection.
server.with_connection do |connection| connection.dispatch([ command ]) end
@return [ Object ] The result of the block execution.
@since 2.3.0
# File lib/mongo/server.rb, line 246 def with_connection(&block) pool.with_connection(&block) end