123456789_123456789_123456789_123456789_123456789_

Class: Mongo::Cluster::Topology::Base

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Forwardable
Instance Chain:
Inherits: Object
Defined in: lib/mongo/cluster/topology/base.rb

Overview

Defines behavior common to all topologies.

Since:

  • 2.7.0

Constant Summary

::Mongo::Loggable - Included

PREFIX

Class Method Summary

Instance Attribute Summary

Instance Method Summary

::Mongo::Monitoring::Publishable - Included

::Mongo::Loggable - Included

#log_debug

Convenience method to log debug messages with the standard prefix.

#log_error

Convenience method to log error messages with the standard prefix.

#log_fatal

Convenience method to log fatal messages with the standard prefix.

#log_info

Convenience method to log info messages with the standard prefix.

#log_warn

Convenience method to log warn messages with the standard prefix.

#logger

Get the logger instance.

#_mongo_log_prefix, #format_message

Constructor Details

.new(options, monitoring, cluster) ⇒ Base

Initialize the topology with the options.

Parameters:

  • options (Hash)

    The options.

  • monitoring (Monitoring)

    The monitoring.

  • cluster (Cluster)

    The cluster.

Options Hash (options):

  • :replica_set (Symbol)

    Name of the replica set to connect to. Can be left blank (either nil or the empty string are accepted) to discover the name from the cluster. If the addresses belong to different replica sets there is no guarantee which replica set is selected - in particular, the driver may choose the replica set name of a secondary if it returns its response prior to a primary belonging to a different replica set. This option can only be specified when instantiating a replica set topology.

  • :max_election_id (BSON::ObjectId)

    Max election id per the SDAM specification. This option can only be specified when instantiating a replica set topology.

  • :max_set_version (Integer)

    Max set version per the SDAM specification. This option can only be specified when instantiating a replica set topology.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 54

def initialize(options, monitoring, cluster)
  options = validate_options(options, cluster)

  @options = options
  @monitoring = monitoring
  @cluster = cluster
  # The list of server descriptions is simply fixed at the time of
  # topology creation. If server description change later, a
  # new topology instance should be created.
  @server_descriptions = {}
  cluster.servers_list.each do |server|
    @server_descriptions[server.address.to_s] = server.description
  end

  if is_a?(LoadBalanced)
    @compatible = true
  else
    begin
      server_descriptions.each do |_address_str, desc|
        desc.features.check_driver_support! unless desc.unknown?
      end
    rescue Error::UnsupportedFeatures => e
      @compatible = false
      @compatibility_error = e
    else
      @compatible = true
    end
  end

  @have_data_bearing_servers = false
  @logical_session_timeout = server_descriptions.inject(nil) do |min, (_address_str, desc)|
    # LST is only read from data-bearing servers
    if desc.data_bearing?
      @have_data_bearing_servers = true
      break unless timeout = desc.logical_session_timeout

      [ timeout, min || timeout ].min
    else
      min
    end
  end

  return unless Mongo::Lint.enabled?

  freeze
end

Instance Attribute Details

#clusterCluster (readonly, private)

Returns:

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 106

attr_reader :cluster

#compatibility_errorException (readonly)

Returns:

  • (Exception)

    compatibility_error If topology is incompatible with the driver, an exception with information regarding the incompatibility. If topology is compatible with the driver, nil.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 148

attr_reader :compatibility_error

#compatible?true|false (readonly)

Returns:

  • (true|false)

    compatible Whether topology is compatible with the driver.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 139

def compatible?
  @compatible
end

#data_bearing_servers?true | false (readonly)

Returns:

  • (true | false)

    have_data_bearing_servers Whether the topology has any data bearing servers, for the purposes of logical session timeout calculation.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 165

def data_bearing_servers?
  @have_data_bearing_servers
end

#logical_session_timeoutInteger? (readonly)

Note:

The value is in minutes, unlike most other times in the driver which are returned in seconds.

The logical session timeout value in minutes.

Returns:

  • (Integer, nil)

    The logical session timeout.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 158

attr_reader :logical_session_timeout

#monitoring ⇒ monitoring (readonly)

Returns:

  • (monitoring)

    monitoring the monitoring.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 115

attr_reader :monitoring

#optionsHash (readonly)

Returns:

  • (Hash)

    options The options.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 102

attr_reader :options

#server_descriptionsHash (readonly)

Returns:

  • (Hash)

    server_descriptions The map of address strings to server descriptions, one for each server in the cluster.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 133

attr_reader :server_descriptions

Instance Method Details

#addressesArray<String>

Returns:

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 110

def addresses
  cluster.addresses.map(&:seed)
end

#max_election_idBSON::ObjectId

The largest electionId ever reported by a primary. May be nil.

Returns:

  • (BSON::ObjectId)

    The election id.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 175

def max_election_id
  options[:max_election_id]
end

#max_set_versionInteger

The largest setVersion ever reported by a primary. May be nil.

Returns:

  • (Integer)

    The set version.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 185

def max_set_version
  options[:max_set_version]
end

#new_max_election_id(description)

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 190

def new_max_election_id(description)
  if description.election_id &&
     (max_election_id.nil? ||
         description.election_id > max_election_id)
    description.election_id
  else
    max_election_id
  end
end

#new_max_set_version(description)

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 201

def new_max_set_version(description)
  if description.set_version &&
     (max_set_version.nil? ||
         description.set_version > max_set_version)
    description.set_version
  else
    max_set_version
  end
end

#replica_set_nameString

Get the replica set name configured for this topology.

Examples:

Get the replica set name.

topology.replica_set_name

Returns:

  • (String)

    The name of the configured replica set.

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 125

def replica_set_name
  options[:replica_set_name]
end

#server_hosts_match_any?(patterns) ⇒ true | false

Compares each server address against the list of patterns.

Parameters:

  • patterns (Array<String>)

    the URL suffixes to compare each server against.

Returns:

  • (true | false)

    whether any of the addresses match any of the patterns or not.

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 220

def server_hosts_match_any?(patterns)
  server_descriptions.any? do |addr_spec, _desc|
    addr, _port = addr_spec.split(':')
    patterns.any? { |pattern| addr.end_with?(pattern) }
  end
end

#validate_options(options, _cluster) ⇒ Hash (private)

Validates and/or transforms options as necessary for the topology.

Returns:

  • (Hash)

    New options

Since:

  • 2.7.0

[ GitHub ]

  
# File 'lib/mongo/cluster/topology/base.rb', line 232

def validate_options(options, _cluster)
  options
end