Base — Documentation by YARD 0.9.37 (original) (raw)

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

Overview

Defines behavior common to all topologies.

Constant Summary

Constants included from Loggable

Loggable::PREFIX

Instance Attribute Summary collapse

Instance Method Summarycollapse

Methods included from Monitoring::Publishable

#publish_cmap_event, #publish_event, #publish_sdam_event

Methods included from Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Constructor Details

#initialize(options, monitoring, cluster) ⇒ Base

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize the topology with the options.

| 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # File 'lib/mongo/cluster/topology/base.rb', line 56 def initialize(options, monitoring, cluster) options = validate_options(options, cluster) @options = options @monitoring = monitoring @cluster = cluster @server_descriptions = {} (servers = 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| unless desc.unknown? desc.features.check_driver_support! end 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)| if desc.data_bearing? @have_data_bearing_servers = true break unless timeout = desc.logical_session_timeout [timeout, (min | | timeout)].min else min end end if Mongo::Lint.enabled? freeze end end | | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Instance Attribute Details

#compatibility_error ⇒ Exception

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

151 152 153 # File 'lib/mongo/cluster/topology/base.rb', line 151 def compatibility_error @compatibility_error end

#logical_session_timeout ⇒ Integer?

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.

161 162 163 # File 'lib/mongo/cluster/topology/base.rb', line 161 def logical_session_timeout @logical_session_timeout end

#monitoringmonitoring

Returns monitoring the monitoring.

118 119 120 # File 'lib/mongo/cluster/topology/base.rb', line 118 def monitoring @monitoring end

#options ⇒ Hash

Returns options The options.

105 106 107 # File 'lib/mongo/cluster/topology/base.rb', line 105 def options @options end

#server_descriptions ⇒ Hash

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

136 137 138 # File 'lib/mongo/cluster/topology/base.rb', line 136 def server_descriptions @server_descriptions end

Instance Method Details

#addresses ⇒ Array

Returns addresses Server addresses.

113 114 115 # File 'lib/mongo/cluster/topology/base.rb', line 113 def addresses cluster.addresses.map(&:seed) end

#compatible? ⇒ true|false

Returns compatible Whether topology is compatible with the driver.

142 143 144 # File 'lib/mongo/cluster/topology/base.rb', line 142 def compatible? @compatible end

#data_bearing_servers? ⇒ true | false

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

168 169 170 # File 'lib/mongo/cluster/topology/base.rb', line 168 def data_bearing_servers? @have_data_bearing_servers end

#max_election_id ⇒ BSON::ObjectId

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

178 179 180 # File 'lib/mongo/cluster/topology/base.rb', line 178 def max_election_id options[:max_election_id] end

#max_set_version ⇒ Integer

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

188 189 190 # File 'lib/mongo/cluster/topology/base.rb', line 188 def max_set_version options[:max_set_version] end

#new_max_election_id(description) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

| 193 194 195 196 197 198 199 200 201 | # File 'lib/mongo/cluster/topology/base.rb', line 193 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) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

| 204 205 206 207 208 209 210 211 212 | # File 'lib/mongo/cluster/topology/base.rb', line 204 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_name ⇒ String

Get the replica set name configured for this topology.

128 129 130 # File 'lib/mongo/cluster/topology/base.rb', line 128 def replica_set_name options[:replica_set_name] end

#server_hosts_match_any?(patterns) ⇒ true | false

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Compares each server address against the list of patterns.

| 223 224 225 226 227 228 | # File 'lib/mongo/cluster/topology/base.rb', line 223 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 | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------- |