@@ -35,15 +35,15 @@ use supermusr_streaming_types::{
35
35
use tokio:: {
36
36
select,
37
37
signal:: unix:: { signal, Signal , SignalKind } ,
38
- sync:: mpsc:: { error:: TrySendError , Receiver , Sender } ,
38
+ sync:: mpsc:: { error:: SendError , Receiver , Sender } ,
39
39
task:: JoinHandle ,
40
40
} ;
41
41
use tracing:: { debug, error, info, info_span, instrument, level_filters:: LevelFilter , warn} ;
42
42
43
43
const PRODUCER_TIMEOUT : Timeout = Timeout :: After ( Duration :: from_millis ( 100 ) ) ;
44
44
45
45
type AggregatedFrameToBufferSender = Sender < AggregatedFrame < EventData > > ;
46
- type TrySendAggregatedFrameError = TrySendError < AggregatedFrame < EventData > > ;
46
+ type SendAggregatedFrameError = SendError < AggregatedFrame < EventData > > ;
47
47
48
48
#[ derive( Debug , Parser ) ]
49
49
#[ clap( author, version, about) ]
@@ -212,7 +212,7 @@ async fn process_kafka_message(
212
212
channel_send : & AggregatedFrameToBufferSender ,
213
213
cache : & mut FrameCache < EventData > ,
214
214
msg : & BorrowedMessage < ' _ > ,
215
- ) -> Result < ( ) , TrySendAggregatedFrameError > {
215
+ ) -> Result < ( ) , SendAggregatedFrameError > {
216
216
msg. headers ( ) . conditional_extract_to_current_span ( use_otel) ;
217
217
218
218
if let Some ( payload) = msg. payload ( ) {
@@ -263,7 +263,7 @@ async fn process_digitiser_event_list_message(
263
263
channel_send : & AggregatedFrameToBufferSender ,
264
264
cache : & mut FrameCache < EventData > ,
265
265
msg : DigitizerEventListMessage < ' _ > ,
266
- ) -> Result < ( ) , TrySendAggregatedFrameError > {
266
+ ) -> Result < ( ) , SendAggregatedFrameError > {
267
267
match msg. metadata ( ) . try_into ( ) {
268
268
Ok ( metadata) => {
269
269
debug ! ( "Event packet: metadata: {:?}" , msg. metadata( ) ) ;
@@ -291,7 +291,7 @@ async fn process_digitiser_event_list_message(
291
291
async fn cache_poll (
292
292
channel_send : & AggregatedFrameToBufferSender ,
293
293
cache : & mut FrameCache < EventData > ,
294
- ) -> Result < ( ) , TrySendAggregatedFrameError > {
294
+ ) -> Result < ( ) , SendAggregatedFrameError > {
295
295
while let Some ( frame) = cache. poll ( ) {
296
296
let span = info_span ! ( target: "otel" , "Frame Completed" ) ;
297
297
span. follows_from (
@@ -302,21 +302,14 @@ async fn cache_poll(
302
302
) ;
303
303
let _guard = span. enter ( ) ;
304
304
305
- // For each frame that is ready to send,
306
- // `try_send` appends it to the channel queue
307
- // without blocking
308
- if let Err ( e) = channel_send. try_send ( frame) {
309
- // If the queue is full (or another error occurs),
310
- // then we emit a fatal error and close the program.
311
- match & e {
312
- TrySendError :: Closed ( _) => {
313
- error ! ( "Send-Frame Channel Closed" ) ;
314
- }
315
- TrySendError :: Full ( _) => {
316
- error ! ( "Send-Frame Buffer Full" ) ;
317
- }
305
+ // Reserves space in the message queue if it is available
306
+ // Or waits for space if none is available.
307
+ match channel_send. reserve ( ) . await {
308
+ Ok ( permit) => permit. send ( frame) ,
309
+ Err ( _) => {
310
+ error ! ( "Send-Frame Error" ) ;
311
+ return Err ( SendError ( frame) ) ;
318
312
}
319
- return Err ( e) ;
320
313
}
321
314
}
322
315
Ok ( ( ) )
0 commit comments