# File lib/mongo/server/description.rb, line 484 def primary? !!config[PRIMARY] && (primary_host.nil? || primary_host == address.to_s) && !replica_set_name.nil? end
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
@return [ Address
] address The server's address.
@return [ Float ] The moving average time the ismaster call took to complete.
@return [ Hash ] The actual result from the ismaster command.
@return [ Features
] features The features for the server.
Public Class Methods
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
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 656 def ==(other) return false if self.class != other.class return false if unknown? || other.unknown? compare_config(other) end
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
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
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
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
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 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 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 604 def is_server?(server) address == server.address end
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
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 617 def lists_server?(server) servers.include?(server.address.to_s) end
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
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
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
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
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
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
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 642 def me_mismatch? !!(address.to_s.downcase != me.downcase if me) end
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
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
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
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
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
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
Get the address of the primary host.
@example Get the address of the primary.
description.primary_host
@return [ String | nil ] The address of the primary.
@since 2.6.0
# File lib/mongo/server/description.rb, line 472 def primary_host config[PRIMARY_HOST] && config[PRIMARY_HOST].downcase end
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 630 def replica_set_member? !(standalone? || mongos?) end
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 499 def replica_set_name config[SET_NAME] end
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 523 def secondary? !!config[SECONDARY] && !replica_set_name.nil? end
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 535 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
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 511 def servers hosts + arbiters + passives end
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
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 553 def standalone? replica_set_name.nil? && !mongos? && !ghost? && !unknown? end
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 580 def unknown! @config = {} and true end
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 565 def unknown? config.empty? || (config[Operation::Result::OK] && config[Operation::Result::OK] != 1) end
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 592 def wire_versions min_wire_version..max_wire_version end
Private Instance Methods
# File lib/mongo/server/description.rb, line 665 def compare_config(other) config.keys.all? do |k| config[k] == other.config[k] || EXCLUDE_FOR_COMPARISON.include?(k) end end