aboutsummaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-09-08 16:59:42 +0000
committerArne H Juul <arnej@yahooinc.com>2021-09-08 16:59:42 +0000
commit4d802277d59b9f9a40e453573bd15cb7aeca3d52 (patch)
treeaf189b8b9967ebcc5f0313cf5ce96e2bd195186b /slobrok
parentd11e12601d49ef8bb3dc0f5882f9dabde3d1ec27 (diff)
add wouldConflict() method to UnionServiceMap
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/union_service_map.cpp13
-rw-r--r--slobrok/src/vespa/slobrok/server/union_service_map.h2
2 files changed, 15 insertions, 0 deletions
diff --git a/slobrok/src/vespa/slobrok/server/union_service_map.cpp b/slobrok/src/vespa/slobrok/server/union_service_map.cpp
index baf94a6fa69..9abfc237d56 100644
--- a/slobrok/src/vespa/slobrok/server/union_service_map.cpp
+++ b/slobrok/src/vespa/slobrok/server/union_service_map.cpp
@@ -20,6 +20,19 @@ ServiceMappingList UnionServiceMap::currentConsensus() const {
return result;
}
+bool UnionServiceMap::wouldConflict(const ServiceMapping &mapping) const {
+ const vespalib::string &key = mapping.name;
+ auto iter = _mappings.find(key);
+ if (iter == _mappings.end()) {
+ return false;
+ }
+ const Mappings &values = iter->second;
+ if (values.size() != 1) {
+ return true;
+ }
+ return (values[0].spec != mapping.spec);
+}
+
void UnionServiceMap::add(const ServiceMapping &mapping)
{
const vespalib::string &key = mapping.name;
diff --git a/slobrok/src/vespa/slobrok/server/union_service_map.h b/slobrok/src/vespa/slobrok/server/union_service_map.h
index d5bcbfaed94..67d3221849d 100644
--- a/slobrok/src/vespa/slobrok/server/union_service_map.h
+++ b/slobrok/src/vespa/slobrok/server/union_service_map.h
@@ -36,6 +36,8 @@ public:
ServiceMappingList currentConsensus() const;
+ bool wouldConflict(const ServiceMapping &mapping) const;
+
void add(const ServiceMapping &mapping) override;
void remove(const ServiceMapping &mapping) override;
void update(const ServiceMapping &old_mapping,