diff --git a/src/ripple/app/ledger/impl/LedgerMaster.cpp b/src/ripple/app/ledger/impl/LedgerMaster.cpp index db1b57121..500eefa6b 100644 --- a/src/ripple/app/ledger/impl/LedgerMaster.cpp +++ b/src/ripple/app/ledger/impl/LedgerMaster.cpp @@ -1560,12 +1560,15 @@ LedgerMaster::shouldAcquire ( std::uint32_t const ledgerHistoryIndex, std::uint32_t const candidateLedger) const { - // If the ledger could be the current ledger acquire it. - // Otherwise, acquire it only if it's within our range of - // desired history and we wouldn't delete it if we had it. - bool ret = (candidateLedger >= currentLedger) || - ((candidateLedger >= ledgerHistoryIndex) && - ((currentLedger - candidateLedger) <= ledgerHistory)); + + // Fetch ledger if it might be the current ledger, + // is requested by the advisory delete setting, or + // is within our configured history range + + bool ret (candidateLedger >= currentLedger || + ((ledgerHistoryIndex > 0) && + (candidateLedger > ledgerHistoryIndex)) || + (currentLedger - candidateLedger) <= ledgerHistory); JLOG (m_journal.trace()) << "Missing ledger " diff --git a/src/ripple/app/misc/SHAMapStoreImp.h b/src/ripple/app/misc/SHAMapStoreImp.h index 89e34dec3..f4cb75a02 100644 --- a/src/ripple/app/misc/SHAMapStoreImp.h +++ b/src/ripple/app/misc/SHAMapStoreImp.h @@ -150,12 +150,16 @@ public: return setup_.advisoryDelete; } + // All ledgers prior to this one are eligible + // for deletion in the next rotation LedgerIndex getLastRotated() override { return state_db_.getState().lastRotated; } + // All ledgers before and including this are unprotected + // and online delete may delete them if appropriate LedgerIndex getCanDelete() override {