summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-08-18 10:26:07 +0000
committerArne Juul <arnej@verizonmedia.com>2021-08-18 10:26:57 +0000
commit78e343fb3894f12255c725b009517b998510c607 (patch)
treeb8abe520d0d13b3c4a977ee69286ef3dc4d98131 /slobrok
parent6356a437375d9fba44be08f60f6bade18e520586 (diff)
update internal state before dispatching to clients
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/union_service_map.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/slobrok/src/vespa/slobrok/server/union_service_map.cpp b/slobrok/src/vespa/slobrok/server/union_service_map.cpp
index b9084f2b451..d98f8b6aa18 100644
--- a/slobrok/src/vespa/slobrok/server/union_service_map.cpp
+++ b/slobrok/src/vespa/slobrok/server/union_service_map.cpp
@@ -16,8 +16,8 @@ void UnionServiceMap::add(const ServiceMapping &mapping)
auto iter = _mappings.find(key);
if (iter == _mappings.end()) {
_mappings[key].emplace_back(mapping.spec, 1u);
- ProxyMapSource::add(mapping);
LOG(debug, "add new %s->%s", mapping.name.c_str(), mapping.spec.c_str());
+ ProxyMapSource::add(mapping);
} else {
Mappings &values = iter->second;
for (CountedSpec &old : values) {
@@ -27,11 +27,13 @@ void UnionServiceMap::add(const ServiceMapping &mapping)
return;
}
}
- if (values.size() == 1u) {
- LOG(warning, "Multiple specs seen for name '%s', un-publishing", key.c_str());
- ProxyMapSource::remove(ServiceMapping{key, values[0].spec});
- }
values.emplace_back(mapping.spec, 1u);
+ if (values.size() == 2u) {
+ ServiceMapping toRemove{key, values[0].spec};
+ LOG(warning, "Multiple specs seen for name '%s', un-publishing %s",
+ toRemove.name.c_str(), toRemove.spec.c_str());
+ ProxyMapSource::remove(toRemove);
+ }
}
}
@@ -61,16 +63,16 @@ void UnionServiceMap::remove(const ServiceMapping &mapping)
std::erase_if(values, [] (const CountedSpec &v) { return v.count == 0; });
if (values.size() == 1u) {
LOG_ASSERT(old_size == 2u);
+ ServiceMapping toAdd{key, values[0].spec};
LOG(info, "Had multiple mappings for %s, but now only %s remains",
- key.c_str(), values[0].spec.c_str());
- ProxyMapSource::add(ServiceMapping{key, values[0].spec});
- }
- if (values.size() == 0u) {
+ toAdd.name.c_str(), toAdd.spec.c_str());
+ ProxyMapSource::add(toAdd);
+ } else if (values.size() == 0u) {
LOG_ASSERT(old_size == 1u);
LOG(debug, "Last reference for %s -> %s removed",
key.c_str(), mapping.spec.c_str());
- ProxyMapSource::remove(mapping);
_mappings.erase(iter);
+ ProxyMapSource::remove(mapping);
}
}
@@ -83,4 +85,3 @@ void UnionServiceMap::update(const ServiceMapping &old_mapping,
}
} // namespace slobrok
-