20#include <xrpld/app/ledger/TransactionMaster.h>
21#include <xrpld/app/main/Application.h>
22#include <xrpld/app/misc/Transaction.h>
24#include <xrpl/basics/TaggedCache.ipp>
25#include <xrpl/basics/chrono.h>
26#include <xrpl/protocol/STTx.h>
35 std::chrono::minutes{30},
37 mApp.journal(
"TaggedCache"))
44 auto txn =
mCache.fetch(hash);
56 return mCache.fetch(txnID);
68 return std::pair{std::move(txn),
nullptr};
72 if (std::holds_alternative<TxSearched>(v))
75 auto [txn, txnMeta] = std::get<TxPair>(v);
78 mCache.canonicalize_replace_client(txnID, txn);
80 return std::pair{std::move(txn), std::move(txnMeta)};
95 return std::pair{std::move(txn),
nullptr};
99 if (std::holds_alternative<TxSearched>(v))
102 auto [txn, txnMeta] = std::get<TxPair>(v);
105 mCache.canonicalize_replace_client(txnID, txn);
107 return std::pair{std::move(txn), std::move(txnMeta)};
112 boost::intrusive_ptr<SHAMapItem>
const& item,
124 txn = std::make_shared<STTx const>(
std::ref(sit));
129 txn = std::make_shared<STTx const>(
136 iTx->setStatus(
COMMITTED, uCommitLedger);
138 txn = iTx->getSTransaction();
147 uint256 const tid = (*pTransaction)->getID();
148 if (tid != beast::zero)
150 auto txn = *pTransaction;
152 mCache.canonicalize_replace_client(tid, txn);
std::shared_ptr< Transaction > fetch_from_cache(uint256 const &)
bool inLedger(uint256 const &hash, std::uint32_t ledger)
TransactionMaster(Application &app)
std::variant< std::pair< std::shared_ptr< Transaction >, std::shared_ptr< TxMeta > >, TxSearched > fetch(uint256 const &, error_code_i &ec)
TaggedCache< uint256, Transaction > mCache
void canonicalize(std::shared_ptr< Transaction > *pTransaction)
TaggedCache< uint256, Transaction > & getCache()
static std::variant< std::pair< std::shared_ptr< Transaction >, std::shared_ptr< TxMeta > >, TxSearched > load(uint256 const &id, Application &app, error_code_i &ec)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
boost::icl::closed_interval< T > ClosedInterval
A closed interval over the domain T.
Stopwatch & stopwatch()
Returns an instance of a wall clock.
ClosedInterval< T > range(T low, T high)
Create a closed range interval.