@@ -91,8 +91,6 @@ impl DmqConsumerServerPallas {
91
91
}
92
92
93
93
/// Drops the current `DmqServer`, if it exists.
94
- // TODO: remove allow dead code
95
- #[ allow( dead_code) ]
96
94
async fn drop_server ( & self ) -> StdResult < ( ) > {
97
95
debug ! (
98
96
self . logger,
@@ -179,9 +177,9 @@ impl DmqConsumerServerPallas {
179
177
}
180
178
Err ( err) => {
181
179
error!( self . logger, "Failed to process message" ; "error" => ?err) ;
182
- /* if let Err(drop_err) = self.drop_server().await {
180
+ if let Err ( drop_err) = self . drop_server( ) . await {
183
181
error!( self . logger, "Failed to drop DMQ consumer server" ; "error" => ?drop_err) ;
184
- } */
182
+ }
185
183
}
186
184
}
187
185
}
@@ -197,15 +195,9 @@ impl DmqConsumerServer for DmqConsumerServerPallas {
197
195
self . logger,
198
196
"Waiting for message received from the DMQ network"
199
197
) ;
198
+
200
199
let mut server_guard = self . get_server ( ) . await ?;
201
200
let server = server_guard. as_mut ( ) . ok_or ( anyhow ! ( "DMQ server does not exist" ) ) ?;
202
-
203
- debug ! (
204
- self . logger,
205
- "DMQ Server state: {:?}" ,
206
- server. msg_notification( ) . state( )
207
- ) ;
208
-
209
201
let request = server
210
202
. msg_notification ( )
211
203
. recv_next_request ( )
@@ -253,7 +245,6 @@ impl DmqConsumerServer for DmqConsumerServerPallas {
253
245
Ok ( ( ) )
254
246
}
255
247
256
- /// Runs the DMQ publisher server, processing messages in a loop.
257
248
async fn run ( & self ) -> StdResult < ( ) > {
258
249
info ! (
259
250
self . logger,
@@ -273,6 +264,18 @@ impl DmqConsumerServer for DmqConsumerServerPallas {
273
264
}
274
265
}
275
266
267
+ impl Drop for DmqConsumerServerPallas {
268
+ fn drop ( & mut self ) {
269
+ tokio:: task:: block_in_place ( || {
270
+ tokio:: runtime:: Handle :: current ( ) . block_on ( async {
271
+ if let Err ( e) = self . drop_server ( ) . await {
272
+ error ! ( self . logger, "Failed to drop DMQ consumer server: {}" , e) ;
273
+ }
274
+ } ) ;
275
+ } ) ;
276
+ }
277
+ }
278
+
276
279
#[ cfg( test) ]
277
280
mod tests {
278
281
use std:: { sync:: Arc , time:: Duration } ;
@@ -306,7 +309,7 @@ mod tests {
306
309
}
307
310
}
308
311
309
- #[ tokio:: test]
312
+ #[ tokio:: test( flavor = "multi_thread" ) ]
310
313
async fn pallas_dmq_consumer_server_non_blocking_success ( ) {
311
314
let ( stop_tx, stop_rx) = watch:: channel ( ( ) ) ;
312
315
let ( signature_dmq_tx, signature_dmq_rx) = unbounded_channel :: < DmqMessage > ( ) ;
@@ -322,7 +325,8 @@ mod tests {
322
325
let message = fake_msg ( ) ;
323
326
let client = tokio:: spawn ( {
324
327
async move {
325
- tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
328
+ // sleep to avoid refused connection from the server
329
+ tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
326
330
327
331
// client setup
328
332
let mut client = DmqClient :: connect ( socket_path. clone ( ) , 0 ) . await . unwrap ( ) ;
@@ -364,7 +368,7 @@ mod tests {
364
368
assert_eq ! ( vec![ message] , messages_received) ;
365
369
}
366
370
367
- #[ tokio:: test]
371
+ #[ tokio:: test( flavor = "multi_thread" ) ]
368
372
async fn pallas_dmq_consumer_server_blocking_success ( ) {
369
373
let ( stop_tx, stop_rx) = watch:: channel ( ( ) ) ;
370
374
let ( signature_dmq_tx, signature_dmq_rx) = unbounded_channel :: < DmqMessage > ( ) ;
@@ -380,7 +384,8 @@ mod tests {
380
384
let message = fake_msg ( ) ;
381
385
let client = tokio:: spawn ( {
382
386
async move {
383
- tokio:: time:: sleep ( Duration :: from_secs ( 1 ) ) . await ;
387
+ // sleep to avoid refused connection from the server
388
+ tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
384
389
385
390
// client setup
386
391
let mut client = DmqClient :: connect ( socket_path. clone ( ) , 0 ) . await . unwrap ( ) ;
@@ -422,10 +427,10 @@ mod tests {
422
427
assert_eq ! ( vec![ message] , messages_received) ;
423
428
}
424
429
425
- #[ tokio:: test]
430
+ #[ tokio:: test( flavor = "multi_thread" ) ]
426
431
async fn pallas_dmq_consumer_server_blocking_blocks_when_no_message_available ( ) {
427
432
let ( _stop_tx, stop_rx) = watch:: channel ( ( ) ) ;
428
- let ( signature_dmq_tx , signature_dmq_rx) = unbounded_channel :: < DmqMessage > ( ) ;
433
+ let ( _signature_dmq_tx , signature_dmq_rx) = unbounded_channel :: < DmqMessage > ( ) ;
429
434
let socket_path = create_temp_dir ( current_function ! ( ) ) . join ( "node.socket" ) ;
430
435
let cardano_network = CardanoNetwork :: TestNet ( 0 ) ;
431
436
let dmq_consumer_server = Arc :: new ( DmqConsumerServerPallas :: new (
@@ -437,6 +442,9 @@ mod tests {
437
442
dmq_consumer_server. register_receiver ( signature_dmq_rx) . await . unwrap ( ) ;
438
443
let client = tokio:: spawn ( {
439
444
async move {
445
+ // sleep to avoid refused connection from the server
446
+ tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
447
+
440
448
// client setup
441
449
let mut client = DmqClient :: connect ( socket_path. clone ( ) , 0 ) . await . unwrap ( ) ;
442
450
@@ -451,10 +459,9 @@ mod tests {
451
459
localmsgnotification:: State :: BusyBlocking
452
460
) ;
453
461
454
- client_msg. recv_next_reply ( ) . await . unwrap ( ) ;
462
+ let _ = client_msg. recv_next_reply ( ) . await ;
455
463
}
456
464
} ) ;
457
- let _signature_dmq_tx_clone = signature_dmq_tx. clone ( ) ;
458
465
459
466
let result = tokio:: select!(
460
467
_res = sleep( Duration :: from_millis( 1000 ) ) => { Err ( anyhow!( "Timeout" ) ) } ,
0 commit comments