summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-06-29 13:37:46 +0000
committerArne Juul <arnej@verizonmedia.com>2021-06-29 13:37:46 +0000
commit2ded026a6abe2c99cb68c8cd7d1080a0e4034708 (patch)
treede719fe5d9274d9fb88989c28ad1f1fc99b90b49 /slobrok
parenta3141dee7d92f6cafbb7b082ba7cc38618d83eae (diff)
add new RPC api for fetching local view
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_map.h1
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.cpp22
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.h1
3 files changed, 24 insertions, 0 deletions
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.h b/slobrok/src/vespa/slobrok/server/rpc_server_map.h
index 2e49718887d..7b6c068b791 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_map.h
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.h
@@ -39,6 +39,7 @@ private:
public:
typedef std::vector<const NamedService *> RpcSrvlist;
+ ServiceMapHistory& localView() { return _visible_map; }
ServiceMapHistory& visibleMap() { return _visible_map; }
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 59f0b0e448a..7388e7f7e22 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp
@@ -124,6 +124,19 @@ RPCHooks::initRPC(FRT_Supervisor *supervisor)
rb.ReturnDesc("denied", "non-zero if request was denied");
rb.ReturnDesc("reason", "reason for denial");
//-------------------------------------------------------------------------
+ rb.DefineMethod("slobrok.internal.fetchLocalView", "ii", "iSSSi",
+ FRT_METHOD(RPCHooks::rpc_fetchLocalView), this);
+ rb.MethodDesc("Fetch or update peer mirror of local view");
+ rb.ParamDesc("gencnt", "generation already known by peer");
+ rb.ParamDesc("timeout", "How many milliseconds to wait for changes"
+ "before returning if nothing has changed (max=10000)");
+
+ rb.ReturnDesc("oldgen", "Generation already known by peer");
+ rb.ReturnDesc("removed", "Array of NamedService names to remove");
+ rb.ReturnDesc("names", "Array of NamedService names with new values");
+ rb.ReturnDesc("specs", "Array of connection specifications (same order)");
+ rb.ReturnDesc("newgen", "Generation count for new version of the map");
+ //-------------------------------------------------------------------------
//-------------------------------------------------------------------------
rb.DefineMethod("slobrok.callback.listNamesServed", "", "S",
@@ -483,6 +496,15 @@ RPCHooks::rpc_incrementalFetch(FRT_RPCRequest *req)
_rpcsrvmap.visibleMap(), gencnt).invoke(msTimeout);
}
+void RPCHooks::rpc_fetchLocalView(FRT_RPCRequest *req) {
+ _cnts.mirrorReqs++;
+ FRT_Values &args = *req->GetParams();
+ vespalib::GenCnt gencnt(args[0]._intval32);
+ uint32_t msTimeout = args[1]._intval32;
+ req->getStash().create<IncrementalFetch>(_env.getSupervisor(), req,
+ _rpcsrvmap.localView(), gencnt).invoke(msTimeout);
+}
+
// System API methods
void
diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.h b/slobrok/src/vespa/slobrok/server/rpchooks.h
index 499ce431d20..66f0ed892f3 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.h
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.h
@@ -69,6 +69,7 @@ private:
void rpc_wantAdd(FRT_RPCRequest *req);
void rpc_doAdd(FRT_RPCRequest *req);
void rpc_doRemove(FRT_RPCRequest *req);
+ void rpc_fetchLocalView(FRT_RPCRequest *req);
void rpc_listNamesServed(FRT_RPCRequest *req);
void rpc_getRpcServerHistory(FRT_RPCRequest *req);