class Mongo::ServerSelector::SecondaryPreferred
Encapsulates specifications for selecting servers, with
secondaries preferred, given a list of candidates.
@since 2.0.0
Constants
- SERVER_FORMATTED_NAME
Name of the this read preference in the server's format.
@since 2.5.0
Public Instance Methods
Get the name of the server mode type.
@example Get the name of the server mode for this preference.
preference.name
@return [ Symbol
] :secondary_preferred
@since 2.0.0
# File lib/mongo/server_selector/secondary_preferred.rb, line 39 def name :secondary_preferred end
Whether the slaveOk bit should be set on wire protocol messages.
I.e. whether the operation can be performed on a secondary server.
@return [ true ] true
@since 2.0.0
# File lib/mongo/server_selector/secondary_preferred.rb, line 49 def slave_ok? true end
Convert this server preference definition into a format appropriate
for a server.
@example Convert this server preference definition into a format
for a server. preference = Mongo::ServerSelector::SecondaryPreferred.new preference.to_doc
@return [ Hash ] The server preference formatted for a server.
@since 2.5.0
# File lib/mongo/server_selector/secondary_preferred.rb, line 91 def to_doc @doc ||= (preference = { mode: SERVER_FORMATTED_NAME } preference.merge!({ tags: tag_sets }) unless tag_sets.empty? preference.merge!({ maxStalenessSeconds: max_staleness }) if max_staleness preference) end
Convert this server preference definition into a format appropriate
for a mongos server.
Note that the server preference is not sent to mongos as part of the query
selector if there are no tag sets, for maximum backwards compatibility.
@example Convert this server preference definition into a format
for mongos. preference = Mongo::ServerSelector::SecondaryPreferred.new preference.to_mongos
@return [ Hash ] The server preference formatted for a mongos server.
@since 2.0.0
# File lib/mongo/server_selector/secondary_preferred.rb, line 75 def to_mongos return nil if tag_sets.empty? && max_staleness.nil? to_doc end
Private Instance Methods
# File lib/mongo/server_selector/secondary_preferred.rb, line 116 def max_staleness_allowed? true end
Select servers taking into account any defined tag sets and
local threshold, with secondaries.
@example Select servers given a list of candidates,
with secondaries preferred. preference = Mongo::ServerSelector::SecondaryPreferred.new preference.select([candidate_1, candidate_2])
@return [ Array ] A list of servers matching tag sets and acceptable
latency with secondaries preferred.
@since 2.0.0
# File lib/mongo/server_selector/secondary_preferred.rb, line 112 def select(candidates) near_servers(secondaries(candidates)) + primary(candidates) end