فهرست منبع

Add socket for quic_alpenglow_client and utility functions for Alpenglow port. (#8655)

Wen 3 هفته پیش
والد
کامیت
29bf789d59
4فایلهای تغییر یافته به همراه40 افزوده شده و 8 حذف شده
  1. 17 8
      gossip/src/cluster_info.rs
  2. 18 0
      gossip/src/contact_info.rs
  3. 4 0
      gossip/src/node.rs
  4. 1 0
      validator/src/commands/run/execute.rs

+ 17 - 8
gossip/src/cluster_info.rs

@@ -570,7 +570,7 @@ impl ClusterInfo {
                     let ip_addr = node.gossip().as_ref().map(SocketAddr::ip);
                     Some(format!(
                         "{:15} {:2}| {:5} | {:44} |{:^9}| {:5}|  {:5}| {:5}| {:5}| {:5}| {:5}| \
-                         {:5}| {}\n",
+                         {:5}| {:5}| {}\n",
                         node.gossip()
                             .filter(|addr| self.socket_addr_space.check(addr))
                             .as_ref()
@@ -603,6 +603,7 @@ impl ClusterInfo {
                             &ip_addr,
                             &node.serve_repair(contact_info::Protocol::UDP)
                         ),
+                        self.addr_to_string(&ip_addr, &node.alpenglow()),
                         node.shred_version(),
                     ))
                 }
@@ -611,9 +612,9 @@ impl ClusterInfo {
 
         format!(
             "IP Address        |Age(ms)| Node identifier                              \
-             | Version |Gossip|TPUvote| TPU  |TPUfwd| TVU  |TVU Q |ServeR|ShredVer\n\
+             | Version |Gossip|TPUvote| TPU  |TPUfwd| TVU  |TVU Q |ServeR|Alpeng|ShredVer\n\
              ------------------+-------+----------------------------------------------\
-             +---------+------+-------+------+------+------+------+------+--------\n\
+             +---------+------+-------+------+------+------+------+------+------+--------\n\
              {}\
              Nodes: {}{}{}",
             nodes.join(""),
@@ -2391,6 +2392,8 @@ pub struct Sockets {
     pub alpenglow: Option<UdpSocket>,
     /// Connection cache endpoint for QUIC-based Vote
     pub quic_vote_client: UdpSocket,
+    /// Connection cache endpoint for QUIC-based Alpenglow messages
+    pub quic_alpenglow_client: UdpSocket,
     /// Client-side socket for RPC/SendTransactionService.
     pub rpc_sts_client: UdpSocket,
     pub vortexor_receivers: Option<Vec<UdpSocket>>,
@@ -2861,7 +2864,9 @@ mod tests {
     fn check_node_sockets(node: &Node, ip: IpAddr, range: (u16, u16)) {
         check_socket(&node.sockets.repair, ip, range);
         check_socket(&node.sockets.tvu_quic, ip, range);
-
+        if let Some(alpenglow_port) = &node.sockets.alpenglow {
+            check_socket(alpenglow_port, ip, range);
+        }
         check_sockets(&node.sockets.gossip, ip, range);
         check_sockets(&node.sockets.tvu, ip, range);
         check_sockets(&node.sockets.tpu, ip, range);
@@ -3765,6 +3770,10 @@ mod tests {
     #[test]
     fn test_contact_trace() {
         agave_logger::setup();
+        // If you change the format of cluster_info_trace or rpc_info_trace, please make sure
+        // you read the actual output so the headers lign up with the output.
+        const CLUSTER_INFO_TRACE_LENGTH: usize = 452;
+        const RPC_INFO_TRACE_LENGTH: usize = 335;
         let keypair43 = Arc::new(
             Keypair::try_from(
                 [
@@ -3805,19 +3814,19 @@ mod tests {
 
         let trace = cluster_info44.contact_info_trace();
         info!("cluster:\n{trace}");
-        assert_eq!(trace.len(), 431);
+        assert_eq!(trace.len(), CLUSTER_INFO_TRACE_LENGTH);
 
         let trace = cluster_info44.rpc_info_trace();
         info!("rpc:\n{trace}");
-        assert_eq!(trace.len(), 335);
+        assert_eq!(trace.len(), RPC_INFO_TRACE_LENGTH);
 
         let trace = cluster_info43.contact_info_trace();
         info!("cluster:\n{trace}");
-        assert_eq!(trace.len(), 431);
+        assert_eq!(trace.len(), CLUSTER_INFO_TRACE_LENGTH);
 
         let trace = cluster_info43.rpc_info_trace();
         info!("rpc:\n{trace}");
-        assert_eq!(trace.len(), 335);
+        assert_eq!(trace.len(), RPC_INFO_TRACE_LENGTH);
     }
 
     #[test]

+ 18 - 0
gossip/src/contact_info.rs

@@ -314,6 +314,7 @@ impl ContactInfo {
         SOCKET_TAG_TPU_FORWARDS_QUIC
     );
     remove_socket!(remove_tvu, SOCKET_TAG_TVU, SOCKET_TAG_TVU_QUIC);
+    remove_socket!(remove_alpenglow, SOCKET_TAG_ALPENGLOW);
 
     #[cfg(test)]
     fn get_socket(&self, key: u8) -> Result<SocketAddr, Error> {
@@ -1104,6 +1105,23 @@ mod tests {
         assert_matches!(node.tpu_forwards(Protocol::QUIC), None);
     }
 
+    #[test]
+    fn test_set_and_remove_alpenglow() {
+        let mut rng = rand::thread_rng();
+        let mut node = ContactInfo::new(
+            Keypair::new().pubkey(),
+            rng.gen(), // wallclock
+            rng.gen(), // shred_version
+        );
+        let socket = repeat_with(|| new_rand_socket(&mut rng))
+            .find(|socket| matches!(sanitize_socket(socket), Ok(())))
+            .unwrap();
+        node.set_alpenglow(socket).unwrap();
+        assert_eq!(node.alpenglow().unwrap(), socket);
+        node.remove_alpenglow();
+        assert_matches!(node.alpenglow(), None);
+    }
+
     #[test]
     fn test_check_duplicate() {
         let mut rng = rand::thread_rng();

+ 4 - 0
gossip/src/node.rs

@@ -282,6 +282,9 @@ impl Node {
         let (_, quic_vote_client) =
             bind_in_range_with_config(bind_ip_addr, port_range, socket_config).unwrap();
 
+        let (_, quic_alpenglow_client) =
+            bind_in_range_with_config(bind_ip_addr, port_range, socket_config).unwrap();
+
         let (_, rpc_sts_client) =
             bind_in_range_with_config(bind_ip_addr, port_range, socket_config).unwrap();
 
@@ -351,6 +354,7 @@ impl Node {
             tpu_vote_quic,
             tpu_vote_forwarding_client,
             quic_vote_client,
+            quic_alpenglow_client,
             tpu_transaction_forwarding_clients,
             rpc_sts_client,
             vortexor_receivers,

+ 1 - 0
validator/src/commands/run/execute.rs

@@ -873,6 +873,7 @@ pub fn execute(
         node.info.remove_tpu_forwards();
         node.info.remove_tvu();
         node.info.remove_serve_repair();
+        node.info.remove_alpenglow();
 
         // A node in this configuration shouldn't be an entrypoint to other nodes
         node.sockets.ip_echo = None;