From 2d5eb04dd19e0737f2242130935e077e74975295 Mon Sep 17 00:00:00 2001 From: CJ Cobb Date: Thu, 17 Mar 2022 12:39:55 -0400 Subject: [PATCH] clean up sync interval logic in CassandraBackend --- src/backend/CassandraBackend.h | 45 ++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/backend/CassandraBackend.h b/src/backend/CassandraBackend.h index b03496298..87a1d31a5 100644 --- a/src/backend/CassandraBackend.h +++ b/src/backend/CassandraBackend.h @@ -692,12 +692,44 @@ public: boost::asio::yield_context& yield) const override; bool - doFinishWrites() override + doFinishWritesSync() { + assert(syncInterval_ == 1); + // wait for all other writes to finish + sync(); + // write range + if (!range) + { + CassandraStatement statement{updateLedgerRange_}; + statement.bindNextInt(ledgerSequence_); + statement.bindNextBoolean(false); + statement.bindNextInt(ledgerSequence_); + executeSyncWrite(statement); + } + CassandraStatement statement{updateLedgerRange_}; + statement.bindNextInt(ledgerSequence_); + statement.bindNextBoolean(true); + statement.bindNextInt(ledgerSequence_ - 1); + if (!executeSyncUpdate(statement)) + { + BOOST_LOG_TRIVIAL(warning) + << __func__ << " Update failed for ledger " + << std::to_string(ledgerSequence_) << ". Returning"; + return false; + } + BOOST_LOG_TRIVIAL(info) << __func__ << " Committed ledger " + << std::to_string(ledgerSequence_); + return true; + } + + bool + doFinishWritesAsync() + { + assert(syncInterval_ != 1); // if db is empty, sync. if sync interval is 1, always sync. // if we've never synced, sync. if its been greater than the configured // sync interval since we last synced, sync. - if (!range || syncInterval_ == 1 || lastSync_ == 0 || + if (!range || lastSync_ == 0 || ledgerSequence_ - syncInterval_ >= lastSync_) { // wait for all other writes to finish @@ -739,6 +771,15 @@ public: } return true; } + + bool + doFinishWrites() override + { + if (syncInterval_ == 1) + return doFinishWritesSync(); + else + return doFinishWritesAsync(); + } void writeLedger(ripple::LedgerInfo const& ledgerInfo, std::string&& header) override;