@@ -145,21 +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 ! ( "Listener {} now has {} active version(s)" , listener_name, self . listener_handles . get ( & listener_name ) . unwrap ( ) . len( ) ) ;
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( ) ) ;
151
151
152
152
Ok ( ( ) )
153
153
}
154
154
155
155
pub fn stop_listener ( & mut self , listener_name : & str ) -> Result < ( ) > {
156
- if let Some ( listeners) = self . listener_handles . get_mut ( listener_name) {
156
+ if let Some ( listeners) = self . listener_handles . remove ( listener_name) {
157
157
info ! ( "Stopping all {} version(s) of listener {}" , listeners. len( ) , listener_name) ;
158
- for listener_info in listeners. drain ( .. ) {
158
+ for listener_info in listeners {
159
159
info ! ( "Stopping listener {} version {}" , listener_name, listener_info. version) ;
160
160
listener_info. handle . abort ( ) ;
161
161
}
162
- self . listener_handles . remove ( listener_name) ;
163
162
} else {
164
163
info ! ( "No listeners found with name {}" , listener_name) ;
165
164
}
@@ -179,6 +178,19 @@ mod tests {
179
178
use orion_configuration:: config:: Listener as ListenerConfig ;
180
179
use tracing_test:: traced_test;
181
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
+
182
194
#[ traced_test]
183
195
#[ tokio:: test]
184
196
async fn start_listener_dup ( ) {
@@ -277,50 +289,23 @@ mod tests {
277
289
let ( routeb_tx1, routeb_rx) = broadcast:: channel ( chan) ;
278
290
let ( _secb_tx1, secb_rx) = broadcast:: channel ( chan) ;
279
291
let l1 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
280
- let l1_info = ListenerConfig {
281
- name : name. into ( ) ,
282
- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1234 ) ,
283
- filter_chains : HashMap :: default ( ) ,
284
- bind_device : None ,
285
- with_tls_inspector : false ,
286
- proxy_protocol_config : None ,
287
- with_tlv_listener_filter : false ,
288
- tlv_listener_filter_config : None ,
289
- } ;
292
+ let l1_info = create_test_listener_config ( name, 1234 ) ;
290
293
man. start_listener ( l1, l1_info) . unwrap ( ) ;
291
294
assert ! ( routeb_tx1. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
292
295
tokio:: task:: yield_now ( ) . await ;
293
296
294
297
let ( routeb_tx2, routeb_rx) = broadcast:: channel ( chan) ;
295
298
let ( _secb_tx2, secb_rx) = broadcast:: channel ( chan) ;
296
299
let l2 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
297
- let l2_info = ListenerConfig {
298
- name : name. into ( ) ,
299
- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1235 ) , // Different port
300
- filter_chains : HashMap :: default ( ) ,
301
- bind_device : None ,
302
- with_tls_inspector : false ,
303
- proxy_protocol_config : None ,
304
- with_tlv_listener_filter : false ,
305
- tlv_listener_filter_config : None ,
306
- } ;
300
+ let l2_info = create_test_listener_config ( name, 1235 ) ;
307
301
man. start_listener ( l2, l2_info) . unwrap ( ) ;
308
302
assert ! ( routeb_tx2. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
309
303
tokio:: task:: yield_now ( ) . await ;
310
304
311
305
let ( routeb_tx3, routeb_rx) = broadcast:: channel ( chan) ;
312
306
let ( _secb_tx3, secb_rx) = broadcast:: channel ( chan) ;
313
307
let l3 = Listener :: test_listener ( name, routeb_rx, secb_rx) ;
314
- let l3_info = ListenerConfig {
315
- name : name. into ( ) ,
316
- address : SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) , 1236 ) , // Different port
317
- filter_chains : HashMap :: default ( ) ,
318
- bind_device : None ,
319
- with_tls_inspector : false ,
320
- proxy_protocol_config : None ,
321
- with_tlv_listener_filter : false ,
322
- tlv_listener_filter_config : None ,
323
- } ;
308
+ let l3_info = create_test_listener_config ( name, 1236 ) ;
324
309
man. start_listener ( l3, l3_info) . unwrap ( ) ;
325
310
assert ! ( routeb_tx3. send( RouteConfigurationChange :: Removed ( "n/a" . into( ) ) ) . is_ok( ) ) ;
326
311
tokio:: task:: yield_now ( ) . await ;
0 commit comments