diff --git a/libethereum/Client.cpp b/libethereum/Client.cpp index 8064e7e9f..7560f9165 100644 --- a/libethereum/Client.cpp +++ b/libethereum/Client.cpp @@ -673,10 +673,10 @@ void Client::onChainChanged(ImportRoute const& _ir) // insert transactions that we are declaring the dead part of the chain for (auto const& h: _ir.deadBlocks) { - clog(ClientNote) << "Dead block:" << h; + clog(ClientTrace) << "Dead block:" << h; for (auto const& t: m_bc.transactions(h)) { - clog(ClientNote) << "Resubmitting dead-block transaction " << Transaction(t, CheckTransaction::None); + clog(ClientTrace) << "Resubmitting dead-block transaction " << Transaction(t, CheckTransaction::None); m_tq.import(t, TransactionQueue::ImportCallback(), IfDropped::Retry); } } @@ -684,10 +684,10 @@ void Client::onChainChanged(ImportRoute const& _ir) // remove transactions from m_tq nicely rather than relying on out of date nonce later on. for (auto const& h: _ir.liveBlocks) { - clog(ClientChat) << "Live block:" << h; + clog(ClientTrace) << "Live block:" << h; for (auto const& th: m_bc.transactionHashes(h)) { - clog(ClientNote) << "Safely dropping transaction " << th; + clog(ClientTrace) << "Safely dropping transaction " << th; m_tq.drop(th); } } @@ -723,7 +723,7 @@ void Client::onChainChanged(ImportRoute const& _ir) DEV_READ_GUARDED(x_postMine) for (auto const& t: m_postMine.pending()) { - clog(ClientNote) << "Resubmitting post-mine transaction " << t; + clog(ClientTrace) << "Resubmitting post-mine transaction " << t; auto ir = m_tq.import(t, TransactionQueue::ImportCallback(), IfDropped::Retry); if (ir != ImportResult::Success) onTransactionQueueReady(); diff --git a/libethereum/EthereumHost.cpp b/libethereum/EthereumHost.cpp index 152c20e69..f693ff768 100644 --- a/libethereum/EthereumHost.cpp +++ b/libethereum/EthereumHost.cpp @@ -296,7 +296,7 @@ void EthereumHost::onPeerTransactions(EthereumPeer* _peer, RLP const& _r) unsigned itemCount = _r.itemCount(); clog(NetAllDetail) << "Transactions (" << dec << itemCount << "entries)"; Guard l(_peer->x_knownTransactions); - for (unsigned i = 0; i < itemCount; ++i) + for (unsigned i = 0; i < min(itemCount, 256); ++i) // process 256 transactions at most. TODO: much better solution. { auto h = sha3(_r[i].data()); _peer->m_knownTransactions.insert(h); diff --git a/libethereum/EthereumPeer.cpp b/libethereum/EthereumPeer.cpp index 86e2a070d..87d51969a 100644 --- a/libethereum/EthereumPeer.cpp +++ b/libethereum/EthereumPeer.cpp @@ -37,6 +37,18 @@ using namespace dev; using namespace dev::eth; using namespace p2p; +string toString(Asking _a) +{ + switch (_a) + { + case Asking::Blocks: return "Blocks"; + case Asking::Hashes: return "Hashes"; + case Asking::Nothing: return "Nothing"; + case Asking::State: return "State"; + } + return "?"; +} + EthereumPeer::EthereumPeer(Session* _s, HostCapabilityFace* _h, unsigned _i, CapDesc const& _cap): Capability(_s, _h, _i), m_sub(host()->downloadMan()), @@ -49,6 +61,11 @@ EthereumPeer::EthereumPeer(Session* _s, HostCapabilityFace* _h, unsigned _i, Cap EthereumPeer::~EthereumPeer() { + if (m_asking != Asking::Nothing) + { + cnote << "Peer aborting while being asked for " << ::toString(m_asking); + setRude(); + } abortSync(); } @@ -65,7 +82,9 @@ unsigned EthereumPeer::askOverride() const void EthereumPeer::setRude() { + auto old = askOverride(); repMan().setData(*session(), name(), rlp(askOverride() / 2 + 1)); + cnote << "Rude behaviour; askOverride now" << askOverride() << ", was" << old; repMan().noteRude(*session(), name()); session()->addNote("manners", "RUDE"); } @@ -84,18 +103,6 @@ EthereumHost* EthereumPeer::host() const * Possible asking/syncing states for two peers: */ -string toString(Asking _a) -{ - switch (_a) - { - case Asking::Blocks: return "Blocks"; - case Asking::Hashes: return "Hashes"; - case Asking::Nothing: return "Nothing"; - case Asking::State: return "State"; - } - return "?"; -} - void EthereumPeer::setIdle() { setAsking(Asking::Nothing);