class Mongo::Cluster::Topology::Unknown

Defines behaviour for when a cluster is in an unknown state.

@since 2.0.0

Constants

NAME

The display name for the topology.

@since 2.0.0

Attributes

monitoring[R]

@return [ Monitoring ] monitoring The monitoring.

options[R]

@return [ Hash ] options The options.

Public Class Methods

new(options, monitoring, seeds = []) click to toggle source

Initialize the topology with the options.

@example Initialize the topology.

Unknown.new(options)

@param [ Hash ] options The options. @param [ Monitoring ] monitoring The monitoring. @param [ Array<String> ] seeds The seeds.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 108
def initialize(options, monitoring, seeds = [])
  @options = options
  @monitoring = monitoring
  @seeds = seeds
end

Public Instance Methods

add_hosts?(description, servers) click to toggle source

Whether a server description's hosts may be added to the cluster.

@example Check if a description's hosts may be added to the cluster.

topology.add_hosts?(description, servers)

@param [ Mongo::Server::Description ] description The description. @param [ Array<Mongo::Server> ] servers The cluster servers.

@return [ true, false ] Whether a description's hosts may be added.

@since 2.0.6

# File lib/mongo/cluster/topology/unknown.rb, line 190
def add_hosts?(description, servers)
  !(description.unknown? || description.ghost?)
end
display_name() click to toggle source

Get the display name.

@example Get the display name.

Unknown.display_name

@return [ String ] The display name.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 45
def display_name
  NAME
end
elect_primary(description, servers) click to toggle source

Elect a primary server within this topology.

@example Elect a primary server.

topology.elect_primary(description, servers)

@param [ Server::Description ] description The description of the

elected primary.

@param [ Array<Server> ] servers The list of known servers to the

cluster.

@return [ Sharded, ReplicaSet ] The new topology.

# File lib/mongo/cluster/topology/unknown.rb, line 60
def elect_primary(description, servers)
  if description.mongos?
    sharded = Sharded.new(options, monitoring)
    topology_changed(sharded)
    sharded
  else
    initialize_replica_set(description, servers)
  end
end
has_readable_server?(cluster, server_selector = nil) click to toggle source

Determine if the topology would select a readable server for the provided candidates and read preference.

@example Is a readable server present?

topology.has_readable_server?(cluster, server_selector)

@param [ Cluster ] cluster The cluster. @param [ ServerSelector ] server_selector The server

selector.

@return [ false ] An Unknown topology will never have a readable server.

@since 2.4.0

# File lib/mongo/cluster/topology/unknown.rb, line 83
def has_readable_server?(cluster, server_selector = nil); false; end
has_writable_server?(cluster) click to toggle source

Determine if the topology would select a writable server for the provided candidates.

@example Is a writable server present?

topology.has_writable_server?(servers)

@param [ Cluster ] cluster The cluster.

@return [ false ] An Unknown topology will never have a writable server.

@since 2.4.0

# File lib/mongo/cluster/topology/unknown.rb, line 96
def has_writable_server?(cluster); false; end
member_discovered() click to toggle source

Notify the topology that a member was discovered.

@example Notify the topology that a member was discovered.

topology.member_discovered

@since 2.4.0

# File lib/mongo/cluster/topology/unknown.rb, line 248
def member_discovered
  publish_sdam_event(
    Monitoring::TOPOLOGY_CHANGED,
    Monitoring::Event::TopologyChanged.new(self, self)
  )
end
remove_hosts?(description) click to toggle source

Whether a description can be used to remove hosts from the cluster.

@example Check if a description can be used to remove hosts from the cluster.

topology.remove_hosts?(description)

@param [ Mongo::Server::Description ] description The description.

@return [ true, false ] Whether hosts may be removed from the cluster.

@since 2.0.6

# File lib/mongo/cluster/topology/unknown.rb, line 204
def remove_hosts?(description)
  description.standalone?
end
remove_server?(description, server) click to toggle source

Whether a specific server in the cluster can be removed, given a description.

@example Check if a specific server can be removed from the cluster.

topology.remove_server?(description, server)

@param [ Mongo::Server::Description ] description The description. @param [ Mongo::Serve ] server The server in question.

@return [ true, false ] Whether the server can be removed from the cluster.

@since 2.0.6

# File lib/mongo/cluster/topology/unknown.rb, line 219
def remove_server?(description, server)
  description.standalone? && description.is_server?(server)
end
replica_set?() click to toggle source

An unknown topology is not a replica set.

@example Is the topology a replica set?

Unknown.replica_set?

@return [ false ] Always false.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 122
def replica_set?; false; end
replica_set_name() click to toggle source

Unknown topologies have no replica set name.

@example Get the replica set name.

unknown.replica_set_name

@return [ nil ] Always nil.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 132
def replica_set_name; nil; end
servers(servers) click to toggle source

Select appropriate servers for this topology.

@example Select the servers.

Unknown.servers(servers)

@param [ Array<Server> ] servers The known servers.

@raise [ Unknown ] Cannot select servers when the topology is

unknown.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 145
def servers(servers)
  []
end
sharded?() click to toggle source

An unknown topology is not sharded.

@example Is the topology sharded?

Unknown.sharded?

@return [ false ] Always false.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 157
def sharded?; false; end
single?() click to toggle source

An unknown topology is not single.

@example Is the topology single?

Unknown.single?

@return [ true ] Always false.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 167
def single?; false; end
standalone_discovered() click to toggle source

Notify the topology that a standalone was discovered.

@example Notify the topology that a standalone was discovered.

topology.standalone_discovered

@return [ Topology::Unknown, Topology::Single ] Either self or a

new Single topology.

@since 2.0.6

# File lib/mongo/cluster/topology/unknown.rb, line 232
def standalone_discovered
  if @seeds.size == 1
    single = Single.new(options, monitoring, @seeds)
    topology_changed(single)
    single
  else
    self
  end
end
unknown?() click to toggle source

An unknown topology is unknown.

@example Is the topology unknown?

Unknown.unknown?

@return [ true ] Always true.

@since 2.0.0

# File lib/mongo/cluster/topology/unknown.rb, line 177
def unknown?; true; end

Private Instance Methods

initialize_replica_set(description, servers) click to toggle source
# File lib/mongo/cluster/topology/unknown.rb, line 257
def initialize_replica_set(description, servers)
  servers.each do |server|
    if server.standalone? && server.address != description.address
      server.description.unknown!
    end
  end
  replica_set = ReplicaSet.new(options.merge(:replica_set => description.replica_set_name), monitoring)
  topology_changed(replica_set)
  replica_set
end
topology_changed(new_topology) click to toggle source
# File lib/mongo/cluster/topology/unknown.rb, line 268
def topology_changed(new_topology)
  publish_sdam_event(
    Monitoring::TOPOLOGY_CHANGED,
    Monitoring::Event::TopologyChanged.new(self, new_topology)
  )
end