Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
LedgerFetcher.hpp
1#pragma once
2
3#include "data/BackendInterface.hpp"
6#include "util/log/Logger.hpp"
7
8#include <grpcpp/grpcpp.h>
9#include <xrpl/proto/org/xrpl/rpc/v1/xrp_ledger.grpc.pb.h>
10
11#include <cstdint>
12#include <memory>
13#include <utility>
14
15namespace etl::impl {
16
21private:
22 util::Logger log_{"ETL"};
23
24 std::shared_ptr<BackendInterface> backend_;
25 std::shared_ptr<LoadBalancerInterface> loadBalancer_;
26
27public:
32 std::shared_ptr<BackendInterface> backend,
33 std::shared_ptr<LoadBalancerInterface> balancer
34 )
35 : backend_(std::move(backend)), loadBalancer_(std::move(balancer))
36 {
37 }
38
49 [[nodiscard]] OptionalGetLedgerResponseType
50 fetchData(uint32_t sequence) override
51 {
52 LOG(log_.debug()) << "Attempting to fetch ledger with sequence = " << sequence;
53
54 auto response = loadBalancer_->fetchLedger(sequence, false, false);
55 if (response)
56 LOG(log_.trace()) << "GetLedger reply = " << response->DebugString();
57 return response;
58 }
59
70 [[nodiscard]] OptionalGetLedgerResponseType
71 fetchDataAndDiff(uint32_t sequence) override
72 {
73 LOG(log_.debug()) << "Attempting to fetch ledger with sequence = " << sequence;
74
75 auto const isCacheFull = backend_->cache().isFull();
76 auto const isLedgerCached = backend_->cache().latestLedgerSequence() >= sequence;
77 if (isLedgerCached) {
78 LOG(log_.info()) << sequence
79 << " is already cached, the current latest seq in cache is "
80 << backend_->cache().latestLedgerSequence() << " and the cache is "
81 << (isCacheFull ? "full" : "not full");
82 }
83
84 auto response = loadBalancer_->fetchLedger(sequence, true, !isCacheFull || isLedgerCached);
85 if (response)
86 LOG(log_.trace()) << "GetLedger reply = " << response->DebugString();
87
88 return response;
89 }
90};
91
92} // namespace etl::impl
LedgerFetcher(std::shared_ptr< BackendInterface > backend, std::shared_ptr< LoadBalancerInterface > balancer)
Create an instance of the fetcher.
Definition LedgerFetcher.hpp:31
OptionalGetLedgerResponseType fetchData(uint32_t sequence) override
Extract data for a particular ledger from an ETL source.
Definition LedgerFetcher.hpp:50
OptionalGetLedgerResponseType fetchDataAndDiff(uint32_t sequence) override
Extract diff data for a particular ledger from an ETL source.
Definition LedgerFetcher.hpp:71
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:78
An interface for LedgerFetcher.
Definition LedgerFetcherInterface.hpp:15