Class Mongo::Cluster
In: lib/mongo/cluster.rb
lib/mongo/cluster/topology.rb
lib/mongo/cluster/sdam_flow.rb
lib/mongo/cluster/topology/replica_set_no_primary.rb
lib/mongo/cluster/topology/base.rb
lib/mongo/cluster/topology/replica_set_with_primary.rb
lib/mongo/cluster/topology/unknown.rb
lib/mongo/cluster/topology/no_replica_set_options.rb
lib/mongo/cluster/topology/single.rb
lib/mongo/cluster/topology/sharded.rb
lib/mongo/cluster/reapers/socket_reaper.rb
lib/mongo/cluster/reapers/cursor_reaper.rb
lib/mongo/cluster/periodic_executor.rb
Parent: Object

Copyright (C) 2018-2019 MongoDB, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Methods

Included Modules

Monitoring::Publishable Event::Subscriber Loggable

Classes and Modules

Module Mongo::Cluster::Topology
Class Mongo::Cluster::CursorReaper
Class Mongo::Cluster::PeriodicExecutor
Class Mongo::Cluster::SdamFlow
Class Mongo::Cluster::SocketReaper

Constants

MAX_READ_RETRIES = 1   The default number of mongos read retries.

@since 2.1.1

MAX_WRITE_RETRIES = 1   The default number of mongos write retries.

@since 2.4.2

READ_RETRY_INTERVAL = 5   The default mongos read retry interval, in seconds.

@since 2.1.1

IDLE_WRITE_PERIOD_SECONDS = 10   How often an idle primary writes a no-op to the oplog.

@since 2.4.0

CLUSTER_TIME = 'clusterTime'.freeze   The cluster time key in responses from mongos servers.

@since 2.5.0

Attributes

app_metadata  [R]  @return [ Mongo::Server::AppMetadata ] The application metadata, used for connection
  handshakes.

@since 2.4.0

cluster_time  [R]  @return [ BSON::Document ] The latest cluster time seen.

@since 2.5.0

monitoring  [R]  @return [ Monitoring ] monitoring The monitoring.
options  [R]  @return [ Hash ] The options hash.
sdam_flow_lock  [R]  @api private
seeds  [R]  @return [ Array<String> ] The addresses of seed servers. Contains
  addresses that were given to Cluster when it was instantiated, not
  current addresses that the cluster is using as a result of SDAM.

@since 2.7.0 @api private

session_pool  [R]  @private

@since 2.5.1

topology  [R]  @return [ Object ] The cluster topology.

Public Class methods

Create a cluster for the provided client, for use when we don‘t want the client‘s original cluster instance to be the same.

@api private

@example Create a cluster for the client.

  Cluster.create(client)

@param [ Client ] client The client to create on.

@return [ Cluster ] The cluster.

@since 2.0.0

Finalize the cluster for garbage collection.

@example Finalize the cluster.

  Cluster.finalize(pools)

@param [ Hash<Address, Server::ConnectionPool> ] pools Ignored. @param [ PeriodicExecutor ] periodic_executor The periodic executor. @param [ SessionPool ] session_pool The session pool.

@return [ Proc ] The Finalizer.

@since 2.2.0

Instantiate the new cluster.

@api private

@example Instantiate the cluster.

  Mongo::Cluster.new(["127.0.0.1:27017"], monitoring)

@note Cluster should never be directly instantiated outside of a Client.

@note When connecting to a mongodb+srv:// URI, the client expands such a

  URI into a list of servers and passes that list to the Cluster
  constructor. When connecting to a standalone mongod, the Cluster
  constructor receives the corresponding address as an array of one string.

@param [ Array<String> ] seeds The addresses of the configured servers @param [ Monitoring ] monitoring The monitoring. @param [ Hash ] options Options. Client constructor forwards its

  options to Cluster constructor, although Cluster recognizes
  only a subset of the options recognized by Client.

@option options [ true, false ] :scan Whether to scan all seeds

  in constructor. The default in driver version 2.x is to do so;
  driver version 3.x will not scan seeds in constructor. Opt in to the
  new behavior by setting this option to false. *Note:* setting
  this option to nil enables scanning seeds in constructor in driver
  version 2.x. Driver version 3.x will recognize this option but
  will ignore it and will never scan seeds in the constructor.

@option options [ true, false ] :monitoring_io For internal driver

  use only. Set to false to prevent SDAM-related I/O from being
  done by this cluster or servers under it. Note: setting this option
  to false will make the cluster non-functional. It is intended for
  use in tests which manually invoke SDAM state transitions.

@since 2.0.0

Public Instance methods

Determine if this cluster of servers is equal to another object. Checks the servers currently in the cluster, not what was configured.

@example Is the cluster equal to the object?

  cluster == other

@param [ Object ] other The object to compare to.

@return [ true, false ] If the objects are equal.

@since 2.0.0

Add a server to the cluster with the provided address. Useful in auto-discovery of new servers when an existing server executes an ismaster and potentially non-configured servers were included.

@example Add the server for the address to the cluster.

  cluster.add('127.0.0.1:27018')

@param [ String ] host The address of the server to add.

@option options [ Boolean ] :monitor For internal driver use only:

  whether to monitor the newly added server.

@return [ Server ] The newly added server, if not present already.

@since 2.0.0

The addresses in the cluster.

@example Get the addresses in the cluster.

  cluster.addresses

@return [ Array<Mongo::Address> ] The addresses.

@since 2.0.6

Whether the cluster object is connected to its cluster.

@return [ true|false ] Whether the cluster is connected.

@api private @since 2.7.0

Disconnect all servers.

@note Applications should call Client#close to disconnect from the cluster rather than calling this method. This method is for internal driver use only.

@example Disconnect the cluster‘s servers.

  cluster.disconnect!

@param [ Boolean ] wait Whether to wait for background threads to

  finish running.

@return [ true ] Always true.

@since 2.1.0

Determine if the cluster would select a readable server for the provided read preference.

@example Is a readable server present?

  topology.has_readable_server?(server_selector)

@param [ ServerSelector ] server_selector The server

  selector.

@return [ true, false ] If a readable server is present.

@since 2.4.0

Determine if the cluster would select a writable server.

@example Is a writable server present?

  topology.has_writable_server?

@return [ true, false ] If a writable server is present.

@since 2.4.0

Get the nicer formatted string for use in inspection.

@example Inspect the cluster.

  cluster.inspect

@return [ String ] The cluster inspection.

@since 2.0.0

Get the maximum number of times the cluster can retry a read operation on a mongos.

@example Get the max read retries.

  cluster.max_read_retries

@return [ Integer ] The maximum retries.

@since 2.1.1

Get the next primary server we can send an operation to.

@example Get the next primary server.

  cluster.next_primary

@param [ true, false ] ping Whether to ping the server before selection. Deprecated,

  not necessary with the implementation of the Server Selection specification.

@return [ Mongo::Server ] A primary server.

@since 2.0.0

Get the connection pool for the server.

@example Get the connection pool.

  cluster.pool(server)

@param [ Server ] server The server.

@return [ Server::ConnectionPool ] The connection pool.

@since 2.2.0 @deprecated

Get the interval, in seconds, in which a mongos read operation is retried.

@example Get the read retry interval.

  cluster.read_retry_interval

@return [ Float ] The interval.

@since 2.1.1

Reconnect all servers.

@example Reconnect the cluster‘s servers.

  cluster.reconnect!

@return [ true ] Always true.

@since 2.1.0 @deprecated Use Client#reconnect to reconnect to the cluster instead of

  calling this method. This method does not send SDAM events.

Remove the server from the cluster for the provided address, if it exists.

@example Remove the server from the cluster.

  server.remove('127.0.0.1:27017')

@param [ String ] host The host/port or socket address.

@return [ true|false ] Whether any servers were removed.

@since 2.0.0, return value added in 2.7.0

Force a scan of all known servers in the cluster.

If the sync parameter is true which is the default, the scan is performed synchronously in the thread which called this method. Each server in the cluster is checked sequentially. If there are many servers in the cluster or they are slow to respond, this can be a long running operation.

If the sync parameter is false, this method instructs all server monitor threads to perform an immediate scan and returns without waiting for scan results.

@note In both synchronous and asynchronous scans, each monitor

  thread maintains a minimum interval between scans, meaning
  calling this method may not initiate a scan on a particular server
  the very next instant.

@example Force a full cluster scan.

  cluster.scan!

@return [ true ] Always true.

@since 2.0.0

Get a list of server candidates from the cluster that can have operations executed on them.

@example Get the server candidates for an operation.

  cluster.servers

@return [ Array<Server> ] The candidate servers.

@since 2.0.0

@api private

@note This method is experimental and subject to change.

@api experimental @since 2.7.0

Update the max cluster time seen in a response.

@example Update the cluster time.

  cluster.update_cluster_time(result)

@param [ Operation::Result ] result The operation result containing the cluster time.

@return [ Object ] The cluster time.

@since 2.5.0

[Validate]