diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-06-30 09:21:05 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-07-15 08:42:08 +0000 |
commit | 331d8dfdb676d1392bd272d0989149b2a582298e (patch) | |
tree | abf52f8680b07bef11402c150410c1897864fe3d /slobrok/src | |
parent | 2d0ea68835a9306a262ac0466c72fd4a2597a33c (diff) |
rewire global history
* add a MapSource proxy to the RpcServerMap
* move rpcsrvmap "visible map" to sbenv "global history"
* use registerListener for wiring
Diffstat (limited to 'slobrok/src')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_map.cpp | 12 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_map.h | 6 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.cpp | 6 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.h | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/sbenv.cpp | 1 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/sbenv.h | 9 |
6 files changed, 24 insertions, 13 deletions
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp index 89675a543a7..4e1759f3a0d 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp +++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp @@ -29,7 +29,7 @@ RpcServerMap::remove(const std::string & name) { auto service = std::move(_myrpcsrv_map[name]); auto spec = service->getSpec(); - _visible_map.remove(ServiceMapping{name, spec}); + _proxy.remove(ServiceMapping{name, spec}); _myrpcsrv_map.erase(name); return service; } @@ -68,7 +68,7 @@ RpcServerMap::add(NamedService *rpcsrv) LOG_ASSERT(_myrpcsrv_map.find(name) == _myrpcsrv_map.end()); removeReservation(name); - _visible_map.add(ServiceMapping{name, rpcsrv->getSpec()}); + _proxy.add(ServiceMapping{name, rpcsrv->getSpec()}); } void @@ -82,7 +82,7 @@ RpcServerMap::addNew(std::unique_ptr<ManagedRpcServer> rpcsrv) if (oldman) { const ReservedName *oldres = _reservations[name].get(); const std::string &spec = rpcsrv->getSpec(); - _visible_map.remove(ServiceMapping{name, spec}); + _proxy.remove(ServiceMapping{name, spec}); const std::string &oldname = oldman->getName(); const std::string &oldspec = oldman->getSpec(); if (spec != oldspec) { @@ -133,11 +133,7 @@ RpcServerMap::getReservation(const std::string &name) const { return (found == _reservations.end()) ? nullptr : found->second.get(); } -RpcServerMap::RpcServerMap() - : _myrpcsrv_map(), - _reservations() -{ -} +RpcServerMap::RpcServerMap() = default; RpcServerMap::~RpcServerMap() = default; diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.h b/slobrok/src/vespa/slobrok/server/rpc_server_map.h index 7b6c068b791..ddc85395ecd 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_map.h +++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.h @@ -3,6 +3,7 @@ #include "named_service.h" #include "service_map_history.h" +#include "proxy_map_source.h" #include <memory> #include <string> @@ -28,9 +29,9 @@ class RpcServerMap private: using ManagedRpcServerMap = std::unordered_map<std::string, std::unique_ptr<ManagedRpcServer>>; using ReservedNameMap = std::unordered_map<std::string, std::unique_ptr<ReservedName>>; - ServiceMapHistory _visible_map; ManagedRpcServerMap _myrpcsrv_map; ReservedNameMap _reservations; + ProxyMapSource _proxy; static bool match(const char *name, const char *pattern); @@ -39,8 +40,7 @@ private: public: typedef std::vector<const NamedService *> RpcSrvlist; - ServiceMapHistory& localView() { return _visible_map; } - ServiceMapHistory& visibleMap() { return _visible_map; } + MapSource &proxy() { return _proxy; } ManagedRpcServer *lookupManaged(const std::string & name) const; diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.cpp b/slobrok/src/vespa/slobrok/server/rpchooks.cpp index 51cd3d65857..2fefce1d474 100644 --- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp +++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp @@ -43,6 +43,8 @@ public: RPCHooks::RPCHooks(SBEnv &env, RpcServerMap& rpcsrvmap, RpcServerManager& rpcsrvman) : _env(env), _rpcsrvmap(rpcsrvmap), _rpcsrvmanager(rpcsrvman), + _globalHistory(env.globalHistory()), + _localHistory(env.localHistory()), _cnts(Metrics::zero()), _m_reporter() { @@ -493,7 +495,7 @@ RPCHooks::rpc_incrementalFetch(FRT_RPCRequest *req) uint32_t msTimeout = args[1]._intval32; req->getStash().create<IncrementalFetch>(_env.getSupervisor(), req, - _rpcsrvmap.visibleMap(), gencnt).invoke(msTimeout); + _globalHistory, gencnt).invoke(msTimeout); } void RPCHooks::rpc_fetchLocalView(FRT_RPCRequest *req) { @@ -502,7 +504,7 @@ void RPCHooks::rpc_fetchLocalView(FRT_RPCRequest *req) { vespalib::GenCnt gencnt(args[0]._intval32); uint32_t msTimeout = args[1]._intval32; req->getStash().create<IncrementalFetch>(_env.getSupervisor(), req, - _rpcsrvmap.localView(), gencnt).invoke(msTimeout); + _localHistory, gencnt).invoke(msTimeout); } diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.h b/slobrok/src/vespa/slobrok/server/rpchooks.h index 66f0ed892f3..a41e473b183 100644 --- a/slobrok/src/vespa/slobrok/server/rpchooks.h +++ b/slobrok/src/vespa/slobrok/server/rpchooks.h @@ -12,6 +12,7 @@ namespace slobrok { class SBEnv; class RpcServerMap; class RpcServerManager; +class ServiceMapHistory; /** * @class RPCHooks @@ -41,6 +42,8 @@ private: SBEnv &_env; RpcServerMap &_rpcsrvmap; RpcServerManager &_rpcsrvmanager; + ServiceMapHistory &_globalHistory; + ServiceMapHistory &_localHistory; Metrics _cnts; std::unique_ptr<FNET_Task> _m_reporter; diff --git a/slobrok/src/vespa/slobrok/server/sbenv.cpp b/slobrok/src/vespa/slobrok/server/sbenv.cpp index 2bf8e57cb26..78c34f1bdb4 100644 --- a/slobrok/src/vespa/slobrok/server/sbenv.cpp +++ b/slobrok/src/vespa/slobrok/server/sbenv.cpp @@ -115,6 +115,7 @@ SBEnv::SBEnv(const ConfigShim &shim) _rpcsrvmap() { srandom(time(nullptr) ^ getpid()); + _rpcsrvmap.proxy().registerListener(_globalVisibleHistory); _rpcHooks.initRPC(getSupervisor()); } diff --git a/slobrok/src/vespa/slobrok/server/sbenv.h b/slobrok/src/vespa/slobrok/server/sbenv.h index 1050bd1359a..6836715854a 100644 --- a/slobrok/src/vespa/slobrok/server/sbenv.h +++ b/slobrok/src/vespa/slobrok/server/sbenv.h @@ -54,6 +54,7 @@ private: vespalib::SimpleHealthProducer _health; MetricsProducer _metrics; vespalib::SimpleComponentConfigProducer _components; + ServiceMapHistory _globalVisibleHistory; public: explicit SBEnv(const ConfigShim &shim); @@ -71,6 +72,14 @@ public: ExchangeManager _exchanger; RpcServerMap _rpcsrvmap; + ServiceMapHistory& globalHistory() { + return _globalVisibleHistory; + } + + ServiceMapHistory& localHistory() { + return _globalVisibleHistory; + } + const std::string & mySpec() const { return _me; } bool isSuspended() const { return false; } |