Skip to content

Commit 672c69c

Browse files
committed
[refactor] change per-peer workset to info map within orphanage
No change for now, moving from map of NodeId->workset to NodeId->PeerOrphanInfo struct that holds the workset. In future commits, we will start tracking more things per-peer in the orphanage.
1 parent 59cd0f0 commit 672c69c

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

src/txorphanage.cpp

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ int TxOrphanage::EraseTx(const Wtxid& wtxid)
103103

104104
void TxOrphanage::EraseForPeer(NodeId peer)
105105
{
106-
m_peer_work_set.erase(peer);
106+
m_peer_orphanage_info.erase(peer);
107107

108108
int nErased = 0;
109109
std::map<Wtxid, OrphanTx>::iterator iter = m_orphans.begin();
@@ -174,7 +174,7 @@ void TxOrphanage::AddChildrenToWorkSet(const CTransaction& tx, FastRandomContext
174174

175175
// Get this source peer's work set, emplacing an empty set if it didn't exist
176176
// (note: if this peer wasn't still connected, we would have removed the orphan tx already)
177-
std::set<Wtxid>& orphan_work_set = m_peer_work_set.try_emplace(announcer).first->second;
177+
std::set<Wtxid>& orphan_work_set = m_peer_orphanage_info.try_emplace(announcer).first->second.m_work_set;
178178
// Add this tx to the work set
179179
orphan_work_set.insert(elem->first);
180180
LogDebug(BCLog::TXPACKAGES, "added %s (wtxid=%s) to peer %d workset\n",
@@ -203,30 +203,29 @@ bool TxOrphanage::HaveTxFromPeer(const Wtxid& wtxid, NodeId peer) const
203203

204204
CTransactionRef TxOrphanage::GetTxToReconsider(NodeId peer)
205205
{
206-
auto work_set_it = m_peer_work_set.find(peer);
207-
if (work_set_it != m_peer_work_set.end()) {
208-
auto& work_set = work_set_it->second;
209-
while (!work_set.empty()) {
210-
Wtxid wtxid = *work_set.begin();
211-
work_set.erase(work_set.begin());
212-
213-
const auto orphan_it = m_orphans.find(wtxid);
214-
if (orphan_it != m_orphans.end()) {
215-
return orphan_it->second.tx;
216-
}
206+
auto peer_it = m_peer_orphanage_info.find(peer);
207+
if (peer_it == m_peer_orphanage_info.end()) return nullptr;
208+
209+
auto& work_set = peer_it->second.m_work_set;
210+
while (!work_set.empty()) {
211+
Wtxid wtxid = *work_set.begin();
212+
work_set.erase(work_set.begin());
213+
214+
const auto orphan_it = m_orphans.find(wtxid);
215+
if (orphan_it != m_orphans.end()) {
216+
return orphan_it->second.tx;
217217
}
218218
}
219219
return nullptr;
220220
}
221221

222222
bool TxOrphanage::HaveTxToReconsider(NodeId peer)
223223
{
224-
auto work_set_it = m_peer_work_set.find(peer);
225-
if (work_set_it != m_peer_work_set.end()) {
226-
auto& work_set = work_set_it->second;
227-
return !work_set.empty();
228-
}
229-
return false;
224+
auto peer_it = m_peer_orphanage_info.find(peer);
225+
if (peer_it == m_peer_orphanage_info.end()) return false;
226+
227+
auto& work_set = peer_it->second.m_work_set;
228+
return !work_set.empty();
230229
}
231230

232231
void TxOrphanage::EraseForBlock(const CBlock& block)

src/txorphanage.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,14 @@ class TxOrphanage {
109109
* -maxorphantx/DEFAULT_MAX_ORPHAN_TRANSACTIONS */
110110
std::map<Wtxid, OrphanTx> m_orphans;
111111

112-
/** Which peer provided the orphans that need to be reconsidered */
113-
std::map<NodeId, std::set<Wtxid>> m_peer_work_set;
112+
struct PeerOrphanInfo {
113+
/** List of transactions that should be reconsidered: added to in AddChildrenToWorkSet,
114+
* removed from one-by-one with each call to GetTxToReconsider. The wtxids may refer to
115+
* transactions that are no longer present in orphanage; these are lazily removed in
116+
* GetTxToReconsider. */
117+
std::set<Wtxid> m_work_set;
118+
};
119+
std::map<NodeId, PeerOrphanInfo> m_peer_orphanage_info;
114120

115121
using OrphanMap = decltype(m_orphans);
116122

0 commit comments

Comments
 (0)