Merge #19322: [net] split PushInventory()
f52d403b81
[net] split PushInventory() (John Newbery) Pull request description: PushInventory() is currently called with a CInv object, which can be a MSG_TX or MSG_BLOCK. PushInventory() only uses the type to determine whether to add the hash to setInventoryTxToSend or vInventoryBlockToSend. Since the caller always knows what type of inventory they're pushing, the CInv is wastefully constructed and thrown away, and tx/block relay is being split out, we split the function into PushTxInventory() and PushBlockInventory(). ACKs for top commit: amitiuttarwar: utACKf52d403b81
. nice cleanup, this has bothered me :) naumenkogs: utACKf52d403
sipa: utACKf52d403b81
Tree-SHA512: 331495199a3b1a2620e6a62beb336e494291b725d8fd64bb44726c02e80807f3974ff4f329bb0f059088e65cd7d41eff276c1065806d2dd6e72c5a9f368e82cd
This commit is contained in:
commit
0101110f9b
2 changed files with 16 additions and 15 deletions
20
src/net.h
20
src/net.h
|
@ -973,19 +973,21 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void PushInventory(const CInv& inv)
|
||||
void PushTxInventory(const uint256& hash)
|
||||
{
|
||||
if (inv.type == MSG_TX && m_tx_relay != nullptr) {
|
||||
LOCK(m_tx_relay->cs_tx_inventory);
|
||||
if (!m_tx_relay->filterInventoryKnown.contains(inv.hash)) {
|
||||
m_tx_relay->setInventoryTxToSend.insert(inv.hash);
|
||||
}
|
||||
} else if (inv.type == MSG_BLOCK) {
|
||||
LOCK(cs_inventory);
|
||||
vInventoryBlockToSend.push_back(inv.hash);
|
||||
if (m_tx_relay == nullptr) return;
|
||||
LOCK(m_tx_relay->cs_tx_inventory);
|
||||
if (!m_tx_relay->filterInventoryKnown.contains(hash)) {
|
||||
m_tx_relay->setInventoryTxToSend.insert(hash);
|
||||
}
|
||||
}
|
||||
|
||||
void PushBlockInventory(const uint256& hash)
|
||||
{
|
||||
LOCK(cs_inventory);
|
||||
vInventoryBlockToSend.push_back(hash);
|
||||
}
|
||||
|
||||
void PushBlockHash(const uint256 &hash)
|
||||
{
|
||||
LOCK(cs_inventory);
|
||||
|
|
|
@ -1419,10 +1419,9 @@ bool static AlreadyHave(const CInv& inv, const CTxMemPool& mempool) EXCLUSIVE_LO
|
|||
|
||||
void RelayTransaction(const uint256& txid, const CConnman& connman)
|
||||
{
|
||||
CInv inv(MSG_TX, txid);
|
||||
connman.ForEachNode([&inv](CNode* pnode)
|
||||
connman.ForEachNode([&txid](CNode* pnode)
|
||||
{
|
||||
pnode->PushInventory(inv);
|
||||
pnode->PushTxInventory(txid);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1608,7 +1607,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||
// Trigger the peer node to send a getblocks request for the next batch of inventory
|
||||
if (inv.hash == pfrom.hashContinue)
|
||||
{
|
||||
// Bypass PushInventory, this must send even if redundant,
|
||||
// Bypass PushBlockInventory, this must send even if redundant,
|
||||
// and we want it right after the last block so they don't
|
||||
// wait for other stuff first.
|
||||
std::vector<CInv> vInv;
|
||||
|
@ -2657,7 +2656,7 @@ bool ProcessMessage(CNode& pfrom, const std::string& msg_type, CDataStream& vRec
|
|||
LogPrint(BCLog::NET, " getblocks stopping, pruned or too old block at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||
break;
|
||||
}
|
||||
pfrom.PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash()));
|
||||
pfrom.PushBlockInventory(pindex->GetBlockHash());
|
||||
if (--nLimit <= 0)
|
||||
{
|
||||
// When this block is requested, we'll send an inv that'll
|
||||
|
@ -4081,7 +4080,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
|
|||
|
||||
// If the peer's chain has this block, don't inv it back.
|
||||
if (!PeerHasHeader(&state, pindex)) {
|
||||
pto->PushInventory(CInv(MSG_BLOCK, hashToAnnounce));
|
||||
pto->PushBlockInventory(hashToAnnounce);
|
||||
LogPrint(BCLog::NET, "%s: sending inv peer=%d hash=%s\n", __func__,
|
||||
pto->GetId(), hashToAnnounce.ToString());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue