diff options
author | Arne H Juul <arnej@yahooinc.com> | 2021-09-17 08:23:04 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2021-09-17 08:23:04 +0000 |
commit | 13a82b4c1f733b4f2584f7de9530e8bf1a5e867d (patch) | |
tree | 3c0b5d18802444da5d7bdb53b4947e9e29ec47d6 /slobrok | |
parent | 195abc5ab3520aa2ac2dc54c8cf12af151cc18cf (diff) |
more peer management logic directly in SBEnv
Diffstat (limited to 'slobrok')
7 files changed, 22 insertions, 41 deletions
diff --git a/slobrok/src/tests/startsome/startsome.sh b/slobrok/src/tests/startsome/startsome.sh index 0375023bc24..a3b3158c368 100755 --- a/slobrok/src/tests/startsome/startsome.sh +++ b/slobrok/src/tests/startsome/startsome.sh @@ -33,7 +33,7 @@ sleep 1 [ "${VALGRIND}" ] && sleep 9 ./slobrok_rpc_info_app \ - tcp/localhost:18481 verbose > rpc-method-list + tcp/localhost:18481 verbose > rpc-method-list echo port 18481: ${SBCMD} 18481 slobrok.callback.listNamesServed diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp index ccfb8d3bd63..94e951ca252 100644 --- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp +++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp @@ -25,9 +25,9 @@ ExchangeManager::ExchangeManager(SBEnv &env, RpcServerMap &rpcsrvmap) ExchangeManager::~ExchangeManager() = default; OkState -ExchangeManager::addPartner(const std::string & name, const std::string & spec) +ExchangeManager::addPartner(const std::string & spec) { - if (RemoteSlobrok *oldremote = lookupPartner(name)) { + if (RemoteSlobrok *oldremote = lookupPartner(spec)) { // already a partner, should be OK if (spec != oldremote->getSpec()) { return OkState(FRTE_RPC_METHOD_FAILED, "name already partner with different spec"); @@ -38,7 +38,7 @@ ExchangeManager::addPartner(const std::string & name, const std::string & spec) } return OkState(); } - auto [ it, wasNew ] = _partners.emplace(name, std::make_unique<RemoteSlobrok>(name, spec, *this)); + auto [ it, wasNew ] = _partners.emplace(spec, std::make_unique<RemoteSlobrok>(spec, spec, *this)); LOG_ASSERT(wasNew); RemoteSlobrok & partner = *it->second; partner.tryConnect(); diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.h b/slobrok/src/vespa/slobrok/server/exchange_manager.h index fe52155e57f..18a20274a75 100644 --- a/slobrok/src/vespa/slobrok/server/exchange_manager.h +++ b/slobrok/src/vespa/slobrok/server/exchange_manager.h @@ -93,8 +93,8 @@ public: RpcServerManager &rpcServerManager() { return _rpcsrvmanager; } RpcServerMap &rpcServerMap() { return _rpcsrvmap; } - OkState addPartner(const std::string & name, const std::string & spec); - void removePartner(const std::string & name); + OkState addPartner(const std::string & spec); + void removePartner(const std::string & spec); std::vector<std::string> getPartnerList(); void forwardRemove(const std::string & name, const std::string & spec); diff --git a/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp b/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp index 85fe9df00d3..d867d955dac 100644 --- a/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp +++ b/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp @@ -335,7 +335,7 @@ RemoteSlobrok::maybePushMine() pushMine(); } else { LOG(debug, "not pushing mine, as we have: remote %p r.a.p.r=%p r.l.r=%p r.a.r=%p r.r.r=%p", - _remote, _remAddPeerReq, _remListReq, _remAddReq, _remRemReq); + _remote, _remAddPeerReq, _remListReq, _remAddReq, _remRemReq); } } diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp index 0f0679e35ea..a9a748323f7 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp +++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp @@ -91,34 +91,6 @@ RpcServerManager::addRemReservation(const std::string & remslobrok, const std::s OkState -RpcServerManager::addPeer(const std::string & remsbname, const std::string &remsbspec) -{ - if (remsbname == _env.mySpec()) { - return OkState(13, "cannot add remote slobrok with my rpcserver name"); - } - return _exchanger.addPartner(remsbname, remsbspec); -} - - -OkState -RpcServerManager::removePeer(const std::string & remsbname, const std::string & remsbspec) -{ - if (remsbname == _env.mySpec()) { - return OkState(13, "cannot remove my own rpcserver name"); - } - const RemoteSlobrok *partner = _exchanger.lookupPartner(remsbname); - if (partner == nullptr) { - return OkState(0, "remote slobrok not a partner"); - } - if (partner->getSpec() != remsbspec) { - return OkState(13, "peer registered with different spec"); - } - _exchanger.removePartner(remsbname); - return OkState(0, "done"); -} - - -OkState RpcServerManager::addMyReservation(const std::string & name, const std::string & spec) { OkState valid = validateName(name); diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h index 9c72fe91f18..15b674388e3 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h +++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h @@ -47,8 +47,6 @@ private: public: OkState checkPartner(const std::string & remslobrok); - OkState addPeer(const std::string & remsbname, const std::string & remsbspec); - OkState removePeer(const std::string & remsbname, const std::string & remsbspec); OkState addRemote(const std::string & name, const std::string & spec); OkState addRemReservation(const std::string & remslobrok, const std::string & name, const std::string & spec); diff --git a/slobrok/src/vespa/slobrok/server/sbenv.cpp b/slobrok/src/vespa/slobrok/server/sbenv.cpp index 4bd55ee67f4..2528c830706 100644 --- a/slobrok/src/vespa/slobrok/server/sbenv.cpp +++ b/slobrok/src/vespa/slobrok/server/sbenv.cpp @@ -223,7 +223,7 @@ SBEnv::setup(const std::vector<std::string> &cfg) std::string slobrok = cfg[i]; discard(oldList, slobrok); if (slobrok != mySpec()) { - OkState res = _rpcsrvmanager.addPeer(slobrok, slobrok.c_str()); + OkState res = _exchanger.addPartner(slobrok); if (!res.ok()) { LOG(warning, "could not add peer %s: %s", slobrok.c_str(), res.errorMsg.c_str()); } else { @@ -232,7 +232,7 @@ SBEnv::setup(const std::vector<std::string> &cfg) } } for (uint32_t i = 0; i < oldList.size(); ++i) { - OkState res = _rpcsrvmanager.removePeer(oldList[i], oldList[i].c_str()); + OkState res = removePeer(oldList[i], oldList[i]); if (!res.ok()) { LOG(warning, "could not remove peer %s: %s", oldList[i].c_str(), res.errorMsg.c_str()); } else { @@ -247,6 +247,9 @@ SBEnv::setup(const std::vector<std::string> &cfg) OkState SBEnv::addPeer(const std::string &name, const std::string &spec) { + if (name != spec) { + return OkState(FRTE_RPC_METHOD_FAILED, "peer location brokers must have name equal to spec"); + } if (spec == mySpec()) { return OkState(FRTE_RPC_METHOD_FAILED, "cannot add my own spec as peer"); } @@ -261,12 +264,15 @@ SBEnv::addPeer(const std::string &name, const std::string &spec) spec.c_str(), peers.c_str()); _partnerList.push_back(spec); } - return _rpcsrvmanager.addPeer(name, spec.c_str()); + return _exchanger.addPartner(spec); } OkState SBEnv::removePeer(const std::string &name, const std::string &spec) { + if (name != spec) { + return OkState(FRTE_RPC_METHOD_FAILED, "peer location brokers must have name equal to spec"); + } if (spec == mySpec()) { return OkState(FRTE_RPC_METHOD_FAILED, "cannot remove my own spec as peer"); } @@ -275,7 +281,12 @@ SBEnv::removePeer(const std::string &name, const std::string &spec) return OkState(FRTE_RPC_METHOD_FAILED, "configured partner list contains peer, cannot remove"); } } - return _rpcsrvmanager.removePeer(name, spec.c_str()); + const RemoteSlobrok *partner = _exchanger.lookupPartner(name); + if (partner == nullptr) { + return OkState(0, "remote slobrok not a partner"); + } + _exchanger.removePartner(name); + return OkState(0, "done"); } } // namespace slobrok |