diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2019-05-13 13:51:57 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2019-05-14 09:36:05 +0000 |
commit | 7f7e6ef483a2cd32462f58e20a449b1e5f0cde45 (patch) | |
tree | d5cf67dc489d575be0e6c03161e478ecd71fb3b0 | |
parent | 81cda304c2c58e381f334a90817dd1ea63a56fe0 (diff) |
remove usage and implementation of "slobrok.mirror.fetch" API
-rw-r--r-- | slobrok/src/vespa/slobrok/sbmirror.cpp | 50 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/sbmirror.h | 2 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.cpp | 23 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.h | 1 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpcmirror.cpp | 97 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpcmirror.h | 22 |
6 files changed, 1 insertions, 194 deletions
diff --git a/slobrok/src/vespa/slobrok/sbmirror.cpp b/slobrok/src/vespa/slobrok/sbmirror.cpp index d36e456995c..f0a810dad10 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.cpp +++ b/slobrok/src/vespa/slobrok/sbmirror.cpp @@ -19,7 +19,6 @@ MirrorAPI::MirrorAPI(FRT_Supervisor &orb, const ConfiguratorFactory & config) _reqPending(false), _scheduled(false), _reqDone(false), - _useOldProto(false), _specs(), _specsGen(), _updates(), @@ -122,42 +121,6 @@ MirrorAPI::ready() const return _updates.getAsInt() != 0; } - -// returns true if reconnect is needed -bool -MirrorAPI::handleMirrorFetch() -{ - if (strcmp(_req->GetReturnSpec(), "SSi") != 0) { - LOG(warning, "unknown return types '%s' from RPC request", _req->GetReturnSpec()); - return true; - } - - FRT_Values &answer = *(_req->GetReturn()); - - uint32_t numNames = answer[0]._string_array._len; - FRT_StringValue *n = answer[0]._string_array._pt; - uint32_t numSpecs = answer[1]._string_array._len; - FRT_StringValue *s = answer[1]._string_array._pt; - uint32_t newGen = answer[2]._intval32; - - if (numNames != numSpecs) { - LOG(warning, "inconsistent array lengths from RPC mirror request"); - return true; - } - - if (_specsGen != newGen) { - SpecList specs; - - for (uint32_t idx = 0; idx < numNames; idx++) { - specs.push_back(std::make_pair(std::string(n[idx]._str), - std::string(s[idx]._str))); - } - updateTo(specs, newGen); - } - return false; -} - - // returns true if reconnect is needed bool MirrorAPI::handleIncrementalFetch() @@ -261,13 +224,7 @@ MirrorAPI::handleReqDone() bool reconn = (_target == 0); if (_req->IsError()) { - if (_req->GetErrorCode() == FRTE_RPC_NO_SUCH_METHOD && !_useOldProto) { - _useOldProto = true; - return false; - } reconn = true; - } else if (_useOldProto) { - reconn = handleMirrorFetch(); } else { reconn = handleIncrementalFetch(); } @@ -296,7 +253,6 @@ MirrorAPI::handleReconnect() _target = _orb.GetTarget(_currSlobrok.c_str()); } _specsGen.reset(); - _useOldProto = false; if (_target == 0) { if (_rpc_ms < 50000) { _rpc_ms += 100; @@ -327,11 +283,7 @@ MirrorAPI::makeRequest() } _req = _orb.AllocRPCRequest(_req); - if (_useOldProto) { - _req->SetMethodName("slobrok.mirror.fetch"); - } else { - _req->SetMethodName("slobrok.incremental.fetch"); - } + _req->SetMethodName("slobrok.incremental.fetch"); _req->GetParams()->AddInt32(_specsGen.getAsInt()); // gencnt _req->GetParams()->AddInt32(5000); // mstimeout _target->InvokeAsync(_req, 0.001 * _rpc_ms, this); diff --git a/slobrok/src/vespa/slobrok/sbmirror.h b/slobrok/src/vespa/slobrok/sbmirror.h index 171c88b8700..152886fc02e 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.h +++ b/slobrok/src/vespa/slobrok/sbmirror.h @@ -79,7 +79,6 @@ private: void updateTo(SpecList& newSpecs, uint32_t newGen); bool handleIncrementalFetch(); - bool handleMirrorFetch(); void handleReconfig(); bool handleReqDone(); @@ -93,7 +92,6 @@ private: bool _reqPending; bool _scheduled; bool _reqDone; - bool _useOldProto; SpecList _specs; vespalib::GenCnt _specsGen; vespalib::GenCnt _updates; diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.cpp b/slobrok/src/vespa/slobrok/server/rpchooks.cpp index ff1ce514084..63b09894686 100644 --- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp +++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp @@ -181,16 +181,6 @@ RPCHooks::initRPC(FRT_Supervisor *supervisor) //------------------------------------------------------------------------- //------------------------------------------------------------------------- - rb.DefineMethod("slobrok.mirror.fetch", "ii", "SSi", - FRT_METHOD(RPCHooks::rpc_mirrorFetch), this); - rb.MethodDesc("Fetch or update mirror of name to spec map"); - rb.ParamDesc("gencnt", "generation already known by client"); - rb.ParamDesc("timeout", "How many milliseconds to wait for changes" - "before returning if nothing has changed (max=10000)"); - rb.ReturnDesc("names", "Array of NamedService names"); - rb.ReturnDesc("specs", "Array of connection specifications (same order)"); - rb.ReturnDesc("newgen", "Generation count for new version of the map"); - //------------------------------------------------------------------------- rb.DefineMethod("slobrok.incremental.fetch", "ii", "iSSSi", FRT_METHOD(RPCHooks::rpc_incrementalFetch), this); rb.MethodDesc("Fetch or update mirror of name to spec map"); @@ -505,19 +495,6 @@ RPCHooks::rpc_listAllRpcServers(FRT_RPCRequest *req) void -RPCHooks::rpc_mirrorFetch(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<MirrorFetch>(_env.getSupervisor(), req, - _rpcsrvmap.visibleMap(), gencnt).invoke(msTimeout); -} - -void RPCHooks::rpc_incrementalFetch(FRT_RPCRequest *req) { _cnts.mirrorReqs++; diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.h b/slobrok/src/vespa/slobrok/server/rpchooks.h index 2f7e55d8fce..58866e68a4e 100644 --- a/slobrok/src/vespa/slobrok/server/rpchooks.h +++ b/slobrok/src/vespa/slobrok/server/rpchooks.h @@ -65,7 +65,6 @@ private: void rpc_listManagedRpcServers(FRT_RPCRequest *req); void rpc_lookupManaged(FRT_RPCRequest *req); void rpc_listAllRpcServers(FRT_RPCRequest *req); - void rpc_mirrorFetch(FRT_RPCRequest *req); void rpc_incrementalFetch(FRT_RPCRequest *req); void rpc_wantAdd(FRT_RPCRequest *req); void rpc_doAdd(FRT_RPCRequest *req); diff --git a/slobrok/src/vespa/slobrok/server/rpcmirror.cpp b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp index 46d7f70288b..1529ea93d4e 100644 --- a/slobrok/src/vespa/slobrok/server/rpcmirror.cpp +++ b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp @@ -9,103 +9,6 @@ LOG_SETUP(".rpcmirror"); namespace slobrok { -MirrorFetch::MirrorFetch(FRT_Supervisor *orb, - FRT_RPCRequest *req, - VisibleMap &map, - vespalib::GenCnt gen) - : FNET_Task(orb->GetScheduler()), - _req(req), - _map(map), - _gen(gen) -{ } - - -MirrorFetch::~MirrorFetch() { } - - -void -MirrorFetch::completeReq() -{ - vespalib::GenCnt newgen = _map.genCnt(); - if (newgen == _gen) { // no change - _req->GetReturn()->AddStringArray(0); - _req->GetReturn()->AddStringArray(0); - } else { - std::vector<const NamedService *> rpcsrvlist = _map.allVisible(); - - FRT_Values &dst = *_req->GetReturn(); - size_t sz = rpcsrvlist.size(); - FRT_StringValue *names = dst.AddStringArray(sz); - FRT_StringValue *specs = dst.AddStringArray(sz); - for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) { - dst.SetString(&names[i], rpcsrvlist[i]->getName().c_str()); - dst.SetString(&specs[i], rpcsrvlist[i]->getSpec().c_str()); - } - if (sz > 0) { - LOG(debug, "mirrorFetch %p -> %u, last [%s,%s]", - this, - (unsigned int)sz, - dst[0]._string_array._pt[sz-1]._str, - dst[1]._string_array._pt[sz-1]._str); - } else { - LOG(debug, "mirrorFetch %p -> 0 size", this); - } - } - _req->GetReturn()->AddInt32(newgen.getAsInt()); - LOG(debug, "mirrorFetch %p done (gen %d -> gen %d)", - this, _gen.getAsInt(), newgen.getAsInt()); - _req->Return(); -} - - -void -MirrorFetch::PerformTask() -{ - // cancel update notification - _map.removeUpdateListener(this); - completeReq(); -} - - -void -MirrorFetch::updated(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - completeReq(); -} - - -void -MirrorFetch::aborted(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - _req->SetError(FRTE_RPC_METHOD_FAILED, "slobrok shutting down"); - _req->Return(); -} - - -void -MirrorFetch::invoke(uint32_t msTimeout) -{ - _req->Detach(); - LOG(debug, "MirrorFetch %p invoked from %s (gen %d, timeout %d ms)", - this, _req->GetConnection()->GetSpec(), _gen.getAsInt(), msTimeout); - if (_map.genCnt() != _gen || msTimeout == 0) { - completeReq(); - } else { - _map.addUpdateListener(this); // register as update listener - if (msTimeout > 10000) - msTimeout = 10000; - Schedule((double) msTimeout / 1000.0); - } -} - IncrementalFetch::IncrementalFetch(FRT_Supervisor *orb, FRT_RPCRequest *req, VisibleMap &map, diff --git a/slobrok/src/vespa/slobrok/server/rpcmirror.h b/slobrok/src/vespa/slobrok/server/rpcmirror.h index e1c1113a0d2..ce7ca5fca32 100644 --- a/slobrok/src/vespa/slobrok/server/rpcmirror.h +++ b/slobrok/src/vespa/slobrok/server/rpcmirror.h @@ -9,28 +9,6 @@ class FRT_Supervisor; namespace slobrok { -class MirrorFetch : public FNET_Task, - public VisibleMap::IUpdateListener -{ -private: - FRT_RPCRequest *_req; - VisibleMap &_map; - vespalib::GenCnt _gen; - -public: - MirrorFetch(const MirrorFetch &) = delete; - MirrorFetch& operator=(const MirrorFetch &) = delete; - - MirrorFetch(FRT_Supervisor *orb, FRT_RPCRequest *req, VisibleMap &map, vespalib::GenCnt gen); - ~MirrorFetch(); - - void completeReq(); - void PerformTask() override; - void updated(VisibleMap &map) override; - void aborted(VisibleMap &map) override; - void invoke(uint32_t msTimeout); -}; - class IncrementalFetch : public FNET_Task, public VisibleMap::IUpdateListener { |