20 #include <ripple/app/ledger/LedgerMaster.h>
21 #include <ripple/app/main/Application.h>
22 #include <ripple/app/paths/PathRequests.h>
23 #include <ripple/basics/Log.h>
24 #include <ripple/core/JobQueue.h>
25 #include <ripple/net/RPCErr.h>
26 #include <ripple/protocol/ErrorCodes.h>
27 #include <ripple/protocol/jss.h>
28 #include <ripple/resource/Fees.h>
45 std::uint32_t const lineSeq = lineCache ? lineCache->getLedger()->seq() : 0;
47 JLOG(
mJournal.
debug()) <<
"getLineCache has cache for " << lineSeq
48 <<
", considering " << lgrSeq;
51 (authoritative && (lgrSeq > lineSeq)) ||
53 ((lgrSeq + 8) < lineSeq)) ||
54 (lgrSeq > (lineSeq + 8)))
57 <<
"getLineCache creating new cache for " << lgrSeq;
61 lineCache_ = lineCache = std::make_shared<RippleLineCache>(
84 bool mustBreak =
false;
86 JLOG(
mJournal.
trace()) <<
"updateAll seq=" << cache->getLedger()->seq()
87 <<
", " << requests.
size() <<
" requests";
89 int processed = 0, removed = 0;
93 if (
auto ipSub = request->getSubscriber();
94 ipSub && ipSub->getRequest() == request)
98 request->doAborting();
105 for (
auto const& wr : requests)
110 auto request = wr.lock();
113 <<
"updateAll request " << (request ?
"" :
"not ") <<
"found";
117 auto continueCallback = [&getSubscriber, &request]() {
121 return (
bool)getSubscriber(request);
123 if (!request->needsUpdate(
124 newRequests, cache->getLedger()->seq()))
128 if (
auto ipSub = getSubscriber(request))
130 if (!ipSub->getConsumer().warn())
137 cache,
false, continueCallback);
138 request->updateComplete();
139 update[jss::type] =
"path_find";
140 if ((ipSub = getSubscriber(request)))
142 ipSub->send(update,
false);
148 else if (request->hasCompletion())
151 request->doUpdate(cache,
false);
152 request->updateComplete();
167 [&removed, &request](
auto const& wl) {
170 if (r && r != request)
192 else if (newRequests)
214 JLOG(
mJournal.
debug()) <<
"updateAll complete: " << processed
215 <<
" processed and " << removed <<
" removed";
237 return r && !r->isNew();
250 auto req = std::make_shared<PathRequest>(
253 auto [valid, jvRes] =
254 req->doCreate(
getLineCache(inLedger,
false), requestJson);
258 subscriber->setRequest(req);
262 return std::move(jvRes);
276 req = std::make_shared<PathRequest>(
279 auto [valid, jvRes] = req->doCreate(
getLineCache(inLedger,
false), request);
296 return std::move(jvRes);
305 auto cache = std::make_shared<RippleLineCache>(
308 auto req = std::make_shared<PathRequest>(
311 auto [valid, jvRes] = req->doCreate(cache, request);
313 jvRes = req->doUpdate(cache,
false);
314 return std::move(jvRes);