Просмотр исходного кода

outbound_session: move host to greylist before suspending

This is necessary since it could be a gold or whitelist peer that hasn't
updated and so fails the version exchange. Marking a gold or whitelist
peer as Suspend wouldn't do anything since it would never make it to the
refinery.
draoi 2 лет назад
Родитель
Сommit
394ccc7b63
2 измененных файлов с 5 добавлено и 2 удалено
  1. 1 1
      src/net/hosts.rs
  2. 4 1
      src/net/session/outbound_session.rs

+ 1 - 1
src/net/hosts.rs

@@ -228,7 +228,7 @@ impl HostState {
         match self {
             HostState::Insert => Err(Error::HostStateBlocked(start, end)),
             HostState::Refine => Err(Error::HostStateBlocked(start, end)),
-            HostState::Connect => Ok(HostState::Suspend),
+            HostState::Connect => Err(Error::HostStateBlocked(start, end)),
             HostState::Suspend => Err(Error::HostStateBlocked(start, end)),
             HostState::Connected(_) => Err(Error::HostStateBlocked(start, end)),
             HostState::Move => Ok(HostState::Suspend),

+ 4 - 1
src/net/session/outbound_session.rs

@@ -423,10 +423,13 @@ impl Slot {
 
                 warn!(
                     target: "net::outbound_session::try_connect()",
-                    "[P2P] Suspending addr= [{}] slot #{}",
+                    "[P2P] Suspending addr=[{}] slot #{}",
                     addr, slot
                 );
 
+                // At this point we failed to connect. We'll downgrade this peer now.
+                self.p2p().hosts().move_host(&addr, last_seen, HostColor::Grey).await?;
+
                 // Mark its state as Suspend, which sends this node to the Refinery for processing.
                 self.p2p().hosts().try_register(addr.clone(), HostState::Suspend).await.unwrap();