diff options
author | ADAM David Alan Martin <adam.martin@10gen.com> | 2018-01-10 18:56:59 -0500 |
---|---|---|
committer | ADAM David Alan Martin <adam.martin@10gen.com> | 2018-01-10 18:56:59 -0500 |
commit | f6ab08373ea1dd473c2a20ca03d3cc29387adaaf (patch) | |
tree | 58df01e01998575be6c5024c15a32f893b54f4b8 | |
parent | 2e6b7c8ccceb94122b000cfc9bd4c06c7b5e2b7a (diff) | |
download | mongo-f6ab08373ea1dd473c2a20ca03d3cc29387adaaf.tar.gz |
SERVER-32486 Fix DNS diagnostics in Windows.
The Windows DNS Query implementation does not carry the service
name being requested into the resource record and iterator types.
This means that the diagnostics output when a failure occurs are
less informative. This change merely plumbs through the necessary
internal variables to track the service name.
-rw-r--r-- | src/mongo/util/dns_query_windows-impl.h | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/mongo/util/dns_query_windows-impl.h b/src/mongo/util/dns_query_windows-impl.h index 974cb558efe..f131bd76275 100644 --- a/src/mongo/util/dns_query_windows-impl.h +++ b/src/mongo/util/dns_query_windows-impl.h @@ -69,8 +69,8 @@ enum class DNSQueryType { kSRV = DNS_TYPE_SRV, kTXT = DNS_TYPE_TEXT, kAddress = */ class ResourceRecord { public: - explicit ResourceRecord(std::shared_ptr<DNS_RECORDA> initialRecord) - : _record(std::move(initialRecord)) {} + explicit ResourceRecord(std::string service, std::shared_ptr<DNS_RECORDA> initialRecord) + : _service(std::move(service)), _record(std::move(initialRecord)) {} explicit ResourceRecord() = default; /** @@ -146,7 +146,8 @@ void freeDnsRecord(PDNS_RECORDA record) { */ class DNSResponse { public: - explicit DNSResponse(PDNS_RECORDA initialResults) : _results(initialResults, freeDnsRecord) {} + explicit DNSResponse(std::string service, PDNS_RECORDA initialResults) + : _service(std::move(service)), _results(initialResults, freeDnsRecord) {} class iterator : public std::iterator<std::forward_iterator_tag, ResourceRecord> { public: @@ -190,8 +191,8 @@ public: private: friend DNSResponse; - explicit iterator(std::shared_ptr<DNS_RECORDA> initialRecord) - : _record(std::move(initialRecord)) {} + explicit iterator(std::string service, std::shared_ptr<DNS_RECORDA> initialRecord) + : _service(std::move(service)), _record(std::move(initialRecord)) {} void _advance() { this->_record = {this->_record, this->_record->pNext}; @@ -202,21 +203,22 @@ public: if (this->_ready) { return; } - this->_storage = ResourceRecord{this->_record}; + this->_storage = ResourceRecord{this->_service, this->_record}; this->_ready = true; } std::shared_ptr<DNS_RECORDA> _record; + std::string _service; ResourceRecord _storage; bool _ready = false; }; iterator begin() const { - return iterator{this->_results}; + return iterator{this->_service, this->_results}; } iterator end() const { - return iterator{nullptr}; + return iterator{this->_service, nullptr}; } std::size_t size() const { @@ -224,6 +226,7 @@ public: } private: + std::string _service; std::shared_ptr<std::remove_pointer<PDNS_RECORDA>::type> _results; }; @@ -247,7 +250,7 @@ public: uasserted(ErrorCodes::DNSHostNotFound, "Failed to look up service \""s + "\":"s + errnoWithDescription(ec)); } - return DNSResponse{queryResults}; + return DNSResponse{service, queryResults}; } }; } // namespace |