Add state data cache and successor table. Remove keys table

* Adds a cache for the most recently validated ledger state
* Replaces the keys table with successor table
* Adds support for ledger diffs in the database
* Removes BackendIndexer
This commit is contained in:
CJ Cobb
2021-11-19 16:10:50 -05:00
parent e930ff04df
commit c7e31aff56
35 changed files with 2801 additions and 1241 deletions

View File

@@ -9,6 +9,8 @@ class PostgresBackend : public BackendInterface
private:
mutable size_t numRowsInObjectsBuffer_ = 0;
mutable std::stringstream objectsBuffer_;
mutable size_t numRowsInSuccessorBuffer_ = 0;
mutable std::stringstream successorBuffer_;
mutable std::stringstream keysBuffer_;
mutable std::stringstream transactionsBuffer_;
mutable std::stringstream accountTxBuffer_;
@@ -31,7 +33,7 @@ public:
fetchLedgerByHash(ripple::uint256 const& hash) const override;
std::optional<Blob>
fetchLedgerObject(ripple::uint256 const& key, uint32_t sequence)
doFetchLedgerObject(ripple::uint256 const& key, uint32_t sequence)
const override;
// returns a transaction, metadata pair
@@ -44,21 +46,22 @@ public:
std::vector<ripple::uint256>
fetchAllTransactionHashesInLedger(uint32_t ledgerSequence) const override;
std::vector<LedgerObject>
fetchLedgerDiff(uint32_t ledgerSequence) const override;
std::optional<LedgerRange>
hardFetchLedgerRange() const override;
LedgerPage
doFetchLedgerPage(
std::optional<ripple::uint256> const& cursor,
std::uint32_t ledgerSequence,
std::uint32_t limit) const override;
std::optional<ripple::uint256>
doFetchSuccessorKey(ripple::uint256 key, uint32_t ledgerSequence)
const override;
std::vector<TransactionAndMetadata>
fetchTransactions(
std::vector<ripple::uint256> const& hashes) const override;
std::vector<Blob>
fetchLedgerObjects(
doFetchLedgerObjects(
std::vector<ripple::uint256> const& keys,
uint32_t sequence) const override;
@@ -73,11 +76,15 @@ public:
writeLedger(
ripple::LedgerInfo const& ledgerInfo,
std::string&& ledgerHeader,
bool isFirst) const override;
bool isFirst) override;
void
doWriteLedgerObject(std::string&& key, uint32_t seq, std::string&& blob)
const override;
override;
void
writeSuccessor(std::string&& key, uint32_t seq, std::string&& successor)
override;
void
writeTransaction(
@@ -85,11 +92,11 @@ public:
uint32_t seq,
uint32_t date,
std::string&& transaction,
std::string&& metadata) const override;
std::string&& metadata) override;
void
writeAccountTransactions(
std::vector<AccountTransactionsData>&& data) const override;
std::vector<AccountTransactionsData>&& data) override;
void
open(bool readOnly) override;
@@ -98,18 +105,13 @@ public:
close() override;
void
startWrites() const override;
startWrites() override;
bool
doFinishWrites() const override;
doFinishWrites() override;
bool
doOnlineDelete(uint32_t numLedgersToKeep) const override;
bool
writeKeys(
std::unordered_set<ripple::uint256> const& keys,
KeyIndex const& index,
bool isAsync = false) const override;
};
} // namespace Backend
#endif