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

store: reduce LOC in hostlist queries and update usage.

also cleanup debug statements and warnings.
lunar-mining 2 лет назад
Родитель
Сommit
40619581cd
2 измененных файлов с 68 добавлено и 93 удалено
  1. 60 82
      src/net/hosts/store.rs
  2. 8 11
      src/net/session/mod.rs

+ 60 - 82
src/net/hosts/store.rs

@@ -39,7 +39,7 @@ use crate::{
         file::{load_file, save_file},
         path::expand_path,
     },
-    Error, Result,
+    Result,
 };
 
 /// Atomic pointer to hosts object
@@ -168,7 +168,7 @@ impl Hosts {
             hosts.push((addr, last_seen));
         }
 
-        debug!(target: "store::whitelist_fetch_address()",
+        trace!(target: "store::whitelist_fetch_address()",
         "Grabbed hosts, length: {}", hosts.len());
 
         // Randomize hosts list. Do not try to connect in a deterministic order.
@@ -214,7 +214,7 @@ impl Hosts {
             hosts.push((addr, last_seen));
         }
 
-        debug!(target: "store::anchorlist_fetch_address()",
+        trace!(target: "store::anchorlist_fetch_address()",
         "Grabbed hosts, length: {}", hosts.len());
 
         // Randomize hosts list. Do not try to connect in a deterministic order.
@@ -291,7 +291,7 @@ impl Hosts {
                 debug!(target: "store::greylist_store_or_update()",
                 "We have this entry in the greylist. Updating last seen...");
 
-                let index = self.get_greylist_index_at_addr(&addr).await?;
+                let index = self.get_greylist_index_at_addr(addr.clone()).await.unwrap();
                 self.greylist_update_last_seen(&addr, last_seen, index).await;
             }
         }
@@ -315,7 +315,7 @@ impl Hosts {
                 debug!(target: "store::whitelist_store_or_update()",
         "We have this entry in the whitelist. Updating last seen...");
 
-                let index = self.get_whitelist_index_at_addr(addr).await?;
+                let index = self.get_whitelist_index_at_addr(addr.clone()).await.unwrap();
                 self.whitelist_update_last_seen(addr, last_seen.clone(), index).await;
             }
         }
@@ -338,7 +338,7 @@ impl Hosts {
                 debug!(target: "store::anchorlist_store_or_update()",
         "We have this entry in the anchorlist. Updating last seen...");
 
-                let index = self.get_anchorlist_index_at_addr(addr).await?;
+                let index = self.get_anchorlist_index_at_addr(addr.clone()).await.unwrap();
                 self.anchorlist_update_last_seen(addr, last_seen.clone(), index).await;
             }
         }
@@ -376,7 +376,7 @@ impl Hosts {
             let last_entry = whitelist.pop().unwrap();
             debug!(target: "store::whitelist_store()", "Whitelist reached max size. Removed {:?}", last_entry);
         } else {
-            debug!(target: "store::whitelist_store()", "Inserting {}. Last seen {:?}", addr, last_seen);
+            trace!(target: "store::whitelist_store()", "Inserting {}. Last seen {:?}", addr, last_seen);
             whitelist.push((addr, last_seen));
 
             // Sort the list by last_seen.
@@ -392,7 +392,7 @@ impl Hosts {
 
         let mut anchorlist = self.anchorlist.write().await;
 
-        debug!(target: "store::anchorlist_store()", "Inserting {}", addr);
+        trace!(target: "store::anchorlist_store()", "Inserting {}", addr);
         anchorlist.push((addr, last_seen));
 
         // Sort the list by last_seen.
@@ -407,7 +407,16 @@ impl Hosts {
         if self.anchorlist_contains(addr).await {
             debug!(target: "net::store::downgrade_host()", 
                    "Removing non responsive peer from anchorlist");
-            let (index, entry) = self.get_anchorlist_entry_at_addr(addr).await?;
+
+            let index = self
+                .get_anchorlist_index_at_addr(addr.clone())
+                .await
+                .expect("Expected anchorlist index to exist");
+            let entry = self
+                .get_anchorlist_entry_at_addr(addr)
+                .await
+                .expect("Expected anchorlist entry to exist");
+
             self.anchorlist_remove(addr, index).await;
             self.greylist_store_or_update(&[entry]).await?;
 
@@ -415,7 +424,16 @@ impl Hosts {
         } else if self.whitelist_contains(addr).await {
             debug!(target: "net::store::downgrade_host()", 
                    "Removing non responsive peer from whitelist");
-            let (index, entry) = self.get_whitelist_entry_at_addr(addr).await?;
+
+            let index = self
+                .get_whitelist_index_at_addr(addr.clone())
+                .await
+                .expect("Expected whitelist index to exist");
+            let entry = self
+                .get_whitelist_entry_at_addr(addr)
+                .await
+                .expect("Expected whitelist entry to exist");
+
             self.whitelist_remove(addr, index).await;
             self.greylist_store_or_update(&[entry]).await?;
 
@@ -423,7 +441,12 @@ impl Hosts {
         } else {
             debug!(target: "net::store::downgrade_host()", 
                    "Removing non responsive peer from greylist");
-            let index = self.get_greylist_index_at_addr(addr).await?;
+
+            let index = self
+                .get_greylist_index_at_addr(addr.clone())
+                .await
+                .expect("Expected greylist index to exist");
+
             self.greylist_remove(addr, index).await;
 
             Ok(())
@@ -604,7 +627,7 @@ impl Hosts {
                     if tor_hscrypto::pk::HsId::from_str(host_str).is_err() {
                         continue
                     }
-                    debug!(target: "store::filter_addresses()", "[Tor] Valid: {}", host_str);
+                    trace!(target: "store::filter_addresses()", "[Tor] Valid: {}", host_str);
                 }
 
                 #[cfg(feature = "p2p-nym")]
@@ -612,7 +635,7 @@ impl Hosts {
 
                 #[cfg(feature = "p2p-tcp")]
                 "tcp" | "tcp+tls" => {
-                    debug!(target: "store::filter_addresses()", "[TCP] Valid: {}", host_str);
+                    trace!(target: "store::filter_addresses()", "[TCP] Valid: {}", host_str);
                 }
 
                 _ => continue,
@@ -686,98 +709,53 @@ impl Hosts {
         }
     }
 
-    // Check whether this peer is in any of the hostlists.
+    /// Check whether this peer is in any of the hostlists.
     async fn hostlist_contains(&self, addr: &Url) -> bool {
-        if self.greylist_contains(addr).await {
-            return true
-        } else if self.whitelist_contains(addr).await {
-            return true
-        } else if self.anchorlist_contains(addr).await {
-            return true
-        } else {
-            return false
-        }
+        self.greylist_contains(addr).await |
+            self.whitelist_contains(addr).await |
+            self.anchorlist_contains(addr).await
     }
 
     /// Check if host is in the greylist
     pub async fn greylist_contains(&self, addr: &Url) -> bool {
-        let greylist = self.greylist.read().await;
-        if greylist.iter().any(|(u, _t)| u == addr) {
-            return true
-        }
-        return false
+        self.greylist.read().await.iter().any(|(u, _t)| u == addr)
     }
 
     /// Check if host is in the whitelist
     pub async fn whitelist_contains(&self, addr: &Url) -> bool {
-        let whitelist = self.whitelist.read().await;
-        if whitelist.iter().any(|(u, _t)| u == addr) {
-            return true
-        }
-        return false
+        self.whitelist.read().await.iter().any(|(u, _t)| u == addr)
     }
 
     /// Check if host is in the anchorlist
     pub async fn anchorlist_contains(&self, addr: &Url) -> bool {
-        let anchorlist = self.anchorlist.read().await;
-        if anchorlist.iter().any(|(u, _t)| u == addr) {
-            return true
-        }
-        return false
+        self.anchorlist.read().await.iter().any(|(u, _t)| u == addr)
     }
 
     /// Get the index for a given addr on the greylist.
-    pub async fn get_greylist_index_at_addr(&self, addr: &Url) -> Result<usize> {
-        let greylist = self.greylist.read().await;
-        for (i, (url, _time)) in greylist.iter().enumerate() {
-            if url == addr {
-                return Ok(i)
-            }
-        }
-        return Err(Error::HostDoesNotExist)
+    pub async fn get_greylist_index_at_addr(&self, addr: Url) -> Option<usize> {
+        self.greylist.read().await.iter().position(|a| a.0 == addr)
     }
 
     /// Get the index for a given addr on the whitelist.
-    pub async fn get_whitelist_index_at_addr(&self, addr: &Url) -> Result<usize> {
-        let whitelist = self.whitelist.read().await;
-        for (i, (url, _time)) in whitelist.iter().enumerate() {
-            if url == addr {
-                return Ok(i)
-            }
-        }
-        return Err(Error::HostDoesNotExist)
+    pub async fn get_whitelist_index_at_addr(&self, addr: Url) -> Option<usize> {
+        self.whitelist.read().await.iter().position(|a| a.0 == addr)
     }
 
     /// Get the index for a given addr on the anchorlist.
-    pub async fn get_anchorlist_index_at_addr(&self, addr: &Url) -> Result<usize> {
-        let anchorlist = self.anchorlist.read().await;
-        for (i, (url, _time)) in anchorlist.iter().enumerate() {
-            if url == addr {
-                return Ok(i)
-            }
-        }
-        return Err(Error::HostDoesNotExist)
+    pub async fn get_anchorlist_index_at_addr(&self, addr: Url) -> Option<usize> {
+        self.whitelist.read().await.iter().position(|a| a.0 == addr)
     }
 
-    /// Get the index and entry for a given addr on the whitelist.
-    pub async fn get_whitelist_entry_at_addr(&self, addr: &Url) -> Result<(usize, (Url, u64))> {
+    /// Get the entry for a given addr on the whitelist.
+    pub async fn get_whitelist_entry_at_addr(&self, addr: &Url) -> Option<(Url, u64)> {
         let whitelist = self.whitelist.read().await;
-        for (i, (url, time)) in whitelist.iter().enumerate() {
-            if url == addr {
-                return Ok((i, (url.clone(), time.clone())))
-            }
-        }
-        return Err(Error::HostDoesNotExist)
+        whitelist.iter().find(|(url, _)| url == addr).map(|(url, time)| (url.clone(), *time))
     }
-    /// Get the index and entry for a given addr on the anchorlist.
-    pub async fn get_anchorlist_entry_at_addr(&self, addr: &Url) -> Result<(usize, (Url, u64))> {
+
+    /// Get the entry for a given addr on the anchorlist.
+    pub async fn get_anchorlist_entry_at_addr(&self, addr: &Url) -> Option<(Url, u64)> {
         let anchorlist = self.anchorlist.read().await;
-        for (i, (url, time)) in anchorlist.iter().enumerate() {
-            if url == addr {
-                return Ok((i, (url.clone(), time.clone())))
-            }
-        }
-        return Err(Error::HostDoesNotExist)
+        anchorlist.iter().find(|(url, _)| url == addr).map(|(url, time)| (url.clone(), *time))
     }
 
     /// Return all known whitelisted hosts
@@ -833,7 +811,7 @@ impl Hosts {
         // Retrieve all peers corresponding to that transport schemes
         let hosts = self.whitelist_fetch_with_schemes(schemes, None).await;
         if hosts.is_empty() {
-            debug!(target: "store::whitelist_fetch_n_random_with_schemes",
+            trace!(target: "store::whitelist_fetch_n_random_with_schemes",
                   "Whitelist is empty {:?}! Exiting...", hosts);
             return hosts
         }
@@ -957,7 +935,7 @@ impl Hosts {
         schemes: &[String],
         limit: Option<usize>,
     ) -> Vec<(Url, u64)> {
-        //debug!(target: "store::whitelist_fetch_with_schemes", "[START]");
+        debug!(target: "store::whitelist_fetch_with_schemes", "[START]");
         let mut ret = vec![];
 
         if !self.is_empty_whitelist().await {
@@ -973,7 +951,7 @@ impl Hosts {
                     ret.push((addr.clone(), *last_seen));
                     parsed_limit -= 1;
                     if parsed_limit == 0 {
-                        debug!(target: "store::whitelist_fetch_with_schemes",
+                        trace!(target: "store::whitelist_fetch_with_schemes",
                            "Found matching white scheme, returning {:?}", ret);
                         return ret
                     }
@@ -1020,7 +998,7 @@ impl Hosts {
                     ret.push((addr.clone(), *last_seen));
                     parsed_limit -= 1;
                     if parsed_limit == 0 {
-                        debug!(target: "store::anchorlist_fetch_with_schemes",
+                        trace!(target: "store::anchorlist_fetch_with_schemes",
                            "Found matching anchor scheme, returning {:?}", ret);
                         return ret
                     }

+ 8 - 11
src/net/session/mod.rs

@@ -22,7 +22,7 @@ use std::{
 };
 
 use async_trait::async_trait;
-use log::{debug, error};
+use log::{debug};
 use smol::Executor;
 
 use super::{channel::ChannelPtr, p2p::P2pPtr, protocol::ProtocolVersion};
@@ -49,7 +49,7 @@ pub type SessionWeakPtr = Weak<dyn Session + Send + Sync + 'static>;
 
 /// Removes channel from the list of connected channels when a stop signal
 /// is received.
-pub async fn remove_sub_on_stop(p2p: P2pPtr, channel: ChannelPtr, type_id: SessionBitFlag) {
+pub async fn remove_sub_on_stop(p2p: P2pPtr, channel: ChannelPtr) {
     debug!(target: "net::session::remove_sub_on_stop()", "[START]");
     // Subscribe to stop events
     let stop_sub = channel.clone().subscribe_stop().await;
@@ -64,14 +64,11 @@ pub async fn remove_sub_on_stop(p2p: P2pPtr, channel: ChannelPtr, type_id: Sessi
         "Received stop event. Removing channel {}", channel.address(),
     );
 
-    if type_id != SESSION_INBOUND {
-        match p2p.hosts().get_anchorlist_index_at_addr(channel.address()).await {
-            Ok(index) => p2p.hosts().anchorlist_remove(channel.address(), index).await,
-            Err(e) => {
-                error!(target: "net::session::remove_sub_on_stop()",
-                "Can't remove anchor connection {}", e)
-            }
-        }
+    // Remove channel from anchorlist
+    if p2p.hosts().anchorlist_contains(channel.address()).await {
+        let index =
+            p2p.hosts().get_anchorlist_index_at_addr(channel.address().clone()).await.unwrap();
+        p2p.hosts().anchorlist_remove(channel.address(), index).await;
     }
 
     // Remove channel from p2p
@@ -160,7 +157,7 @@ pub trait Session: Sync {
         self.p2p().store(channel.clone()).await;
 
         // Subscribe to stop, so we can remove from p2p
-        executor.spawn(remove_sub_on_stop(self.p2p(), channel, self.type_id())).detach();
+        executor.spawn(remove_sub_on_stop(self.p2p(), channel)).detach();
 
         // Channel is ready for use
         Ok(())