Bugfix. New LedgerAcquire not added to hash.

This commit is contained in:
JoelKatz
2012-05-10 16:04:45 -07:00
parent 97820c0cc5
commit a958c40e98

View File

@@ -8,11 +8,16 @@
LedgerAcquire::LedgerAcquire(const uint256& hash) : mHash(hash), LedgerAcquire::LedgerAcquire(const uint256& hash) : mHash(hash),
mComplete(false), mFailed(false), mHaveBase(false), mHaveState(false), mHaveTransactions(false) mComplete(false), mFailed(false), mHaveBase(false), mHaveState(false), mHaveTransactions(false)
{ {
; #ifdef DEBUG
std::cerr << "Acquiring ledger " << mHash.GetHex() << std::endl;
#endif
} }
void LedgerAcquire::done() void LedgerAcquire::done()
{ {
#ifdef DEBUG
std::cerr << "Done acquiring ledger " << mHash.GetHex() << std::endl;
#endif
std::vector< boost::function<void (LedgerAcquire::pointer)> > triggers; std::vector< boost::function<void (LedgerAcquire::pointer)> > triggers;
mLock.lock(); mLock.lock();
@@ -44,10 +49,16 @@ void LedgerAcquire::addOnComplete(boost::function<void (LedgerAcquire::pointer)>
void LedgerAcquire::trigger(bool timer) void LedgerAcquire::trigger(bool timer)
{ {
#ifdef DEBUG
std::cerr << "Trigger acquiring ledger " << mHash.GetHex() << std::endl;
#endif
if (mComplete || mFailed) return; if (mComplete || mFailed) return;
if (!mHaveBase) if (!mHaveBase)
{ {
#ifdef DEBUG
std::cerr << "need base" << std::endl;
#endif
boost::shared_ptr<newcoin::TMGetLedger> tmGL = boost::make_shared<newcoin::TMGetLedger>(); boost::shared_ptr<newcoin::TMGetLedger> tmGL = boost::make_shared<newcoin::TMGetLedger>();
tmGL->set_ledgerhash(mHash.begin(), mHash.size()); tmGL->set_ledgerhash(mHash.begin(), mHash.size());
tmGL->set_itype(newcoin::liBASE); tmGL->set_itype(newcoin::liBASE);
@@ -56,6 +67,9 @@ void LedgerAcquire::trigger(bool timer)
if (mHaveBase && !mHaveTransactions) if (mHaveBase && !mHaveTransactions)
{ {
#ifdef DEBUG
std::cerr << "need tx" << std::endl;
#endif
assert(mLedger); assert(mLedger);
if (mLedger->peekTransactionMap()->getHash().isZero()) if (mLedger->peekTransactionMap()->getHash().isZero())
{ // we need the root node { // we need the root node
@@ -95,6 +109,9 @@ void LedgerAcquire::trigger(bool timer)
if (mHaveBase && !mHaveState) if (mHaveBase && !mHaveState)
{ {
#ifdef DEBUG
std::cerr << "need as" << std::endl;
#endif
assert(mLedger); assert(mLedger);
if (mLedger->peekAccountStateMap()->getHash().isZero()) if (mLedger->peekAccountStateMap()->getHash().isZero())
{ // we need the root node { // we need the root node
@@ -200,6 +217,9 @@ void LedgerAcquire::badPeer(Peer::pointer ptr)
bool LedgerAcquire::takeBase(const std::string& data) bool LedgerAcquire::takeBase(const std::string& data)
{ // Return value: true=normal, false=bad data { // Return value: true=normal, false=bad data
#ifdef DEBUG
std::cerr << "got base acquiring ledger " << mHash.GetHex() << std::endl;
#endif
boost::recursive_mutex::scoped_lock sl(mLock); boost::recursive_mutex::scoped_lock sl(mLock);
if (mHaveBase) return true; if (mHaveBase) return true;
mLedger = boost::make_shared<Ledger>(data); mLedger = boost::make_shared<Ledger>(data);
@@ -235,6 +255,9 @@ bool LedgerAcquire::takeTxNode(const std::list<SHAMapNode>& nodeIDs,
bool LedgerAcquire::takeAsNode(const std::list<SHAMapNode>& nodeIDs, bool LedgerAcquire::takeAsNode(const std::list<SHAMapNode>& nodeIDs,
const std::list<std::vector<unsigned char> >& data) const std::list<std::vector<unsigned char> >& data)
{ {
#ifdef DEBUG
std::cerr << "got ASdata acquiring ledger " << mHash.GetHex() << std::endl;
#endif
if (!mHaveBase) return false; if (!mHaveBase) return false;
std::list<SHAMapNode>::const_iterator nodeIDit = nodeIDs.begin(); std::list<SHAMapNode>::const_iterator nodeIDit = nodeIDs.begin();
std::list<std::vector<unsigned char> >::const_iterator nodeDatait = data.begin(); std::list<std::vector<unsigned char> >::const_iterator nodeDatait = data.begin();
@@ -253,8 +276,13 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash)
{ {
boost::mutex::scoped_lock sl(mLock); boost::mutex::scoped_lock sl(mLock);
LedgerAcquire::pointer& ptr = mLedgers[hash]; LedgerAcquire::pointer& ptr = mLedgers[hash];
if (ptr) return ptr; if (ptr)
return boost::make_shared<LedgerAcquire>(hash); {
ptr->trigger();
return ptr;
}
ptr = boost::make_shared<LedgerAcquire>(hash);
return ptr;
} }
LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash) LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash)
@@ -279,9 +307,21 @@ bool LedgerAcquireMaster::dropLedger(const uint256& hash)
bool LedgerAcquireMaster::gotLedgerData(newcoin::TMLedgerData& packet) bool LedgerAcquireMaster::gotLedgerData(newcoin::TMLedgerData& packet)
{ {
#ifdef DEBUG
std::cerr << "got data for acquiring ledger ";
#endif
uint256 hash; uint256 hash;
if (packet.ledgerhash().size() != 32) return false; if (packet.ledgerhash().size() != 32)
{
#ifdef DEBUG
std::cerr << "error" << std::endl;
#endif
return false;
}
memcpy(&hash, packet.ledgerhash().data(), 32); memcpy(&hash, packet.ledgerhash().data(), 32);
#ifdef DEBUG
std::cerr << hash.GetHex() << std::endl;
#endif
LedgerAcquire::pointer ledger=find(hash); LedgerAcquire::pointer ledger=find(hash);
if (!ledger) return false; if (!ledger) return false;