class Mongo::ServerSelector::Nearest

Encapsulates specifications for selecting near servers given a list

of candidates.

@since 2.0.0

Public Instance Methods

name() click to toggle source

Get the name of the server mode type.

@example Get the name of the server mode for this preference.

preference.name

@return [ Symbol ] :nearest

@since 2.0.0

# File lib/mongo/server_selector/nearest.rb, line 33
def name
  :nearest
end
slave_ok?() click to toggle source

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/nearest.rb, line 43
def slave_ok?
  true
end
tags_allowed?() click to toggle source

Whether tag sets are allowed to be defined for this server preference.

@return [ true ] true

@since 2.0.0

# File lib/mongo/server_selector/nearest.rb, line 52
def tags_allowed?
  true
end
to_mongos() click to toggle source

Convert this server preference definition into a format appropriate

for a mongos server.

@example Convert this server preference definition into a format

for mongos.
preference = Mongo::ServerSelector::Nearest.new
preference.to_mongos

@return [ Hash ] The server preference formatted for a mongos server.

@since 2.0.0

# File lib/mongo/server_selector/nearest.rb, line 67
def to_mongos
  preference = { :mode => 'nearest' }
  preference.merge!({ :tags => tag_sets }) unless tag_sets.empty?
  preference
end

Private Instance Methods

select(candidates) click to toggle source

Select the near servers taking into account any defined tag sets and

local threshold between the nearest server and other servers.

@example Select nearest servers given a list of candidates.

preference = Mongo::Serverreference::Nearest.new
preference.select_server(cluster)

@return [ Array ] The nearest servers from the list of candidates.

@since 2.0.0

# File lib/mongo/server_selector/nearest.rb, line 85
def select(candidates)
  if tag_sets.empty?
    near_servers(candidates)
  else
    near_servers(match_tag_sets(candidates))
  end
end