Class: Mongo::Srv::Resolver Private
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
::Mongo::Loggable
|
|
Inherits: | Object |
Defined in: | lib/mongo/srv/resolver.rb |
Overview
Encapsulates the necessary behavior for querying SRV records as required by the driver.
Constant Summary
-
RECORD_PREFIX =
'_mongodb._tcp.'.freeze
::Mongo::Loggable
- Included
Class Method Summary
-
.new(**opts) ⇒ Resolver
constructor
Internal use only
Creates a new
Resolver
.
Instance Attribute Summary
- #options ⇒ Hash readonly Internal use only
-
#raise_on_invalid? ⇒ Boolean
readonly
private
Internal use only
Checks whether an error should be raised due to either a record with a mismatched domain being found or no records being found.
Instance Method Summary
-
#get_records(hostname, srv_service_name = nil, srv_max_hosts = nil) ⇒ Mongo::Srv::Result
Internal use only
Obtains all of the SRV records for a given hostname.
-
#get_txt_options_string(hostname) ⇒ nil | String
Internal use only
Obtains the TXT records of a host.
-
#record_prefix(srv_service_name = nil) ⇒ String
Internal use only
Generates the record prefix with a custom SRV service name if it is provided.
- #timeout Internal use only
::Mongo::Loggable
- Included
#log_debug | Convenience method to log debug messages with the standard prefix. |
#log_error | Convenience method to log error messages with the standard prefix. |
#log_fatal | Convenience method to log fatal messages with the standard prefix. |
#log_info | Convenience method to log info messages with the standard prefix. |
#log_warn | Convenience method to log warn messages with the standard prefix. |
#logger | Get the logger instance. |
#_mongo_log_prefix, #format_message |
Instance Attribute Details
#options ⇒ Hash
(readonly)
# File 'lib/mongo/srv/resolver.rb', line 58
attr_reader :
#raise_on_invalid? ⇒ Boolean
(readonly, private)
Checks whether an error should be raised due to either a record with a mismatched domain being found or no records being found.
# File 'lib/mongo/srv/resolver.rb', line 153
def raise_on_invalid? @raise_on_invalid ||= @options[:raise_on_invalid] || true end
Instance Method Details
#get_records(hostname, srv_service_name = nil, srv_max_hosts = nil) ⇒ Mongo::Srv::Result
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.
# 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) # Collect all of the records into a Result object, raising an error # or logging a warning if a record with a mismatched domain is found. # Note that in the case a warning is raised, the record is _not_ # added to the Result object. 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. ) end end end # If no records are found, either raise an error or log a warning # based on the Resolver's :raise_on_invalid option. 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 srv_max_hosts is in [1, #addresses) 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
Obtains the TXT records of a host.
# File 'lib/mongo/srv/resolver.rb', line 132
def (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
Generates the record prefix with a custom SRV service name if it is provided.
# 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
[ GitHub ]# File 'lib/mongo/srv/resolver.rb', line 60
def timeout [:timeout] || Monitor::DEFAULT_TIMEOUT end