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.
| 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 |
| 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. |
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
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
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