summaryrefslogtreecommitdiffstats
path: root/slobrok/src
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-06-30 09:21:05 +0000
committerArne Juul <arnej@verizonmedia.com>2021-07-15 08:42:08 +0000
commit331d8dfdb676d1392bd272d0989149b2a582298e (patch)
treeabf52f8680b07bef11402c150410c1897864fe3d /slobrok/src
parent2d0ea68835a9306a262ac0466c72fd4a2597a33c (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.cpp12
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_map.h6
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.cpp6
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.h3
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.cpp1
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.h9
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; }