@@ -145,25 +145,20 @@ impl ListenersManager {
145
145
146
146
let listener_info = ListenerInfo :: new ( join_handle, listener_conf, version) ;
147
147
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( ) ) ;
155
151
156
152
Ok ( ( ) )
157
153
}
158
154
159
155
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) {
161
157
info ! ( "Stopping all {} version(s) of listener {}" , listeners. len( ) , listener_name) ;
162
- for listener_info in listeners. drain ( .. ) {
158
+ for listener_info in listeners {
163
159
info ! ( "Stopping listener {} version {}" , listener_name, listener_info. version) ;
164
160
listener_info. handle . abort ( ) ;
165
161
}
166
- self . listener_handles . remove ( listener_name) ;
167
162
} else {
168
163
info ! ( "No listeners found with name {}" , listener_name) ;
169
164
}
@@ -183,6 +178,19 @@ mod tests {
183
178
use orion_configuration:: config:: Listener as ListenerConfig ;
184
179
use tracing_test:: traced_test;
185
180
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
+
186
194
#[ traced_test]
187
195
#[ tokio:: test]
188
196
async fn start_listener_dup ( ) {
@@ -281,50 +289,23 @@ mod tests {
281
289
let ( routeb_tx1, routeb_rx) = broadcast:: channel ( chan) ;
282
290
let ( _secb_tx1, secb_rx) = broadcast:: channel ( chan) ;
283
291
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 ) ;
294
293
man. start_listener ( l1, l1_info) . unwrap ( ) ;
295
294
assert ! ( routeb_tx1. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
296
295
tokio:: task:: yield_now ( ) . await ;
297
296
298
297
let ( routeb_tx2, routeb_rx) = broadcast:: channel ( chan) ;
299
298
let ( _secb_tx2, secb_rx) = broadcast:: channel ( chan) ;
300
299
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 ) ;
311
301
man. start_listener ( l2, l2_info) . unwrap ( ) ;
312
302
assert ! ( routeb_tx2. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
313
303
tokio:: task:: yield_now ( ) . await ;
314
304
315
305
let ( routeb_tx3, routeb_rx) = broadcast:: channel ( chan) ;
316
306
let ( _secb_tx3, secb_rx) = broadcast:: channel ( chan) ;
317
307
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 ) ;
328
309
man. start_listener ( l3, l3_info) . unwrap ( ) ;
329
310
assert ! ( routeb_tx3. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
330
311
tokio:: task:: yield_now ( ) . await ;
0 commit comments