Skip to content

Commit c88a624

Browse files
Jorge Lopez Silvameta-codesync[bot]
authored andcommitted
Track c-ares socket opens and closes
Summary: Add dedicated c-ares socket open and close counters alongside the existing `cares_open_sockets` gauge, and track socket state in `CAresResolver` so fwdproxy can distinguish steady-state socket occupancy from churn during DNS outages. Differential Revision: D106704403 fbshipit-source-id: 3ac9b71221fe87b3abcab465f15739b5a5facf9c
1 parent dda2caa commit c88a624

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

proxygen/lib/dns/CAresResolver.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,19 @@ void CAresResolver::sampleOpenSockets() {
697697
getStatsCollector()->recordCAresOpenSockets(socketHandlers_.size());
698698
}
699699

700+
void CAresResolver::recordSocketOpened() {
701+
if (!caresStateSamplingEnabled_) {
702+
return;
703+
}
704+
getStatsCollector()->recordCAresSocketOpen();
705+
}
706+
707+
void CAresResolver::recordSocketClosed() {
708+
if (!caresStateSamplingEnabled_) {
709+
return;
710+
}
711+
getStatsCollector()->recordCAresSocketClose();
712+
}
700713
void CAresResolver::init() {
701714
CHECK(base_ != nullptr);
702715

@@ -1057,6 +1070,7 @@ void CAresResolver::dnsSocketReady(void* data,
10571070
<< "dnsSocketReady() asked to close a socket that we don't kow about";
10581071
if (it != self->socketHandlers_.end()) {
10591072
self->socketHandlers_.erase(it);
1073+
self->recordSocketClosed();
10601074
self->sampleOpenSockets();
10611075
}
10621076

@@ -1066,10 +1080,12 @@ void CAresResolver::dnsSocketReady(void* data,
10661080
// Find the EventHandler that's managing our socket, creating one if it does
10671081
// not already exist
10681082
SocketHandler* shp = nullptr;
1083+
bool inserted = false;
10691084
if (it == self->socketHandlers_.end()) {
10701085
shp = new SocketHandler(
10711086
self, self->base_, folly::NetworkSocket(sock), self->channel_);
10721087
self->socketHandlers_[sock].reset(shp);
1088+
inserted = true;
10731089
} else {
10741090
shp = it->second.get();
10751091
}
@@ -1081,7 +1097,8 @@ void CAresResolver::dnsSocketReady(void* data,
10811097
if (!shp->registerHandler(events)) {
10821098
LOG(DFATAL) << "Failed to register SocketHandler";
10831099
}
1084-
if (it == self->socketHandlers_.end()) {
1100+
if (inserted) {
1101+
self->recordSocketOpened();
10851102
self->sampleOpenSockets();
10861103
}
10871104
}

proxygen/lib/dns/CAresResolver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ class CAresResolver : public DNSResolver {
248248
// state callback.
249249
void sampleActiveQueries();
250250
void sampleOpenSockets();
251+
void recordSocketOpened();
252+
void recordSocketClosed();
251253

252254
// Attempt to resolve literal IPs, invoking the callback and returning
253255
// true if we succeeded.

proxygen/lib/dns/DNSResolver.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,16 @@ class DNSResolver : public folly::DelayedDestruction {
361361
* Optional: record the current number of open c-ares sockets.
362362
*/
363363
virtual void recordCAresOpenSockets(size_t /*count*/) noexcept {}
364+
365+
/**
366+
* Optional: record that c-ares opened a socket.
367+
*/
368+
virtual void recordCAresSocketOpen() noexcept {}
369+
370+
/**
371+
* Optional: record that c-ares closed a socket.
372+
*/
373+
virtual void recordCAresSocketClose() noexcept {}
364374
};
365375

366376

0 commit comments

Comments
 (0)