Ejemplo n.º 1
0
void
CatchupWork::onFailureRaise()
{
    mApp.getCatchupManager().historyCaughtup();
    asio::error_code ec = std::make_error_code(std::errc::timed_out);
    mProgressHandler(ec, ProgressState::FINISHED, LedgerHeaderHistoryEntry{});
}
Ejemplo n.º 2
0
void IHTTPDownloader::FireProgressEvent( double total, double now )
{
	if (mProgressHandler)
	{
		SingleDownloadingProgressEventArg eventArg(*this,total,now);
		mProgressHandler(this,eventArg);
	}
}
Ejemplo n.º 3
0
Work::State
CatchupWork::onSuccess()
{
    if (!hasAnyLedgersToCatchupTo())
    {
        mApp.getCatchupManager().historyCaughtup();
        asio::error_code ec = std::make_error_code(std::errc::invalid_argument);
        mProgressHandler(ec, ProgressState::FINISHED,
                         LedgerHeaderHistoryEntry{});
        return WORK_SUCCESS;
    }

    auto resolvedConfiguration =
        mCatchupConfiguration.resolve(mRemoteState.currentLedger);
    auto catchupRange =
        makeCatchupRange(mLastClosedLedgerAtReset, resolvedConfiguration,
                         mApp.getHistoryManager());
    auto ledgerRange = catchupRange.first;
    auto checkpointRange =
        CheckpointRange{ledgerRange, mApp.getHistoryManager()};

    if (downloadLedgers(checkpointRange))
    {
        return WORK_PENDING;
    }

    if (verifyLedgers(ledgerRange))
    {
        return WORK_PENDING;
    }

    if (catchupRange.second)
    {
        if (!alreadyHaveBucketsHistoryArchiveState(checkpointRange.first()))
        {
            if (downloadBucketsHistoryArchiveState(checkpointRange.first()))
            {
                return WORK_PENDING;
            }
        }
        else
        {
            mApplyBucketsRemoteState = mRemoteState;
        }

        if (downloadBuckets())
        {
            return WORK_PENDING;
        }

        if (applyBuckets())
        {
            return WORK_PENDING;
        }

        if (!mBucketsAppliedEmitted)
        {
            mProgressHandler({}, ProgressState::APPLIED_BUCKETS,
                             mFirstVerified);
            mBucketsAppliedEmitted = true;
        }
    }
    else
    {
        CLOG(INFO, "History") << "Catchup downloading history archive "
                                 "state for applying buckets at checkpoint "
                              << checkpointRange.first() << " not needed";
    }

    if (downloadTransactions(checkpointRange))
    {
        return WORK_PENDING;
    }

    if (applyTransactions(ledgerRange))
    {
        return WORK_PENDING;
    }

    mProgressHandler({}, ProgressState::APPLIED_TRANSACTIONS, mLastApplied);
    mProgressHandler({}, ProgressState::FINISHED, mLastApplied);
    mApp.getCatchupManager().historyCaughtup();
    return WORK_SUCCESS;
}