diff --git a/reporting/BackendIndexer.cpp b/reporting/BackendIndexer.cpp index 0866809d..624a4866 100644 --- a/reporting/BackendIndexer.cpp +++ b/reporting/BackendIndexer.cpp @@ -74,6 +74,15 @@ BackendIndexer::doKeysRepair( BOOST_LOG_TRIVIAL(info) << __func__ << " finished. sequence = " << std::to_string(*sequence); } +void +BackendIndexer::doKeysRepairAsync( + BackendInterface const& backend, + std::optional sequence) +{ + boost::asio::post(ioc_, [this, sequence, &backend]() { + doKeysRepair(backend, sequence); + }); +} void BackendIndexer::writeKeyFlagLedgerAsync( diff --git a/reporting/BackendInterface.h b/reporting/BackendInterface.h index 256a5ea3..9924dc0b 100644 --- a/reporting/BackendInterface.h +++ b/reporting/BackendInterface.h @@ -88,6 +88,10 @@ class BackendIndexer std::unordered_set keys; mutable bool isFirst_ = true; + void + doKeysRepair( + BackendInterface const& backend, + std::optional sequence); public: BackendIndexer(boost::json::object const& config); @@ -103,7 +107,7 @@ public: uint32_t ledgerSequence, BackendInterface const& backend); void - doKeysRepair( + doKeysRepairAsync( BackendInterface const& backend, std::optional sequence); uint32_t @@ -171,7 +175,7 @@ public: auto rng = fetchLedgerRangeNoThrow(); if (rng && rng->minSequence != ledgerSequence) isFirst_ = false; - indexer_.doKeysRepair(*this, ledgerSequence); + indexer_.doKeysRepairAsync(*this, ledgerSequence); } if (indexer_.isKeyFlagLedger(ledgerSequence) || isFirst_) indexer_.writeKeyFlagLedgerAsync(ledgerSequence, *this);