22#include "data/BackendInterface.hpp"
25#include "util/log/Logger.hpp"
27#include <grpcpp/grpcpp.h>
28#include <xrpl/proto/org/xrpl/rpc/v1/xrp_ledger.grpc.pb.h>
43 std::shared_ptr<BackendInterface> backend_;
44 std::shared_ptr<LoadBalancerInterface> loadBalancer_;
51 std::shared_ptr<BackendInterface> backend,
52 std::shared_ptr<LoadBalancerInterface> balancer
54 : backend_(std::move(backend)), loadBalancer_(std::move(balancer))
68 [[nodiscard]] OptionalGetLedgerResponseType
71 LOG(log_.debug()) <<
"Attempting to fetch ledger with sequence = " << sequence;
73 auto response = loadBalancer_->fetchLedger(sequence,
false,
false);
75 LOG(log_.trace()) <<
"GetLedger reply = " << response->DebugString();
89 [[nodiscard]] OptionalGetLedgerResponseType
92 LOG(log_.debug()) <<
"Attempting to fetch ledger with sequence = " << sequence;
94 auto const isCacheFull = backend_->cache().isFull();
95 auto const isLedgerCached = backend_->cache().latestLedgerSequence() >= sequence;
97 LOG(log_.info()) << sequence
98 <<
" is already cached, the current latest seq in cache is "
99 << backend_->cache().latestLedgerSequence() <<
" and the cache is "
100 << (isCacheFull ?
"full" :
"not full");
103 auto response = loadBalancer_->fetchLedger(sequence,
true, !isCacheFull || isLedgerCached);
105 LOG(log_.trace()) <<
"GetLedger reply = " << response->DebugString();
LedgerFetcher(std::shared_ptr< BackendInterface > backend, std::shared_ptr< LoadBalancerInterface > balancer)
Create an instance of the fetcher.
Definition LedgerFetcher.hpp:50
OptionalGetLedgerResponseType fetchData(uint32_t sequence) override
Extract data for a particular ledger from an ETL source.
Definition LedgerFetcher.hpp:69
OptionalGetLedgerResponseType fetchDataAndDiff(uint32_t sequence) override
Extract diff data for a particular ledger from an ETL source.
Definition LedgerFetcher.hpp:90
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:96
An interface for LedgerFetcher.
Definition LedgerFetcherInterface.hpp:34