Skip to content

Commit ea6cd88

Browse files
committed
refactor: improve efficiency and maintainability based on code review
- Optimize start_listener to avoid second hashmap lookup - Simplify stop_listener using remove() directly instead of get_mut + drain + remove - Extract duplicated test code into create_test_listener_config helper function - Improve code readability and performance Signed-off-by: Eeshu-Yadav <[email protected]>
1 parent e0c5d2a commit ea6cd88

File tree

1 file changed

+21
-40
lines changed

1 file changed

+21
-40
lines changed

orion-lib/src/listeners/listeners_manager.rs

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -145,25 +145,20 @@ impl ListenersManager {
145145

146146
let listener_info = ListenerInfo::new(join_handle, listener_conf, version);
147147

148-
self.listener_handles.entry(listener_name.clone()).or_insert_with(Vec::new).push(listener_info);
149-
150-
info!(
151-
"Listener {} now has {} active version(s)",
152-
listener_name,
153-
self.listener_handles.get(&listener_name).unwrap().len()
154-
);
148+
let versions = self.listener_handles.entry(listener_name.clone()).or_default();
149+
versions.push(listener_info);
150+
info!("Listener {} now has {} active version(s)", listener_name, versions.len());
155151

156152
Ok(())
157153
}
158154

159155
pub fn stop_listener(&mut self, listener_name: &str) -> Result<()> {
160-
if let Some(listeners) = self.listener_handles.get_mut(listener_name) {
156+
if let Some(listeners) = self.listener_handles.remove(listener_name) {
161157
info!("Stopping all {} version(s) of listener {}", listeners.len(), listener_name);
162-
for listener_info in listeners.drain(..) {
158+
for listener_info in listeners {
163159
info!("Stopping listener {} version {}", listener_name, listener_info.version);
164160
listener_info.handle.abort();
165161
}
166-
self.listener_handles.remove(listener_name);
167162
} else {
168163
info!("No listeners found with name {}", listener_name);
169164
}
@@ -183,6 +178,19 @@ mod tests {
183178
use orion_configuration::config::Listener as ListenerConfig;
184179
use tracing_test::traced_test;
185180

181+
fn create_test_listener_config(name: &str, port: u16) -> ListenerConfig {
182+
ListenerConfig {
183+
name: name.into(),
184+
address: SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port),
185+
filter_chains: HashMap::default(),
186+
bind_device: None,
187+
with_tls_inspector: false,
188+
proxy_protocol_config: None,
189+
with_tlv_listener_filter: false,
190+
tlv_listener_filter_config: None,
191+
}
192+
}
193+
186194
#[traced_test]
187195
#[tokio::test]
188196
async fn start_listener_dup() {
@@ -281,50 +289,23 @@ mod tests {
281289
let (routeb_tx1, routeb_rx) = broadcast::channel(chan);
282290
let (_secb_tx1, secb_rx) = broadcast::channel(chan);
283291
let l1 = Listener::test_listener(name, routeb_rx, secb_rx);
284-
let l1_info = ListenerConfig {
285-
name: name.into(),
286-
address: SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 1234),
287-
filter_chains: HashMap::default(),
288-
bind_device: None,
289-
with_tls_inspector: false,
290-
proxy_protocol_config: None,
291-
with_tlv_listener_filter: false,
292-
tlv_listener_filter_config: None,
293-
};
292+
let l1_info = create_test_listener_config(name, 1234);
294293
man.start_listener(l1, l1_info).unwrap();
295294
assert!(routeb_tx1.send(RouteConfigurationChange::Removed("n/a".into())).is_ok());
296295
tokio::task::yield_now().await;
297296

298297
let (routeb_tx2, routeb_rx) = broadcast::channel(chan);
299298
let (_secb_tx2, secb_rx) = broadcast::channel(chan);
300299
let l2 = Listener::test_listener(name, routeb_rx, secb_rx);
301-
let l2_info = ListenerConfig {
302-
name: name.into(),
303-
address: SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 1235), // Different port
304-
filter_chains: HashMap::default(),
305-
bind_device: None,
306-
with_tls_inspector: false,
307-
proxy_protocol_config: None,
308-
with_tlv_listener_filter: false,
309-
tlv_listener_filter_config: None,
310-
};
300+
let l2_info = create_test_listener_config(name, 1235);
311301
man.start_listener(l2, l2_info).unwrap();
312302
assert!(routeb_tx2.send(RouteConfigurationChange::Removed("n/a".into())).is_ok());
313303
tokio::task::yield_now().await;
314304

315305
let (routeb_tx3, routeb_rx) = broadcast::channel(chan);
316306
let (_secb_tx3, secb_rx) = broadcast::channel(chan);
317307
let l3 = Listener::test_listener(name, routeb_rx, secb_rx);
318-
let l3_info = ListenerConfig {
319-
name: name.into(),
320-
address: SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 1236), // Different port
321-
filter_chains: HashMap::default(),
322-
bind_device: None,
323-
with_tls_inspector: false,
324-
proxy_protocol_config: None,
325-
with_tlv_listener_filter: false,
326-
tlv_listener_filter_config: None,
327-
};
308+
let l3_info = create_test_listener_config(name, 1236);
328309
man.start_listener(l3, l3_info).unwrap();
329310
assert!(routeb_tx3.send(RouteConfigurationChange::Removed("n/a".into())).is_ok());
330311
tokio::task::yield_now().await;

0 commit comments

Comments
 (0)