aboutsummaryrefslogtreecommitdiffstats
path: root/configd/src/apps/sentinel/env.cpp
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-06-02 12:05:14 +0000
committerArne Juul <arnej@verizonmedia.com>2021-06-02 12:05:14 +0000
commit2b1964dd62942c7d75920357454937e374331320 (patch)
tree6fdbb2bd6d31675faca6b88ed15495ba52dd4fcf /configd/src/apps/sentinel/env.cpp
parent6a0ead14e709bf3ef93e75612b8f47ecab5cba66 (diff)
cleanup
Diffstat (limited to 'configd/src/apps/sentinel/env.cpp')
-rw-r--r--configd/src/apps/sentinel/env.cpp39
1 files changed, 29 insertions, 10 deletions
diff --git a/configd/src/apps/sentinel/env.cpp b/configd/src/apps/sentinel/env.cpp
index cec3157ac61..43ee263fb8f 100644
--- a/configd/src/apps/sentinel/env.cpp
+++ b/configd/src/apps/sentinel/env.cpp
@@ -93,7 +93,21 @@ void Env::respondAsEmpty() {
}
}
-void Env::waitForConnectivity(const ModelConfig &model) {
+namespace {
+
+const char *toString(CcResult value) {
+ switch (value) {
+ case CcResult::UNKNOWN: return "unknown";
+ case CcResult::CONN_FAIL: return "failed to connect";
+ case CcResult::REVERSE_FAIL: return "connect OK, but reverse check FAILED";
+ case CcResult::REVERSE_UNAVAIL: return "connect OK, but reverse check unavailable";
+ case CcResult::ALL_OK: return "both ways connectivity OK";
+ }
+ LOG(error, "Unknown CcResult enum value: %d", (int)value);
+ LOG_ABORT("Unknown CcResult enum value");
+}
+
+std::map<std::string, std::string> specsFrom(const ModelConfig &model) {
std::map<std::string, std::string> checkSpecs;
for (const auto & h : model.hosts) {
bool foundSentinelPort = false;
@@ -113,20 +127,25 @@ void Env::waitForConnectivity(const ModelConfig &model) {
h.name.c_str(), h.services.size());
}
}
- vespalib::CountDownLatch latch(checkSpecs.size());
- const char *myName = vespa::Defaults::vespaHostname();
- int myPort = _rpcServer->getPort();
+ return checkSpecs;
+}
+
+}
+
+void Env::waitForConnectivity(const ModelConfig &model) {
+ auto checkSpecs = specsFrom(model);
+ OutwardCheckContext checkContext(checkSpecs.size(),
+ vespa::Defaults::vespaHostname(),
+ _rpcServer->getPort(),
+ _rpcServer->orb());
std::map<std::string, OutwardCheck> connectivityMap;
for (const auto & [ hn, spec ] : checkSpecs) {
- connectivityMap.try_emplace(hn, spec, myName, myPort, _rpcServer->orb(), latch);
+ connectivityMap.try_emplace(hn, spec, checkContext);
}
- latch.await();
+ checkContext.latch.await();
for (const auto & [hostname, check] : connectivityMap) {
- const char *s = "unknown";
- if (check.ok()) { s = "ok"; }
- if (check.bad()) { s = "bad"; }
LOG(info, "outward check status for host %s is: %s",
- hostname.c_str(), s);
+ hostname.c_str(), toString(check.result()));
}
}