Status'd Peer Not Found (#2761)

## Issue Addressed

Users are experiencing `Status'd peer not found` errors

## Proposed Changes

Although I cannot reproduce this error, this is only one connection state change that is not addressed in the peer manager (that I could see). The error occurs because the number of disconnected peers in the peerdb becomes out of sync with the actual number of disconnected peers. From what I can tell almost all possible connection state changes are handled, except for the case when a disconnected peer changes to be disconnecting. This can potentially happen at the peer connection limit, where a previously connected peer switches to disconnecting. 

This PR decrements the disconnected counter when this event occurs and from what I can tell, covers all possible disconnection state changes in the peer manager.
This commit is contained in:
Age Manning
2021-11-28 22:46:17 +00:00
parent 413b0b5b2b
commit 6625aa4afe
2 changed files with 36 additions and 27 deletions

View File

@@ -321,7 +321,7 @@ impl<T: EthSpec> PeerInfo<T> {
/// Modifies the status to Dialing
/// Returns an error if the current state is unexpected.
pub(super) fn dialing_peer(&mut self) -> Result<(), &'static str> {
pub(super) fn set_dialing_peer(&mut self) -> Result<(), &'static str> {
match &mut self.connection_status {
Connected { .. } => return Err("Dialing connected peer"),
Dialing { .. } => return Err("Dialing an already dialing peer"),