diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-08-10 12:57:52 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-08-10 12:57:52 +0000 |
commit | 1ac3fc5e1497f5a4fc9229137520d37ed311625d (patch) | |
tree | f7185452bdb8e941d7025e22199d9f76aeeaf51b /slobrok | |
parent | fe77fbd579563144f0d954461bdd8d27f30251e9 (diff) |
avoid storing another ServiceMapping in PerService data
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.cpp | 25 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h | 8 |
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>; |