Class: Mongo::Cluster::Topology::ReplicaSet
- Inherits:
-
Object
- Object
- Mongo::Cluster::Topology::ReplicaSet
- Includes:
- Loggable, Monitoring::Publishable
- Defined in:
- lib/mongo/cluster/topology/replica_set.rb
Overview
Defines behaviour when a cluster is in replica set topology.
Constant Summary collapse
- REPLICA_SET_NAME =
Constant for the replica set name configuration option.
:replica_set.freeze
- NAME =
The display name for the topology.
'Replica Set'.freeze
Constants included from Loggable
Instance Attribute Summary collapse
-
#monitoring ⇒ Monitoring
readonly
Monitoring The monitoring.
-
#options ⇒ Hash
readonly
Options The options.
Instance Method Summary collapse
-
#add_hosts?(description, servers) ⇒ true, false
Whether a server description’s hosts may be added to the cluster.
-
#display_name ⇒ String
Get the display name.
-
#elect_primary(description, servers) ⇒ ReplicaSet
Elect a primary server within this topology.
-
#has_readable_server?(cluster, server_selector = nil) ⇒ true, false
Determine if the topology would select a readable server for the provided candidates and read preference.
-
#has_writable_server?(cluster) ⇒ true, false
Determine if the topology would select a writable server for the provided candidates.
-
#initialize(options, monitoring, seeds = []) ⇒ ReplicaSet
constructor
Initialize the topology with the options.
-
#member_discovered ⇒ Object
Notify the topology that a member was discovered.
-
#remove_hosts?(description) ⇒ true, false
Whether a description can be used to remove hosts from the cluster.
-
#remove_server?(description, server) ⇒ true, false
Whether a specific server in the cluster can be removed, given a description.
-
#replica_set? ⇒ true
A replica set topology is a replica set.
-
#replica_set_name ⇒ String
Get the replica set name configured for this topology.
-
#servers(servers) ⇒ Array<Server>
Select appropriate servers for this topology.
-
#sharded? ⇒ false
A replica set topology is not sharded.
-
#single? ⇒ false
A replica set topology is not single.
-
#standalone_discovered ⇒ Topology::ReplicaSet
Notify the topology that a standalone was discovered.
-
#unknown? ⇒ false
A replica set topology is not unknown.
Methods included from Monitoring::Publishable
#publish_command, #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, seeds = []) ⇒ ReplicaSet
Initialize the topology with the options.
127 128 129 130 131 132 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 127 def initialize(, monitoring, seeds = []) @options = @monitoring = monitoring @max_election_id = nil @max_set_version = nil end |
Instance Attribute Details
#monitoring ⇒ Monitoring (readonly)
Returns monitoring The monitoring.
35 36 37 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 35 def monitoring @monitoring end |
#options ⇒ Hash (readonly)
Returns options The options.
32 33 34 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 32 def @options end |
Instance Method Details
#add_hosts?(description, servers) ⇒ true, false
Whether a server description’s hosts may be added to the cluster.
184 185 186 187 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 184 def add_hosts?(description, servers) !!(member_of_this_set?(description) && (!has_primary?(servers) || description.primary?)) end |
#display_name ⇒ String
Get the display name.
50 51 52 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 50 def display_name NAME end |
#elect_primary(description, servers) ⇒ ReplicaSet
Elect a primary server within this topology.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 65 def elect_primary(description, servers) if description.replica_set_name == replica_set_name unless detect_stale_primary!(description) servers.each do |server| if server.primary? && server.address != description.address server.description.unknown! end end update_max_election_id(description) update_max_set_version(description) end else log_warn( "Server #{description.address.to_s} has incorrect replica set name: " + "'#{description.replica_set_name}'. The current replica set name is '#{replica_set_name}'." ) end self end |
#has_readable_server?(cluster, server_selector = nil) ⇒ true, false
Determine if the topology would select a readable server for the provided candidates and read preference.
98 99 100 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 98 def has_readable_server?(cluster, server_selector = nil) (server_selector || ServerSelector.get(mode: :primary)).candidates(cluster).any? end |
#has_writable_server?(cluster) ⇒ true, false
Determine if the topology would select a writable server for the provided candidates.
113 114 115 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 113 def has_writable_server?(cluster) cluster.servers.any?{ |server| server.primary? } end |
#member_discovered ⇒ Object
Notify the topology that a member was discovered.
269 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 269 def member_discovered; end |
#remove_hosts?(description) ⇒ true, false
Whether a description can be used to remove hosts from the cluster.
199 200 201 202 203 204 205 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 199 def remove_hosts?(description) !description.config.empty? && (description.primary? || description.me_mismatch? || description.hosts.empty? || !member_of_this_set?(description)) end |
#remove_server?(description, server) ⇒ true, false
Whether a specific server in the cluster can be removed, given a description.
218 219 220 221 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 218 def remove_server?(description, server) remove_self?(description, server) || (member_of_this_set?(description) && !description.lists_server?(server)) end |
#replica_set? ⇒ true
A replica set topology is a replica set.
142 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 142 def replica_set?; true; end |
#replica_set_name ⇒ String
Get the replica set name configured for this topology.
152 153 154 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 152 def replica_set_name @replica_set_name ||= [REPLICA_SET_NAME] end |
#servers(servers) ⇒ Array<Server>
Select appropriate servers for this topology.
166 167 168 169 170 171 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 166 def servers(servers) servers.select do |server| (replica_set_name.nil? || server.replica_set_name == replica_set_name) && server.primary? || server.secondary? end end |
#sharded? ⇒ false
A replica set topology is not sharded.
231 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 231 def sharded?; false; end |
#single? ⇒ false
A replica set topology is not single.
241 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 241 def single?; false; end |
#standalone_discovered ⇒ Topology::ReplicaSet
Notify the topology that a standalone was discovered.
261 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 261 def standalone_discovered; self; end |
#unknown? ⇒ false
A replica set topology is not unknown.
251 |
# File 'lib/mongo/cluster/topology/replica_set.rb', line 251 def unknown?; false; end |