diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-06-29 13:37:46 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-06-29 13:37:46 +0000 |
commit | 2ded026a6abe2c99cb68c8cd7d1080a0e4034708 (patch) | |
tree | de719fe5d9274d9fb88989c28ad1f1fc99b90b49 /slobrok | |
parent | a3141dee7d92f6cafbb7b082ba7cc38618d83eae (diff) |
add new RPC api for fetching local view
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_map.h | 1 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.cpp | 22 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.h | 1 |
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); |