Base — Documentation by YARD 0.9.37 (original) (raw)
Class: Mongo::ServerSelector::Base
Inherits:
Object
- Object
- Mongo::ServerSelector::Base show all
Defined in:
lib/mongo/server_selector/base.rb
Overview
Instance Attribute Summary collapse
- #hedge ⇒ Hash | nil readonly
Hedge The document specifying whether to enable hedged reads. - #max_staleness ⇒ Integer readonly
Max_staleness The maximum replication lag, in seconds, that a secondary can suffer and still be eligible for a read. - #options ⇒ Hash readonly
Options The options. - #tag_sets ⇒ Array readonly
Tag_sets The tag sets used to select servers.
Instance Method Summarycollapse
- #==(other) ⇒ true, false
Check equality of two server selectors. - #candidates(cluster) ⇒ Array private
Returns servers of acceptable types from the cluster. - #initialize(options = nil) ⇒ Base constructor private
Initialize the server selector. - #inspect ⇒ String
Inspect the server selector. - #local_threshold ⇒ Float deprecated Deprecated.
This setting is now taken from the cluster options when a server is selected. Will be removed in version 3.0. - #local_threshold_with_cluster(cluster) ⇒ Object private
- #select_server(cluster, ping = nil, session = nil, write_aggregation: false, deprioritized: [], timeout: nil) ⇒ Mongo::Server
Select a server from the specified cluster, taking into account mongos pinning for the specified session. - #server_selection_timeout ⇒ Float deprecated Deprecated.
This setting is now taken from the cluster options when a server is selected. Will be removed in version 3.0. - #suitable_servers(cluster) ⇒ Array private
Returns servers satisfying the server selector from the cluster. - #try_select_server(cluster, write_aggregation: false, deprioritized: []) ⇒ Server | nil private
Tries to find a suitable server, returns the server if one is available or nil if there isn’t a suitable server.
Constructor Details
#initialize(options = nil) ⇒ 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 server selector.
| 49 50 51 52 53 54 55 56 57 58 59 60 | # File 'lib/mongo/server_selector/base.rb', line 49 def initialize(options = nil) options = options ? options.dup : {} if options[:max_staleness] == -1 options.delete(:max_staleness) end @options = options @tag_sets = options[:tag_sets] || [] @max_staleness = options[:max_staleness] @hedge = options[:hedge] validate! end | | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
Instance Attribute Details
#hedge ⇒ Hash | nil
Returns hedge The document specifying whether to enable hedged reads.
76 77 78 | # File 'lib/mongo/server_selector/base.rb', line 76 def hedge @hedge end |
---|
#max_staleness ⇒ Integer
Returns max_staleness The maximum replication lag, in seconds, that a secondary can suffer and still be eligible for a read.
72 73 74 | # File 'lib/mongo/server_selector/base.rb', line 72 def max_staleness @max_staleness end |
---|
#options ⇒ Hash
Returns options The options.
63 64 65 | # File 'lib/mongo/server_selector/base.rb', line 63 def options @options end |
---|
#tag_sets ⇒ Array
Returns tag_sets The tag sets used to select servers.
66 67 68 | # File 'lib/mongo/server_selector/base.rb', line 66 def tag_sets @tag_sets end |
---|
Instance Method Details
#==(other) ⇒ true, false
Check equality of two server selectors.
136 137 138 139 | # File 'lib/mongo/server_selector/base.rb', line 136 def ==(other) name == other.name && hedge == other.hedge && max_staleness == other.max_staleness && tag_sets == other.tag_sets end |
---|
#candidates(cluster) ⇒ Array<Server>
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 servers of acceptable types from the cluster.
Does not perform staleness validation, staleness filtering or latency filtering.
| 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 | # File 'lib/mongo/server_selector/base.rb', line 403 def candidates(cluster) servers = cluster.servers servers.each do |server| validate_max_staleness_support!(server) end if cluster.single? servers elsif cluster.sharded? servers elsif cluster.replica_set? select_in_replica_set(servers) else [] end end | | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
#inspect ⇒ String
Inspect the server selector.
122 123 124 | # File 'lib/mongo/server_selector/base.rb', line 122 def inspect "#<#{self.class.name}:0x#{object_id} tag_sets=#{tag_sets.inspect} max_staleness=#{max_staleness.inspect} hedge=#{hedge}>" end |
---|
#local_threshold ⇒ Float
Deprecated.
This setting is now taken from the cluster options when a server is selected. Will be removed in version 3.0.
Get the local threshold boundary for nearest selection in seconds.
| 105 106 107 | # File 'lib/mongo/server_selector/base.rb', line 105 def local_threshold @local_threshold ||= (options[:local_threshold] | | ServerSelector::LOCAL_THRESHOLD) end | | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
#local_threshold_with_cluster(cluster) ⇒ 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.
| 110 111 112 | # File 'lib/mongo/server_selector/base.rb', line 110 def local_threshold_with_cluster(cluster) options[:local_threshold] || cluster.options[:local_threshold] | | LOCAL_THRESHOLD end | | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
#select_server(cluster, ping = nil, session = nil, write_aggregation: false, deprioritized: [], timeout: nil) ⇒ Mongo::Server
Select a server from the specified cluster, taking into account mongos pinning for the specified session.
If the session is given and has a pinned server, this server is the only server considered for selection. If the server is of type mongos, it is returned immediately; otherwise monitoring checks on this server are initiated to update its status, and if the server becomes a mongos within the server selection timeout, it is returned.
If no session is given or the session does not have a pinned server, normal server selection process is performed among all servers in the specified cluster matching the preference of this server selector object. Monitoring checks are initiated on servers in the cluster until a suitable server is found, up to the server selection timeout.
If a suitable server is not found within the server selection timeout, this method raises Error::NoServerAvailable.
| 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | # File 'lib/mongo/server_selector/base.rb', line 183 def select_server( cluster, ping = nil, session = nil, write_aggregation: false, deprioritized: [], timeout: nil ) select_server_impl(cluster, ping, session, write_aggregation, deprioritized, timeout).tap do |server| if Lint.enabled? && !server.pool.ready? raise Error::LintError, 'Server selector returning a server with a pool which is not ready' end end end | | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
#server_selection_timeout ⇒ Float
Deprecated.
This setting is now taken from the cluster options when a server is selected. Will be removed in version 3.0.
Get the timeout for server selection.
| 89 90 91 92 | # File 'lib/mongo/server_selector/base.rb', line 89 def server_selection_timeout @server_selection_timeout ||= (options[:server_selection_timeout] | | ServerSelector::SERVER_SELECTION_TIMEOUT) end | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
#suitable_servers(cluster) ⇒ Array<Server>
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 servers satisfying the server selector from the cluster.
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 | # File 'lib/mongo/server_selector/base.rb', line 427 def suitable_servers(cluster) if cluster.single? candidates(cluster) elsif cluster.sharded? local_threshold = local_threshold_with_cluster(cluster) servers = candidates(cluster) near_servers(servers, local_threshold) elsif cluster.replica_set? validate_max_staleness_value!(cluster) candidates(cluster) else [] end end |
---|
#try_select_server(cluster, write_aggregation: false, deprioritized: []) ⇒ Server | nil
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.
Tries to find a suitable server, returns the server if one is available or nil if there isn’t a suitable server.
| 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | # File 'lib/mongo/server_selector/base.rb', line 352 def try_select_server(cluster, write_aggregation: false, deprioritized: []) servers = if write_aggregation && cluster.replica_set? is_write_supported = cluster.servers.reduce(true) do |res, server| res && server.features.merge_out_on_secondary_enabled? end if is_write_supported suitable_servers(cluster) else [cluster.servers.detect(&:primary?)] end else suitable_servers(cluster) end server = suitable_server(servers, deprioritized) if server if Lint.enabled? if server.average_round_trip_time.nil? raise Error::LintError, "Server #{server.address} has nil average rtt" end end end server end | | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |