From 88ce129e82b6d93ba6bb8599d956373c662a9674 Mon Sep 17 00:00:00 2001
From: Georgy Moshkin <gmoshkin@picodata.io>
Date: Mon, 28 Nov 2022 11:48:39 +0300
Subject: [PATCH] fix(network): fail early when peer address isn't found

---
 src/traft/network.rs | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/traft/network.rs b/src/traft/network.rs
index f3a32533aa..c7203718a2 100644
--- a/src/traft/network.rs
+++ b/src/traft/network.rs
@@ -404,7 +404,12 @@ impl ConnectionPool {
                 let instance_id = self
                     .peers
                     .peer_field::<peer_field::InstanceId>(&raft_id)
-                    .map_err(|_| Error::NoPeerWithRaftId(raft_id)).ok();
+                    .map_err(|_| Error::NoPeerWithRaftId(raft_id))
+                    .ok();
+                // Check if address of this peer is known.
+                // No need to store the result,
+                // because it will be updated in the loop
+                let _ = self.peer_addresses.try_get(raft_id)?;
                 let worker = PoolWorker::run(
                     raft_id,
                     instance_id.clone(),
@@ -614,10 +619,12 @@ inventory::submit!(crate::InnerTest {
         );
 
         // Assert unknown recepient error
-        assert!(matches!(
-            pool.send(heartbeat_to_from(9999, 3)).unwrap_err(),
-            Error::NoPeerWithRaftId(9999)
-        ));
+        assert_eq!(
+            pool.send(heartbeat_to_from(9999, 3))
+                .unwrap_err()
+                .to_string(),
+            "address of peer with id 9999 not found",
+        );
 
         // Set up on_disconnect trigger
         let on_disconnect_cond = Rc::new(fiber::Cond::new());
-- 
GitLab