class Mongo::Server::Description

Represents a description of the server, populated by the result of the ismaster command.

@since 2.0.0

Constants

ARBITER

Constant for reading arbiter info from config.

@since 2.0.0

ARBITERS

Constant for reading arbiters info from config.

@since 2.0.0

DEFAULT_MAX_WRITE_BATCH_SIZE

Default max write batch size.

@since 2.0.0

ELECTION_ID

Constant for reading electionId info from config.

@since 2.1.0

EXCLUDE_FOR_COMPARISON

Fields to exclude when comparing two descriptions.

@since 2.0.6

HIDDEN

Constant for reading hidden info from config.

@since 2.0.0

HOSTS

Constant for reading hosts info from config.

@since 2.0.0

LAST_WRITE

Constant for the lastWrite subdocument.

@since 2.4.0

LAST_WRITE_DATE

Constant for the lastWriteDate field in the lastWrite subdocument.

@since 2.4.0

LEGACY_WIRE_VERSION

The legacy wire protocol version.

@since 2.0.0

LOCAL_TIME

Constant for reading localTime info from config.

@since 2.1.0

LOGICAL_SESSION_TIMEOUT_MINUTES

Constant for reading logicalSessionTimeoutMinutes info from config.

@since 2.5.0

MAX_BSON_OBJECT_SIZE

Constant for reading max bson size info from config.

@since 2.0.0

MAX_MESSAGE_BYTES

Constant for reading max message size info from config.

@since 2.0.0

MAX_WIRE_VERSION

Constant for the max wire version.

@since 2.0.0

MAX_WRITE_BATCH_SIZE

Constant for reading max write batch size.

@since 2.0.0

ME

Constant for reading the me field.

@since 2.1.0

MESSAGE

Constant for the key for the message value.

@since 2.0.0

MIN_WIRE_VERSION

Constant for min wire version.

@since 2.0.0

MONGOS_MESSAGE

Constant for the message that indicates a sharded cluster.

@since 2.0.0

OPERATION_TIME

Constant for reading operationTime info from config.

@since 2.5.0

PASSIVE

Constant for reading passive info from config.

@since 2.0.0

PASSIVES

Constant for reading the passive server list.

@since 2.0.0

PRIMARY

Constant for reading primary info from config.

@since 2.0.0

PRIMARY_HOST

Constant for reading primary host field from config.

@since 2.5.0

REPLICA_SET

Constant for determining ghost servers.

@since 2.0.0

SECONDARY

Constant for reading secondary info from config.

@since 2.0.0

SET_NAME

Constant for reading replica set name info from config.

@since 2.0.0

SET_VERSION

Constant for reading setVersion info from config.

@since 2.2.2

TAGS

Constant for reading tags info from config.

@since 2.0.0

Attributes

address[R]

@return [ Address ] address The server's address.

average_round_trip_time[R]

@return [ Float ] The moving average time the ismaster call took to complete.

config[R]

@return [ Hash ] The actual result from the ismaster command.

features[R]

@return [ Features ] features The features for the server.

Public Class Methods

new(address, config = {}, average_round_trip_time = 0) click to toggle source

Instantiate the new server description from the result of the ismaster command.

@example Instantiate the new description.

Description.new(address, { 'ismaster' => true }, 0.5)

@param [ Address ] address The server address. @param [ Hash ] config The result of the ismaster command. @param [ Float ] average_round_trip_time The moving average time (sec) the ismaster

call took to complete.

@since 2.0.0

# File lib/mongo/server/description.rb, line 264
def initialize(address, config = {}, average_round_trip_time = 0)
  @address = address
  @config = config
  @features = Features.new(wire_versions, me || @address.to_s)
  @average_round_trip_time = average_round_trip_time
end

Public Instance Methods

==(other) click to toggle source

Check equality of two descriptions.

@example Check description equality.

description == other

@param [ Object ] other The other description.

@return [ true, false ] Whether the objects are equal.

@since 2.0.6

# File lib/mongo/server/description.rb, line 644
def ==(other)
  return false if self.class != other.class
  return false if unknown? || other.unknown?
  compare_config(other)
end
Also aliased as: eql?
arbiter?() click to toggle source

Will return true if the server is an arbiter.

@example Is the server an arbiter?

description.arbiter?

@return [ true, false ] If the server is an arbiter.

@since 2.0.0

# File lib/mongo/server/description.rb, line 200
def arbiter?
  !!config[ARBITER] && !replica_set_name.nil?
end
arbiters() click to toggle source

Get a list of all arbiters in the replica set.

@example Get the arbiters in the replica set.

description.arbiters

@return [ Array<String> ] The arbiters in the set.

@since 2.0.0

# File lib/mongo/server/description.rb, line 212
def arbiters
  @arbiters ||= (config[ARBITERS] || []).map { |s| s.downcase }
end
election_id() click to toggle source

Get the electionId from the config.

@example Get the electionId.

description.election_id

@return [ BSON::ObjectId ] The election id.

@since 2.1.0

# File lib/mongo/server/description.rb, line 375
def election_id
  config[ELECTION_ID]
end
eql?(other)
Alias for: ==
ghost?() click to toggle source

Is the server a ghost in a replica set?

@example Is the server a ghost?

description.ghost?

@return [ true, false ] If the server is a ghost.

@since 2.0.0

# File lib/mongo/server/description.rb, line 224
def ghost?
  !!config[REPLICA_SET]
end
hidden?() click to toggle source

Will return true if the server is hidden.

@example Is the server hidden?

description.hidden?

@return [ true, false ] If the server is hidden.

@since 2.0.0

# File lib/mongo/server/description.rb, line 236
def hidden?
  !!config[HIDDEN]
end
hosts() click to toggle source

Get a list of all servers in the replica set.

@example Get the servers in the replica set.

description.hosts

@return [ Array<String> ] The servers in the set.

@since 2.0.0

# File lib/mongo/server/description.rb, line 248
def hosts
  @hosts ||= (config[HOSTS] || []).map { |s| s.downcase }
end
inspect() click to toggle source

Inspect the server description.

@example Inspect the server description

description.inspect

@return [ String ] The inspection.

@since 2.0.0

# File lib/mongo/server/description.rb, line 279
def inspect
  "#<Mongo::Server:Description:0x#{object_id} config=#{config} average_round_trip_time=#{average_round_trip_time}>"
end
is_server?(server) click to toggle source

Is this description from the given server.

@example Check if the description is from a given server.

description.is_server?(server)

@return [ true, false ] If the description is from the server.

@since 2.0.6

# File lib/mongo/server/description.rb, line 592
def is_server?(server)
  address == server.address
end
last_write_date() click to toggle source

Get the lastWriteDate from the lastWrite subdocument in the config.

@example Get the lastWriteDate value.

description.last_write_date

@return [ Time ] The last write date.

@since 2.4.0

# File lib/mongo/server/description.rb, line 399
def last_write_date
  config[LAST_WRITE][LAST_WRITE_DATE] if config[LAST_WRITE]
end
lists_server?(server) click to toggle source

Is a server included in this description's list of servers.

@example Check if a server is in the description list of servers.

description.lists_server?(server)

@return [ true, false ] If a server is in the description's list

of servers.

@since 2.0.6

# File lib/mongo/server/description.rb, line 605
def lists_server?(server)
  servers.include?(server.address.to_s)
end
logical_session_timeout() click to toggle source

Get the logicalSessionTimeoutMinutes from the config.

@example Get the logicalSessionTimeoutMinutes value in minutes.

description.logical_session_timeout

@return [ Integer, nil ] The logical session timeout in minutes.

@since 2.5.0

# File lib/mongo/server/description.rb, line 411
def logical_session_timeout
  config[LOGICAL_SESSION_TIMEOUT_MINUTES] if config[LOGICAL_SESSION_TIMEOUT_MINUTES]
end
max_bson_object_size() click to toggle source

Get the max BSON object size for this server version.

@example Get the max BSON object size.

description.max_bson_object_size

@return [ Integer ] The maximum object size in bytes.

@since 2.0.0

# File lib/mongo/server/description.rb, line 291
def max_bson_object_size
  config[MAX_BSON_OBJECT_SIZE]
end
max_message_size() click to toggle source

Get the max message size for this server version.

@example Get the max message size.

description.max_message_size

@return [ Integer ] The maximum message size in bytes.

@since 2.0.0

# File lib/mongo/server/description.rb, line 303
def max_message_size
  config[MAX_MESSAGE_BYTES]
end
max_wire_version() click to toggle source

Get the maximum wire version.

@example Get the max wire version.

description.max_wire_version

@return [ Integer ] The max wire version supported.

@since 2.0.0

# File lib/mongo/server/description.rb, line 327
def max_wire_version
  config[MAX_WIRE_VERSION] || LEGACY_WIRE_VERSION
end
max_write_batch_size() click to toggle source

Get the maximum batch size for writes.

@example Get the max batch size.

description.max_write_batch_size

@return [ Integer ] The max batch size.

@since 2.0.0

# File lib/mongo/server/description.rb, line 315
def max_write_batch_size
  config[MAX_WRITE_BATCH_SIZE] || DEFAULT_MAX_WRITE_BATCH_SIZE
end
me() click to toggle source

Get the me field value.

@example Get the me field value.

description.me

@return [ String ] The me field.

@since 2.1.0

# File lib/mongo/server/description.rb, line 351
def me
  config[ME]
end
me_mismatch?() click to toggle source

Check if there is a mismatch between the address host and the me field.

@example Check if there is a mismatch.

description.me_mismatch?

@return [ true, false ] If there is a mismatch between the me field and the address host.

@since 2.0.6

# File lib/mongo/server/description.rb, line 630
def me_mismatch?
  !!(address.to_s != me if me)
end
min_wire_version() click to toggle source

Get the minimum wire version.

@example Get the min wire version.

description.min_wire_version

@return [ Integer ] The min wire version supported.

@since 2.0.0

# File lib/mongo/server/description.rb, line 339
def min_wire_version
  config[MIN_WIRE_VERSION] || LEGACY_WIRE_VERSION
end
mongos?() click to toggle source

Is the server a mongos?

@example Is the server a mongos?

description.mongos?

@return [ true, false ] If the server is a mongos.

@since 2.0.0

# File lib/mongo/server/description.rb, line 423
def mongos?
  config[MESSAGE] == MONGOS_MESSAGE
end
other?() click to toggle source

Is the description of type other.

@example Is the description of type other.

description.other?

@return [ true, false ] If the description is other.

@since 2.0.0

# File lib/mongo/server/description.rb, line 435
def other?
  (!primary? && !secondary? && !passive? && !arbiter?) ||
    (hidden? && !replica_set_name.nil?)
end
passive?() click to toggle source

Will return true if the server is passive.

@example Is the server passive?

description.passive?

@return [ true, false ] If the server is passive.

@since 2.0.0

# File lib/mongo/server/description.rb, line 448
def passive?
  !!config[PASSIVE]
end
passives() click to toggle source

Get a list of the passive servers in the cluster.

@example Get the passives.

description.passives

@return [ Array<String> ] The list of passives.

@since 2.0.0

# File lib/mongo/server/description.rb, line 460
def passives
  @passives ||= (config[PASSIVES] || []).map { |s| s.downcase }
end
primary?() click to toggle source

Will return true if the server is a primary.

@example Is the server a primary?

description.primary?

@return [ true, false ] If the server is a primary.

@since 2.0.0

# File lib/mongo/server/description.rb, line 472
def primary?
  !!config[PRIMARY] &&
    (config[PRIMARY_HOST].nil? || config[PRIMARY_HOST] == address.to_s) &&
      !replica_set_name.nil?
end
replica_set_member?() click to toggle source

Does this description correspond to a replica set member.

@example Check if the description is from a replica set member.

description.replica_set_member?

@return [ true, false ] If the description is from a replica set

member.

@since 2.0.6

# File lib/mongo/server/description.rb, line 618
def replica_set_member?
  !(standalone? || mongos?)
end
replica_set_name() click to toggle source

Get the name of the replica set the server belongs to, returns nil if none.

@example Get the replica set name.

description.replica_set_name

@return [ String, nil ] The name of the replica set.

@since 2.0.0

# File lib/mongo/server/description.rb, line 487
def replica_set_name
  config[SET_NAME]
end
secondary?() click to toggle source

Will return true if the server is a secondary.

@example Is the server a secondary?

description.secondary?

@return [ true, false ] If the server is a secondary.

@since 2.0.0

# File lib/mongo/server/description.rb, line 511
def secondary?
  !!config[SECONDARY] && !replica_set_name.nil?
end
server_type() click to toggle source

Returns the server type as a symbol.

@example Get the server type.

description.server_type

@return [ Symbol ] The server type.

@since 2.4.0

# File lib/mongo/server/description.rb, line 523
def server_type
  return :arbiter if arbiter?
  return :ghost if ghost?
  return :sharded if mongos?
  return :primary if primary?
  return :secondary if secondary?
  return :standalone if standalone?
  :unknown
end
servers() click to toggle source

Get a list of all servers known to the cluster.

@example Get all servers.

description.servers

@return [ Array<String> ] The list of all servers.

@since 2.0.0

# File lib/mongo/server/description.rb, line 499
def servers
  hosts + arbiters + passives
end
set_version() click to toggle source

Get the setVersion from the config.

@example Get the setVersion.

description.set_version

@return [ Integer ] The set version.

@since 2.2.2

# File lib/mongo/server/description.rb, line 387
def set_version
  config[SET_VERSION]
end
standalone?() click to toggle source

Is this server a standalone server?

@example Is the server standalone?

description.standalone?

@return [ true, false ] If the server is standalone.

@since 2.0.0

# File lib/mongo/server/description.rb, line 541
def standalone?
  replica_set_name.nil? && !mongos? && !ghost? && !unknown?
end
tags() click to toggle source

Get the tags configured for the server.

@example Get the tags.

description.tags

@return [ Hash ] The tags of the server.

@since 2.0.0

# File lib/mongo/server/description.rb, line 363
def tags
  config[TAGS] || {}
end
unknown!() click to toggle source

A result from another server's ismaster command before this server has refreshed causes the need for this description to become unknown before the next refresh.

@example Force an unknown state.

description.unknown!

@return [ true ] Always true.

@since 2.0.0

# File lib/mongo/server/description.rb, line 568
def unknown!
  @config = {} and true
end
unknown?() click to toggle source

Is the server description currently unknown?

@example Is the server description unknown?

description.unknown?

@return [ true, false ] If the server description is unknown.

@since 2.0.0

# File lib/mongo/server/description.rb, line 553
def unknown?
  config.empty? || (config[Operation::Result::OK] &&
                      config[Operation::Result::OK] != 1)
end
wire_versions() click to toggle source

Get the range of supported wire versions for the server.

@example Get the wire version range.

description.wire_versions

@return [ Range ] The wire version range.

@since 2.0.0

# File lib/mongo/server/description.rb, line 580
def wire_versions
  min_wire_version..max_wire_version
end

Private Instance Methods

compare_config(other) click to toggle source
# File lib/mongo/server/description.rb, line 653
def compare_config(other)
  config.keys.all? do |k|
    config[k] == other.config[k] || EXCLUDE_FOR_COMPARISON.include?(k)
  end
end