aboutsummaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2021-09-09 11:18:06 +0200
committerGitHub <noreply@github.com>2021-09-09 11:18:06 +0200
commit848a314d11d9af39d327bcc137b53d1b837fb0c5 (patch)
tree9b5be354528813cc36aed3b09ae7117bbb2e0f8d /slobrok
parentf94a3f67e4c6b7b2ed1f614f958cbeaa2637e8e1 (diff)
parent4d802277d59b9f9a40e453573bd15cb7aeca3d52 (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.cpp13
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.h1
-rw-r--r--slobrok/src/vespa/slobrok/server/union_service_map.cpp13
-rw-r--r--slobrok/src/vespa/slobrok/server/union_service_map.h2
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,