aboutsummaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-09-17 07:58:50 +0000
committerArne H Juul <arnej@yahooinc.com>2021-09-20 10:28:52 +0000
commitfaee01dcda4475c941a7815ff2a0be32d9585ef9 (patch)
tree442b6bd820dd09141163f4d8f23fb5955d9b7b45 /slobrok
parent6cf9b1671fe888dba497496e2c8a75f2980ad32f (diff)
removing more code
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/CMakeLists.txt3
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.cpp77
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.h2
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.cpp39
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.h12
-rw-r--r--slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h4
-rw-r--r--slobrok/src/vespa/slobrok/server/remote_slobrok.h1
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp1
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.cpp25
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.h3
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.cpp4
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.h8
12 files changed, 35 insertions, 144 deletions
diff --git a/slobrok/src/vespa/slobrok/server/CMakeLists.txt b/slobrok/src/vespa/slobrok/server/CMakeLists.txt
index ae1a05c5181..5168758e46d 100644
--- a/slobrok/src/vespa/slobrok/server/CMakeLists.txt
+++ b/slobrok/src/vespa/slobrok/server/CMakeLists.txt
@@ -1,7 +1,6 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
vespa_add_library(slobrok_slobrokserver
SOURCES
- cmd.cpp
configshim.cpp
exchange_manager.cpp
i_monitored_server.cpp
@@ -23,8 +22,6 @@ vespa_add_library(slobrok_slobrokserver
request_completion_handler.cpp
reserved_name.cpp
rpc_mapping_monitor.cpp
- rpc_server_manager.cpp
- rpc_server_map.cpp
rpchooks.cpp
rpcmirror.cpp
sbenv.cpp
diff --git a/slobrok/src/vespa/slobrok/server/cmd.cpp b/slobrok/src/vespa/slobrok/server/cmd.cpp
index df856189d89..9b03942d763 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.cpp
+++ b/slobrok/src/vespa/slobrok/server/cmd.cpp
@@ -2,7 +2,6 @@
#include "cmd.h"
-#include "rpc_server_map.h"
#include "reserved_name.h"
#include "remote_slobrok.h"
#include "sbenv.h"
@@ -47,14 +46,6 @@ ScriptCommand::operator= (ScriptCommand &&) = default;
ScriptCommand::~ScriptCommand() = default;
ScriptCommand
-ScriptCommand::makeRegRpcSrvCmd(SBEnv &env,
- const std::string &name, const std::string &spec,
- FRT_RPCRequest *req)
-{
- return ScriptCommand(std::make_unique<ScriptData>(env, name, spec, req));
-}
-
-ScriptCommand
ScriptCommand::makeIgnoreCmd(SBEnv &env, const std::string & name, const std::string &spec)
{
auto data = std::make_unique<ScriptData>(env, name, spec, nullptr);
@@ -62,32 +53,6 @@ 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()
-{
- LOG_ASSERT(_data->_state == ScriptData::RDC_INIT);
- doneHandler(OkState());
-}
-
-void cleanupReservation(ScriptData & data)
-{
- RpcServerMap &map = data.env.rpcServerMap();
- const ReservedName *rsvp = map.getReservation(data.name.c_str());
- if (rsvp != nullptr && rsvp->isLocal) {
- map.removeReservation(data.name.c_str());
- }
-}
-
void
ScriptCommand::doneHandler(OkState result)
{
@@ -97,52 +62,10 @@ ScriptCommand::doneHandler(OkState result)
ScriptData & data = *dataUP;
const char *name_p = data.name.c_str();
const char *spec_p = data.spec.c_str();
- ExchangeManager &xch = data.env.exchangeManager();
- RpcServerManager &rsm = data.env.rpcServerManager();
if (result.failed()) {
LOG(warning, "failed [%s->%s] in state %d: %s", name_p, spec_p, data._state, result.errorMsg.c_str());
- if (data._state != ScriptData::XCH_IGNORE) {
- cleanupReservation(data);
- }
- // XXX should handle different state errors differently?
- if (data.registerRequest != nullptr) {
- data.registerRequest->SetError(FRTE_RPC_METHOD_FAILED, result.errorMsg.c_str());
- data.registerRequest->Return();
- } else {
- LOG(warning, "ignored: %s", result.errorMsg.c_str());
- }
- return;
- }
- if (data._state == ScriptData::RDC_INIT) {
- LOG(spam, "phase wantAdd(%s,%s)", name_p, spec_p);
- data._state = ScriptData::XCH_WANTADD;
- xch.wantAdd(std::move(dataUP));
- return;
- } else if (data._state == ScriptData::XCH_WANTADD) {
- LOG(spam, "phase addManaged(%s,%s)", name_p, spec_p);
- data._state = ScriptData::CHK_RPCSRV;
- rsm.addManaged(std::move(dataUP));
- return;
- } else if (data._state == ScriptData::CHK_RPCSRV) {
- LOG(spam, "phase doAdd(%s,%s)", name_p, spec_p);
- data._state = ScriptData::XCH_DOADD;
- xch.doAdd(std::move(dataUP));
- return;
- } else if (data._state == ScriptData::XCH_DOADD) {
- LOG(debug, "done doAdd(%s,%s)", name_p, spec_p);
- data._state = ScriptData::RDC_INVAL;
- // all OK
- if (data.registerRequest != nullptr) {
- data.registerRequest->Return();
- }
- cleanupReservation(data);
- return;
- } else if (data._state == ScriptData::XCH_IGNORE) {
- return;
}
- // no other state should be possible
- LOG_ABORT("should not be reached");
}
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/cmd.h b/slobrok/src/vespa/slobrok/server/cmd.h
index e7f42f75e42..0053f4aa464 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.h
+++ b/slobrok/src/vespa/slobrok/server/cmd.h
@@ -24,9 +24,7 @@ public:
ScriptCommand& operator= (ScriptCommand &&);
~ScriptCommand();
- 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/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
index 4bf52b295c0..29a607e70fa 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
@@ -67,19 +67,7 @@ ExchangeManager::getPartnerList()
void
ExchangeManager::forwardRemove(const std::string & name, const std::string & spec)
{
- WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE, *this,
- ScriptCommand::makeIgnoreCmd(_env, name, spec));
- for (const auto & entry : _partners) {
- package->addItem(entry.second.get());
- }
- package->expedite();
-}
-
-void
-ExchangeManager::doAdd(ScriptCommand rdc)
-{
- WorkPackage *package = new WorkPackage(WorkPackage::OP_DOADD, *this, std::move(rdc));
-
+ WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE, ServiceMapping{name, spec}, *this);
for (const auto & entry : _partners) {
package->addItem(entry.second.get());
}
@@ -87,16 +75,6 @@ ExchangeManager::doAdd(ScriptCommand rdc)
}
-void
-ExchangeManager::wantAdd(ScriptCommand rdc)
-{
- WorkPackage *package = new WorkPackage(WorkPackage::OP_WANTADD, *this, std::move(rdc));
- for (const auto & entry : _partners) {
- package->addItem(entry.second.get());
- }
- package->expedite();
-}
-
RemoteSlobrok *
ExchangeManager::lookupPartner(const std::string & name) const {
auto found = _partners.find(name);
@@ -189,14 +167,12 @@ ExchangeManager::WorkPackage::WorkItem::~WorkItem()
}
-ExchangeManager::WorkPackage::WorkPackage(op_type op,
- ExchangeManager &exchanger,
- ScriptCommand script)
+ExchangeManager::WorkPackage::WorkPackage(op_type op, const ServiceMapping &mapping, ExchangeManager &exchanger)
: _work(),
_doneCnt(0),
_numDenied(0),
- _script(std::move(script)),
_exchanger(exchanger),
+ _mapping(mapping),
_optype(op)
{
}
@@ -214,9 +190,7 @@ ExchangeManager::WorkPackage::doneItem(bool denied)
(int)_doneCnt, (int)_work.size(), (int)_numDenied);
if (_doneCnt == _work.size()) {
if (_numDenied > 0) {
- _script.doneHandler(OkState(_numDenied, "denied by remote"));
- } else {
- _script.doneHandler(OkState());
+ LOG(debug, "work package: %zd/%zd denied by remote", _numDenied, _doneCnt);
}
delete this;
}
@@ -229,8 +203,8 @@ ExchangeManager::WorkPackage::addItem(RemoteSlobrok *partner)
if (! partner->isConnected()) {
return;
}
- const char *name_p = _script.name().c_str();
- const char *spec_p = _script.spec().c_str();
+ const char *name_p = _mapping.name.c_str();
+ const char *spec_p = _mapping.spec.c_str();
FRT_RPCRequest *r = _exchanger._env.getSupervisor()->AllocRPCRequest();
// XXX should recheck rpcsrvmap again
@@ -258,7 +232,6 @@ ExchangeManager::WorkPackage::expedite()
size_t sz = _work.size();
if (sz == 0) {
// no remotes need doing.
- _script.doneHandler(OkState());
delete this;
return;
}
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.h b/slobrok/src/vespa/slobrok/server/exchange_manager.h
index 9b6fae00592..e1344bff722 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.h
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.h
@@ -2,7 +2,6 @@
#pragma once
#include "ok_state.h"
-#include "cmd.h"
#include "remote_slobrok.h"
#include <deque>
@@ -59,19 +58,17 @@ private:
std::vector<std::unique_ptr<WorkItem>> _work;
size_t _doneCnt;
size_t _numDenied;
- ScriptCommand _script;
public:
ExchangeManager &_exchanger;
enum op_type { OP_NOP, OP_WANTADD, OP_DOADD, OP_REMOVE };
- op_type _optype;
+ const ServiceMapping _mapping;
+ const op_type _optype;
void addItem(RemoteSlobrok *partner);
void doneItem(bool denied);
void expedite();
WorkPackage(const WorkPackage&) = delete;
WorkPackage& operator= (const WorkPackage&) = delete;
- WorkPackage(op_type op,
- ExchangeManager &exchanger,
- ScriptCommand donehandler);
+ WorkPackage(op_type op, const ServiceMapping &mapping, ExchangeManager &exchanger);
~WorkPackage();
};
@@ -93,9 +90,6 @@ public:
void forwardRemove(const std::string & name, const std::string & spec);
- void wantAdd(ScriptCommand rdc);
- void doAdd(ScriptCommand rdc);
-
RemoteSlobrok *lookupPartner(const std::string & name) const;
void healthCheck();
};
diff --git a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
index 96c0ee03245..173a0455e43 100644
--- a/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
+++ b/slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h
@@ -1,8 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include "cmd.h"
-#include "managed_rpc_server.h"
#include "map_listener.h"
#include "map_source.h"
#include "mapping_monitor.h"
@@ -12,6 +10,8 @@
#include "service_map_history.h"
#include "service_mapping.h"
+#include <vespa/fnet/task.h>
+
#include <vector>
#include <memory>
#include <map>
diff --git a/slobrok/src/vespa/slobrok/server/remote_slobrok.h b/slobrok/src/vespa/slobrok/server/remote_slobrok.h
index 316cd608468..ef7f39c08ed 100644
--- a/slobrok/src/vespa/slobrok/server/remote_slobrok.h
+++ b/slobrok/src/vespa/slobrok/server/remote_slobrok.h
@@ -2,7 +2,6 @@
#pragma once
#include "ok_state.h"
-#include "cmd.h"
#include "i_rpc_server_manager.h"
#include "managed_rpc_server.h"
#include "service_map_mirror.h"
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
index a9a748323f7..2ab375e0579 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
@@ -17,7 +17,6 @@ namespace slobrok {
RpcServerManager::RpcServerManager(SBEnv &sbenv)
: FNET_Task(sbenv.getScheduler()),
- _rpcsrvmap(sbenv.rpcServerMap()),
_exchanger(sbenv.exchangeManager()),
_env(sbenv),
_addManageds(),
diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.cpp b/slobrok/src/vespa/slobrok/server/rpchooks.cpp
index a7c9799a28e..f07b8161d62 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp
@@ -234,6 +234,26 @@ bool RPCHooks::useNewLogic() const {
return _env.useNewLogic();
}
+bool RPCHooks::match(const char *name, const char *pattern) {
+ LOG_ASSERT(name != nullptr);
+ LOG_ASSERT(pattern != nullptr);
+ while (*pattern != '\0') {
+ if (*name == *pattern) {
+ ++name;
+ ++pattern;
+ } else if (*pattern == '*') {
+ ++pattern;
+ while (*name != '/' && *name != '\0') {
+ ++name;
+ }
+ } else {
+ return false;
+ }
+ }
+ return (*name == *pattern);
+}
+
+
void RPCHooks::rpc_listNamesServed(FRT_RPCRequest *req) {
FRT_Values &dst = *req->GetReturn();
FRT_StringValue *names = dst.AddStringArray(1);
@@ -257,11 +277,6 @@ void RPCHooks::rpc_registerRpcServer(FRT_RPCRequest *req) {
}
req->Detach();
_env.localMonitorMap().addLocal(mapping, std::make_unique<RequestCompletionHandler>(req));
- if (! useNewLogic()) {
- // TODO: remove this
- auto script = ScriptCommand::makeRegRpcSrvCmd(_env, dName, dSpec, nullptr);
- script.doRequest();
- }
return;
}
diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.h b/slobrok/src/vespa/slobrok/server/rpchooks.h
index 42c423f7e68..b003376e75e 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.h
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.h
@@ -50,8 +50,6 @@ public:
RPCHooks(SBEnv &env);
~RPCHooks() override;
- static bool match(const char *name, const char *pattern);
-
void initRPC(FRT_Supervisor *supervisor);
void reportMetrics();
const Metrics& getMetrics() const { return _cnts; }
@@ -59,6 +57,7 @@ public:
private:
bool useNewLogic() const;
+ static bool match(const char *name, const char *pattern);
void rpc_lookupRpcServer(FRT_RPCRequest *req);
diff --git a/slobrok/src/vespa/slobrok/server/sbenv.cpp b/slobrok/src/vespa/slobrok/server/sbenv.cpp
index dfab80799e0..b9d92a3e312 100644
--- a/slobrok/src/vespa/slobrok/server/sbenv.cpp
+++ b/slobrok/src/vespa/slobrok/server/sbenv.cpp
@@ -117,7 +117,6 @@ SBEnv::SBEnv(const ConfigShim &shim, bool useNewConsensusLogic)
[this] (MappingMonitorOwner &owner) {
return std::make_unique<RpcMappingMonitor>(*_supervisor, owner);
}),
- _rpcsrvmanager(*this),
_exchanger(*this)
{
srandom(time(nullptr) ^ getpid());
@@ -200,7 +199,6 @@ SBEnv::MainLoop()
return 0;
}
-
void
SBEnv::setup(const std::vector<std::string> &cfg)
{
@@ -271,7 +269,7 @@ SBEnv::removePeer(const std::string &name, const std::string &spec)
if (partner == nullptr) {
return OkState(0, "remote slobrok not a partner");
}
- _exchanger.removePartner(name);
+ _exchanger.removePartner(spec);
return OkState(0, "done");
}
diff --git a/slobrok/src/vespa/slobrok/server/sbenv.h b/slobrok/src/vespa/slobrok/server/sbenv.h
index c6fd8905131..39cae2acb2d 100644
--- a/slobrok/src/vespa/slobrok/server/sbenv.h
+++ b/slobrok/src/vespa/slobrok/server/sbenv.h
@@ -62,9 +62,7 @@ private:
UnionServiceMap _consensusMap;
ServiceMapHistory _globalVisibleHistory;
- RpcServerManager _rpcsrvmanager;
ExchangeManager _exchanger;
- RpcServerMap _rpcsrvmap;
std::unique_ptr<MapSubscription> _localMonitorSubscription;
std::unique_ptr<MapSubscription> _consensusSubscription;
@@ -83,9 +81,7 @@ public:
void suspend();
void resume();
- RpcServerManager& rpcServerManager() { return _rpcsrvmanager; }
ExchangeManager& exchangeManager() { return _exchanger; }
- RpcServerMap& rpcServerMap() { return _rpcsrvmap; }
ServiceMapHistory& globalHistory() {
return _globalVisibleHistory;
@@ -111,8 +107,8 @@ public:
int MainLoop();
- OkState addPeer(const std::string& name, const std::string &spec);
- OkState removePeer(const std::string& name, const std::string &spec);
+ OkState addPeer(const std::string& name, const std::string& spec);
+ OkState removePeer(const std::string& name, const std::string& spec);
void countFailedHeartbeat() { _rpcHooks.countFailedHeartbeat(); }
};