mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 06:25:51 +00:00
Be smarter about how we acquire ledgers we need to publish.
This commit is contained in:
@@ -684,6 +684,7 @@ void LedgerMaster::tryPublish ()
|
|||||||
}
|
}
|
||||||
else if (mValidLedger->getLedgerSeq () > mPubLedger->getLedgerSeq ())
|
else if (mValidLedger->getLedgerSeq () > mPubLedger->getLedgerSeq ())
|
||||||
{
|
{
|
||||||
|
int acq = 0;
|
||||||
for (uint32 seq = mPubLedger->getLedgerSeq () + 1; seq <= mValidLedger->getLedgerSeq (); ++seq)
|
for (uint32 seq = mPubLedger->getLedgerSeq () + 1; seq <= mValidLedger->getLedgerSeq (); ++seq)
|
||||||
{
|
{
|
||||||
WriteLog (lsTRACE, LedgerMaster) << "Trying to publish ledger " << seq;
|
WriteLog (lsTRACE, LedgerMaster) << "Trying to publish ledger " << seq;
|
||||||
@@ -692,7 +693,7 @@ void LedgerMaster::tryPublish ()
|
|||||||
uint256 hash;
|
uint256 hash;
|
||||||
|
|
||||||
if (seq == mValidLedger->getLedgerSeq ())
|
if (seq == mValidLedger->getLedgerSeq ())
|
||||||
{
|
{ // We need to publish the ledger we just fully validated
|
||||||
ledger = mValidLedger;
|
ledger = mValidLedger;
|
||||||
hash = ledger->getHash ();
|
hash = ledger->getHash ();
|
||||||
}
|
}
|
||||||
@@ -710,35 +711,28 @@ void LedgerMaster::tryPublish ()
|
|||||||
ledger = mLedgerHistory.getLedgerByHash (hash);
|
ledger = mLedgerHistory.getLedgerByHash (hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ledger)
|
if (!ledger && (++acq < 4))
|
||||||
{
|
{ // We can try to acquire the ledger we need
|
||||||
mPubLedger = ledger;
|
|
||||||
mPubLedgers.push_back (ledger);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (getApp().getInboundLedgers ().isFailure (hash))
|
|
||||||
{
|
|
||||||
WriteLog (lsWARNING, LedgerMaster) << "Unable to acquire a recent validated ledger";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
InboundLedger::pointer acq = getApp().getInboundLedgers ().findCreate (hash, seq);
|
InboundLedger::pointer acq = getApp().getInboundLedgers ().findCreate (hash, seq);
|
||||||
|
|
||||||
if (!acq->isDone ())
|
if (!acq->isDone ())
|
||||||
{
|
{
|
||||||
acq->setAccept ();
|
acq->setAccept ();
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else if (acq->isComplete () && !acq->isFailed ())
|
else if (acq->isComplete () && !acq->isFailed ())
|
||||||
{
|
{
|
||||||
mPubLedger = acq->getLedger ();
|
ledger = acq->getLedger();
|
||||||
mPubLedgers.push_back (mPubLedger);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
WriteLog (lsWARNING, LedgerMaster) << "Failed to acquire a published ledger";
|
WriteLog (lsWARNING, LedgerMaster) << "Failed to acquire a published ledger";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ledger && (ledger->getLedgerSeq() == (mPubLedger->getLedgerSeq() + 1)))
|
||||||
|
{ // We acquired the next ledger we need to publish
|
||||||
|
mPubLedger = ledger;
|
||||||
|
mPubLedgers.push_back (mPubLedger);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user