diff options
author | Arne H Juul <arnej@yahooinc.com> | 2021-09-17 07:58:50 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2021-09-20 10:28:52 +0000 |
commit | faee01dcda4475c941a7815ff2a0be32d9585ef9 (patch) | |
tree | 442b6bd820dd09141163f4d8f23fb5955d9b7b45 /slobrok | |
parent | 6cf9b1671fe888dba497496e2c8a75f2980ad32f (diff) |
removing more code
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/CMakeLists.txt | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.cpp | 77 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.h | 2 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/exchange_manager.cpp | 39 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/exchange_manager.h | 12 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/local_rpc_monitor_map.h | 4 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/remote_slobrok.h | 1 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp | 1 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.cpp | 25 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.h | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/sbenv.cpp | 4 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/sbenv.h | 8 |
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(); } }; |