diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2021-09-09 11:18:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-09 11:18:06 +0200 |
commit | 848a314d11d9af39d327bcc137b53d1b837fb0c5 (patch) | |
tree | 9b5be354528813cc36aed3b09ae7117bbb2e0f8d /slobrok | |
parent | f94a3f67e4c6b7b2ed1f614f958cbeaa2637e8e1 (diff) | |
parent | 4d802277d59b9f9a40e453573bd15cb7aeca3d52 (diff) |
Merge pull request #19025 from vespa-engine/arnej/prepare-for-switch
Arnej/prepare for switch
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.cpp | 13 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.h | 1 | ||||
-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 |
4 files changed, 28 insertions, 1 deletions
diff --git a/slobrok/src/vespa/slobrok/server/cmd.cpp b/slobrok/src/vespa/slobrok/server/cmd.cpp index b809f655a9d..df856189d89 100644 --- a/slobrok/src/vespa/slobrok/server/cmd.cpp +++ b/slobrok/src/vespa/slobrok/server/cmd.cpp @@ -62,6 +62,15 @@ ScriptCommand::makeIgnoreCmd(SBEnv &env, const std::string & name, const std::st return ScriptCommand(std::move(data)); } +ScriptCommand +ScriptCommand::makeRegCompleter(SBEnv &env, + const std::string &name, const std::string &spec, + FRT_RPCRequest *req) +{ + auto data = std::make_unique<ScriptData>(env, name, spec, req); + data->_state = ScriptData::XCH_DOADD; + return ScriptCommand(std::move(data)); +} void ScriptCommand::doRequest() @@ -124,7 +133,9 @@ ScriptCommand::doneHandler(OkState result) LOG(debug, "done doAdd(%s,%s)", name_p, spec_p); data._state = ScriptData::RDC_INVAL; // all OK - data.registerRequest->Return(); + if (data.registerRequest != nullptr) { + data.registerRequest->Return(); + } cleanupReservation(data); return; } else if (data._state == ScriptData::XCH_IGNORE) { diff --git a/slobrok/src/vespa/slobrok/server/cmd.h b/slobrok/src/vespa/slobrok/server/cmd.h index d790ae93f5c..e7f42f75e42 100644 --- a/slobrok/src/vespa/slobrok/server/cmd.h +++ b/slobrok/src/vespa/slobrok/server/cmd.h @@ -26,6 +26,7 @@ public: static ScriptCommand makeRegRpcSrvCmd(SBEnv &env, const std::string &name, const std::string &spec, FRT_RPCRequest *req); static ScriptCommand makeIgnoreCmd(SBEnv &env, const std::string &name, const std::string &spec); + static ScriptCommand makeRegCompleter(SBEnv &env, const std::string &name, const std::string &spec, FRT_RPCRequest *req); void doneHandler(OkState result); void doRequest(); 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, |