![]() |
Bitcoin ABC 0.32.4
P2P Digital Currency
|
Actual implementation for InvRequestTracker's data structure. More...
Public Member Functions | |
| void | SanityCheck () const |
| void | PostGetRequestableSanityCheck (std::chrono::microseconds now) const |
| InvRequestTrackerImpl (bool deterministic) | |
| InvRequestTrackerImpl (const InvRequestTrackerImpl &)=delete | |
| InvRequestTrackerImpl & | operator= (const InvRequestTrackerImpl &)=delete |
| ~InvRequestTrackerImpl ()=default | |
| void | DisconnectedPeer (NodeId peer) |
| void | ForgetInvId (const uint256 &invid) |
| void | ReceivedInv (NodeId peer, const uint256 &invid, bool preferred, std::chrono::microseconds reqtime) |
| std::vector< uint256 > | GetRequestable (NodeId peer, std::chrono::microseconds now, ClearExpiredFun clearExpired, EmplaceExpiredFun emplaceExpired) |
| Find the InvIds to request now from peer. More... | |
| void | RequestedData (NodeId peer, const uint256 &invid, std::chrono::microseconds expiry) |
| void | ReceivedResponse (NodeId peer, const uint256 &invid) |
| size_t | CountInFlight (NodeId peer) const |
| size_t | CountCandidates (NodeId peer) const |
| size_t | Count (NodeId peer) const |
| size_t | Size () const |
| Count how many announcements are being tracked in total across all peers and transactions. More... | |
| uint64_t | ComputePriority (const uint256 &invid, NodeId peer, bool preferred) const |
Public Member Functions inherited from InvRequestTrackerImplInterface | |
| virtual | ~InvRequestTrackerImplInterface ()=default |
| virtual void | ReceivedInv (NodeId peer, const uint256 &invid, bool preferred, std::chrono::microseconds reqtime)=0 |
| virtual void | DisconnectedPeer (NodeId peer)=0 |
| virtual void | ForgetInvId (const uint256 &invid)=0 |
| virtual std::vector< uint256 > | GetRequestable (NodeId peer, std::chrono::microseconds now, ClearExpiredFun clearExpired, EmplaceExpiredFun emplaceExpired)=0 |
| virtual void | RequestedData (NodeId peer, const uint256 &invid, std::chrono::microseconds expiry)=0 |
| virtual void | ReceivedResponse (NodeId peer, const uint256 &invid)=0 |
| virtual size_t | CountInFlight (NodeId peer) const =0 |
| virtual size_t | CountCandidates (NodeId peer) const =0 |
| virtual size_t | Count (NodeId peer) const =0 |
| virtual size_t | Size () const =0 |
| virtual uint64_t | ComputePriority (const uint256 &invid, NodeId peer, bool preferred) const =0 |
| virtual void | SanityCheck () const =0 |
| virtual void | PostGetRequestableSanityCheck (std::chrono::microseconds now) const =0 |
Private Member Functions | |
| template<typename Tag > | |
| Iter< Tag > | Erase (Iter< Tag > it) |
| Wrapper around Index::...::erase that keeps m_peerinfo up to date. More... | |
| template<typename Tag , typename Modifier > | |
| void | Modify (Iter< Tag > it, Modifier modifier) |
| Wrapper around Index::...::modify that keeps m_peerinfo up to date. More... | |
| void | PromoteCandidateReady (Iter< ByInvId > it) |
| Convert a CANDIDATE_DELAYED announcement into a CANDIDATE_READY. More... | |
| void | ChangeAndReselect (Iter< ByInvId > it, State new_state) |
| Change the state of an announcement to something non-IsSelected(). More... | |
| bool | IsOnlyNonCompleted (Iter< ByInvId > it) |
| Check if 'it' is the only announcement for a given invid that isn't COMPLETED. More... | |
| bool | MakeCompleted (Iter< ByInvId > it) |
| Convert any announcement to a COMPLETED one. More... | |
| void | SetTimePoint (std::chrono::microseconds now, ClearExpiredFun clearExpired, EmplaceExpiredFun emplaceExpired) |
| Make the data structure consistent with a given point in time: More... | |
Private Attributes | |
| SequenceNumber | m_current_sequence {0} |
| The current sequence number. More... | |
| const PriorityComputer | m_computer |
| This tracker's priority computer. More... | |
| Index | m_index |
| This tracker's main data structure. More... | |
| std::unordered_map< NodeId, PeerInfo > | m_peerinfo |
| Map with this tracker's per-peer statistics. More... | |
Additional Inherited Members | |
Public Types inherited from InvRequestTrackerImplInterface | |
| using | ClearExpiredFun = const std::function< void()> & |
| using | EmplaceExpiredFun = const std::function< void(const NodeId &, const uint256 &)> & |
Actual implementation for InvRequestTracker's data structure.
Definition at line 353 of file invrequest.cpp.
|
inlineexplicit |
Definition at line 620 of file invrequest.cpp.
|
delete |
|
default |
|
inlineprivate |
Change the state of an announcement to something non-IsSelected().
If it was IsSelected(), the next best announcement will be marked CANDIDATE_BEST.
Definition at line 496 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 852 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 840 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 831 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 823 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 638 of file invrequest.cpp.
|
inlineprivate |
Wrapper around Index::...::erase that keeps m_peerinfo up to date.
Definition at line 430 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 680 of file invrequest.cpp.
|
inlinevirtual |
Find the InvIds to request now from peer.
Implements InvRequestTrackerImplInterface.
Definition at line 715 of file invrequest.cpp.
|
inlineprivate |
Check if 'it' is the only announcement for a given invid that isn't COMPLETED.
Definition at line 519 of file invrequest.cpp.
|
inlineprivate |
Convert any announcement to a COMPLETED one.
If there are no non-COMPLETED announcements left for this invid, they are deleted. If this was a REQUESTED announcement, and there are other CANDIDATEs left, the best one is made CANDIDATE_BEST. Returns whether the announcement still exists.
Definition at line 550 of file invrequest.cpp.
|
inlineprivate |
Wrapper around Index::...::modify that keeps m_peerinfo up to date.
Definition at line 442 of file invrequest.cpp.
|
delete |
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 411 of file invrequest.cpp.
|
inlineprivate |
Convert a CANDIDATE_DELAYED announcement into a CANDIDATE_READY.
If this makes it the new best CANDIDATE_READY (and no REQUESTED exists) and better than the CANDIDATE_BEST (if any), it becomes the new CANDIDATE_BEST.
Definition at line 455 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 688 of file invrequest.cpp.
Implements InvRequestTrackerImplInterface.
Definition at line 811 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 748 of file invrequest.cpp.
|
inlinevirtual |
Implements InvRequestTrackerImplInterface.
Definition at line 369 of file invrequest.cpp.
|
inlineprivate |
Make the data structure consistent with a given point in time:
Definition at line 582 of file invrequest.cpp.
|
inlinevirtual |
Count how many announcements are being tracked in total across all peers and transactions.
Implements InvRequestTrackerImplInterface.
Definition at line 850 of file invrequest.cpp.
|
private |
This tracker's priority computer.
Definition at line 359 of file invrequest.cpp.
|
private |
The current sequence number.
Increases for every announcement. This is used to sort invid returned by GetRequestable in announcement order.
Definition at line 356 of file invrequest.cpp.
|
private |
This tracker's main data structure.
See SanityCheck() for the invariants that apply to it.
Definition at line 363 of file invrequest.cpp.
|
private |
Map with this tracker's per-peer statistics.
Definition at line 366 of file invrequest.cpp.