summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-08-10 12:57:52 +0000
committerArne Juul <arnej@verizonmedia.com>2021-08-10 12:57:52 +0000
commit1ac3fc5e1497f5a4fc9229137520d37ed311625d (patch)
treef7185452bdb8e941d7025e22199d9f76aeeaf51b /slobrok
parentfe77fbd579563144f0d954461bdd8d27f30251e9 (diff)
avoid storing another ServiceMapping in PerService data
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp25
-rw-r--r--slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h8
2 files changed, 18 insertions, 15 deletions
diff --git a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp
index ce5cfb9cd82..50a11c7b521 100644
--- a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp
+++ b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp
@@ -21,7 +21,7 @@ LocalRpcMonitorMap::lookup(const ServiceMapping &mapping) {
auto iter = _map.find(mapping.name);
if (iter != _map.end()) {
PerService & psd = iter->second;
- LOG_ASSERT(psd.mapping.spec == mapping.spec);
+ LOG_ASSERT(psd.spec() == mapping.spec);
return &psd;
}
return nullptr;
@@ -37,25 +37,26 @@ void LocalRpcMonitorMap::add(const ServiceMapping &mapping) {
auto old = _map.find(mapping.name);
if (old != _map.end()) {
PerService & exists = old->second;
- if (exists.mapping.spec == mapping.spec) {
+ if (exists.spec() == mapping.spec) {
LOG(debug, "added mapping %s->%s was already present",
mapping.name.c_str(), mapping.spec.c_str());
return;
}
LOG(warning, "added mapping %s->%s, but already had conflicting mapping %s->%s",
mapping.name.c_str(), mapping.spec.c_str(),
- exists.mapping.name.c_str(), exists.mapping.spec.c_str());
+ exists.name().c_str(), exists.spec().c_str());
if (exists.up) {
- _history.remove(exists.mapping);
+ _history.remove(exists.mapping());
}
_map.erase(old);
}
- auto [ iter, was_inserted ] = _map.try_emplace(mapping.name, mapping);
+ auto [ iter, was_inserted ] =
+ _map.try_emplace(mapping.name,
+ false,
+ std::make_unique<ManagedRpcServer>(mapping.name,
+ mapping.spec,
+ *this));
LOG_ASSERT(was_inserted);
- PerService & fill = iter->second;
- fill.srv = std::make_unique<ManagedRpcServer>(mapping.name,
- mapping.spec,
- *this);
}
void LocalRpcMonitorMap::remove(const ServiceMapping &mapping) {
@@ -63,14 +64,14 @@ void LocalRpcMonitorMap::remove(const ServiceMapping &mapping) {
if (iter != _map.end()) {
LOG(debug, "remove: mapping %s->%s", mapping.name.c_str(), mapping.spec.c_str());
PerService & exists = iter->second;
- if (mapping.spec != exists.mapping.spec) {
+ if (mapping.spec != exists.spec()) {
LOG(warning, "inconsistent specs for name '%s': had '%s', but was asked to remove '%s'",
mapping.name.c_str(),
- exists.mapping.spec.c_str(),
+ exists.spec().c_str(),
mapping.spec.c_str());
}
if (exists.up) {
- _history.remove(exists.mapping);
+ _history.remove(exists.mapping());
}
_map.erase(iter);
} else {
diff --git a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
index 9810a787378..3f732d6875b 100644
--- a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
+++ b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
@@ -27,9 +27,11 @@ class LocalRpcMonitorMap : public IRpcServerManager,
{
private:
struct PerService {
- const ServiceMapping mapping;
- bool up = false;
- std::unique_ptr<ManagedRpcServer> srv = {};
+ bool up;
+ std::unique_ptr<ManagedRpcServer> srv;
+ vespalib::string name() { return srv->getName(); }
+ vespalib::string spec() { return srv->getSpec(); }
+ ServiceMapping mapping() { return ServiceMapping{srv->getName(), srv->getSpec()}; }
};
using Map = std::map<vespalib::string, PerService>;