Resolver — Documentation by YARD 0.9.37 (original) (raw)

Class: Mongo::Srv::ResolverPrivate

Inherits:

Object

Includes:

Loggable

Defined in:

lib/mongo/srv/resolver.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Encapsulates the necessary behavior for querying SRV records as required by the driver.

Constant Summarycollapse

RECORD_PREFIX =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Returns RECORD_PREFIX The prefix prepended to each hostname before querying SRV records.

'_mongodb._tcp.'.freeze

Constants included from Loggable

Loggable::PREFIX

Instance Attribute Summary collapse

Instance Method Summarycollapse

Methods included from Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Constructor Details

#initialize(**opts) ⇒ Resolver

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.

Creates a new Resolver.

51 52 53 54 55 # File 'lib/mongo/srv/resolver.rb', line 51 def initialize(**opts) @options = opts.freeze @resolver = Resolv::DNS.new(@options[:resolv_options]) @resolver.timeouts = timeout end

Instance Attribute Details

#options ⇒ Hash

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

58 59 60 # File 'lib/mongo/srv/resolver.rb', line 58 def options @options end

Instance Method Details

#get_records(hostname, srv_service_name = nil, srv_max_hosts = nil) ⇒ Mongo::Srv::Result

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.

Obtains all of the SRV records for a given hostname. If a srv_max_hosts is specified and it is greater than 0, return maximum srv_max_hosts records.

In the event that a record with a mismatched domain is found or no records are found, if the :raise_on_invalid option is true, an exception will be raised, otherwise a warning will be logged.

| 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | # File 'lib/mongo/srv/resolver.rb', line 84 def get_records(hostname, srv_service_name=nil, srv_max_hosts=nil) query_name = record_prefix(srv_service_name) + hostname resources = @resolver.getresources(query_name, Resolv::DNS::Resource::IN::SRV) result = Srv::Result.new(hostname) resources.each do |record| begin result.add_record(record) rescue Error::MismatchedDomain => e if raise_on_invalid? raise else log_warn(e.message) end end end if result.empty? if raise_on_invalid? raise Error::NoSRVRecords.new(URI::SRVProtocol::NO_SRV_RECORDS % hostname) else log_warn(URI::SRVProtocol::NO_SRV_RECORDS % hostname) end end if (1...result.address_strs.length).include? srv_max_hosts sampled_records = resources.shuffle.first(srv_max_hosts) result = Srv::Result.new(hostname) sampled_records.each { | record| result.add_record(record) } end result end | | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |

#get_txt_options_string(hostname) ⇒ nil | String

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.

Obtains the TXT records of a host.

132 133 134 135 136 137 138 139 140 141 142 143 144 145 # File 'lib/mongo/srv/resolver.rb', line 132 def get_txt_options_string(hostname) records = @resolver.getresources(hostname, Resolv::DNS::Resource::IN::TXT) if records.empty? return nil end if records.length > 1 msg = "Only one TXT record is allowed: querying hostname #{hostname} returned #{records.length} records" raise Error::InvalidTXTRecord, msg end records[0].strings.join end

#record_prefix(srv_service_name = nil) ⇒ String

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.

Generates the record prefix with a custom SRV service name if it is provided.

38 39 40 # File 'lib/mongo/srv/resolver.rb', line 38 def record_prefix(srv_service_name=nil) return srv_service_name ? "_#{srv_service_name}._tcp." : RECORD_PREFIX end

#timeout ⇒ 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.

| 60 61 62 | # File 'lib/mongo/srv/resolver.rb', line 60 def timeout options[:timeout] || Monitor::DEFAULT_TIMEOUT end | | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |