Don't save unvalidated transactions to any transaction database.

This commit is contained in:
David Schwartz
2013-07-25 13:34:20 -07:00
parent 1ba5a77795
commit 28a7e58fd4
7 changed files with 53 additions and 69 deletions

View File

@@ -15,7 +15,7 @@ Ledger::Ledger (const RippleAddress& masterID, uint64 startAmount)
, mCloseFlags (0)
, mClosed (false)
, mValidHash (false)
, mAccepted (false)
, mValidated (false)
, mImmutable (false)
, mTransactionMap (boost::make_shared <SHAMap> (smtTRANSACTION))
, mAccountStateMap (boost::make_shared <SHAMap> (smtSTATE))
@@ -59,7 +59,7 @@ Ledger::Ledger (uint256 const& parentHash,
, mCloseFlags (closeFlags)
, mClosed (false)
, mValidHash (false)
, mAccepted (false)
, mValidated (false)
, mImmutable (true)
, mTransactionMap (boost::make_shared <SHAMap> (smtTRANSACTION, transHash))
, mAccountStateMap (boost::make_shared <SHAMap> (smtSTATE, accountHash))
@@ -98,7 +98,7 @@ Ledger::Ledger (Ledger& ledger,
, mCloseFlags (ledger.mCloseFlags)
, mClosed (ledger.mClosed)
, mValidHash (false)
, mAccepted (ledger.mAccepted)
, mValidated (ledger.mValidated)
, mImmutable (!isMutable)
, mTransactionMap (ledger.mTransactionMap->snapShot (isMutable))
, mAccountStateMap (ledger.mAccountStateMap->snapShot (isMutable))
@@ -117,7 +117,7 @@ Ledger::Ledger (bool /* dummy */,
, mCloseFlags (0)
, mClosed (false)
, mValidHash (false)
, mAccepted (false)
, mValidated (true)
, mImmutable (false)
, mTransactionMap (boost::make_shared <SHAMap> (smtTRANSACTION))
, mAccountStateMap (prevLedger.mAccountStateMap->snapShot (true))
@@ -149,7 +149,7 @@ Ledger::Ledger (Blob const& rawLedger,
bool hasPrefix)
: mClosed (false)
, mValidHash (false)
, mAccepted (false)
, mValidated (false)
, mImmutable (true)
{
Serializer s (rawLedger);
@@ -160,7 +160,7 @@ Ledger::Ledger (Blob const& rawLedger,
}
Ledger::Ledger (const std::string& rawLedger, bool hasPrefix) :
mClosed (false), mValidHash (false), mAccepted (false), mImmutable (true)
mClosed (false), mValidHash (false), mValidated (false), mImmutable (true)
{
Serializer s (rawLedger);
setRaw (s, hasPrefix);
@@ -243,11 +243,10 @@ void Ledger::addRaw (Serializer& s) const
void Ledger::setAccepted (uint32 closeTime, int closeResolution, bool correctCloseTime)
{
// used when we witnessed the consensus
assert (mClosed && !mAccepted);
assert (mClosed);
mCloseTime = correctCloseTime ? roundCloseTime (closeTime, closeResolution) : closeTime;
mCloseResolution = closeResolution;
mCloseFlags = correctCloseTime ? 0 : sLCF_NoConsensusTime;
mAccepted = true;
setImmutable ();
}
@@ -258,7 +257,6 @@ void Ledger::setAccepted ()
if ((mCloseFlags & sLCF_NoConsensusTime) == 0)
mCloseTime = roundCloseTime (mCloseTime, mCloseResolution);
mAccepted = true;
setImmutable ();
}
@@ -499,9 +497,9 @@ uint256 Ledger::getHash ()
return mHash;
}
void Ledger::saveAcceptedLedger (Job&, bool fromConsensus)
void Ledger::saveValidatedLedger (Job&)
{
WriteLog (lsTRACE, Ledger) << "saveAcceptedLedger " << (fromConsensus ? "fromConsensus " : "fromAcquire ") << getLedgerSeq ();
WriteLog (lsTRACE, Ledger) << "saveValidatedLedger ";
static boost::format deleteLedger ("DELETE FROM Ledgers WHERE LedgerSeq = %u;");
static boost::format deleteTrans1 ("DELETE FROM Transactions WHERE LedgerSeq = %u;");
static boost::format deleteTrans2 ("DELETE FROM AccountTransactions WHERE LedgerSeq = %u;");
@@ -522,7 +520,7 @@ void Ledger::saveAcceptedLedger (Job&, bool fromConsensus)
if (getAccountHash () != mAccountStateMap->getHash ())
{
WriteLog (lsFATAL, Ledger) << "sAL: " << getAccountHash () << " != " << mAccountStateMap->getHash ();
WriteLog (lsFATAL, Ledger) << "saveAcceptedLedger: seq=" << mLedgerSeq << ", fromcons=" << fromConsensus;
WriteLog (lsFATAL, Ledger) << "saveValidatedLedger: seq=" << mLedgerSeq;
assert (false);
}
@@ -607,9 +605,6 @@ void Ledger::saveAcceptedLedger (Job&, bool fromConsensus)
mCloseResolution % mCloseFlags % mAccountHash.GetHex () % mTransHash.GetHex ()));
}
if (!fromConsensus && (getConfig ().NODE_SIZE < 2)) // tiny or small
dropCache ();
if (getApp().getJobQueue ().getJobCountTotal (jtPUBOLDLEDGER) < 2)
getApp().getLedgerMaster ().resumeAcquiring ();
else
@@ -733,11 +728,9 @@ Ledger::pointer Ledger::getSQL (const std::string& sql)
if (!loaded)
return Ledger::pointer ();
ret->setValidated ();
ret->setClosed ();
if (getApp().getOPs ().haveLedger (ledgerSeq))
ret->setAccepted ();
if (ret->getHash () != ledgerHash)
{
if (ShouldLog (lsERROR, Ledger))
@@ -801,9 +794,7 @@ void Ledger::getSQL2 (Ledger::ref ret)
{
ret->setClosed ();
ret->setImmutable ();
if (getApp().getOPs ().haveLedger (ret->getLedgerSeq ()))
ret->setAccepted ();
ret->setValidated ();
WriteLog (lsTRACE, Ledger) << "Loaded ledger: " << ret->getHash ().GetHex ();
}
@@ -960,7 +951,7 @@ Json::Value Ledger::getJson (int options)
ledger["ledger_hash"] = mHash.GetHex ();
ledger["transaction_hash"] = mTransHash.GetHex ();
ledger["account_hash"] = mAccountHash.GetHex ();
ledger["accepted"] = mAccepted;
ledger["validated"] = mValidated;
ledger["total_coins"] = boost::lexical_cast<std::string> (mTotCoins);
if (mCloseTime != 0)
@@ -1804,17 +1795,19 @@ uint32 Ledger::roundCloseTime (uint32 closeTime, uint32 closeResolution)
return closeTime - (closeTime % closeResolution);
}
void Ledger::pendSave (bool fromConsensus)
void Ledger::pendSaveValidated ()
{
if (!fromConsensus && !getApp().getHashRouter ().setFlag (getHash (), SF_SAVED))
if (getApp().getHashRouter ().setFlag (getHash (), SF_SAVED))
return;
assert (isImmutable ());
assert (isImmutable() && isValidated());
bool isNew = getLedgerSeq() > getApp().getLedgerMaster().getPublishedLedger()->getLedgerSeq();
getApp().getJobQueue ().addJob (
fromConsensus ? jtPUBLEDGER : jtPUBOLDLEDGER,
fromConsensus ? "Ledger::pendSave" : "Ledger::pendOldSave",
BIND_TYPE (&Ledger::saveAcceptedLedger, shared_from_this (), P_1, fromConsensus));
isNew ? jtPUBLEDGER : jtPUBOLDLEDGER,
isNew ? "Ledger::pendSave" : "Ledger::pendOldSave",
BIND_TYPE (&Ledger::saveValidatedLedger, shared_from_this (), P_1));
}