diff options
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/union_service_map.cpp | 13 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/union_service_map.h | 2 |
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, |