@@ -123,6 +123,7 @@ pub async fn run_worker(
123123
124124 let ( queue_sender, queue_receiver) = tokio:: sync:: mpsc:: unbounded_channel :: < Bytes > ( ) ;
125125 let heartbeat_interval = configuration. heartbeat_interval ;
126+ let retract_check_interval = configuration. retract_check_interval ;
126127 let time_limit = configuration. time_limit ;
127128
128129 let ( worker_id, state_ref) = {
@@ -171,6 +172,7 @@ pub async fn run_worker(
171172 let local_comm_fut = handle_local_comm ( local_conn_listener, state_ref. clone ( ) ) ;
172173
173174 let heartbeat_fut = heartbeat_process ( heartbeat_interval, state_ref. clone ( ) ) ;
175+ let retract_check_fut = retract_check_process ( retract_check_interval, state_ref. clone ( ) ) ;
174176 let overview_fut = send_overview_loop ( state_ref. clone ( ) ) ;
175177
176178 let time_limit_fut = match time_limit {
@@ -201,6 +203,7 @@ pub async fn run_worker(
201203 Ok ( Some ( FromWorkerMessage :: Stop ( WorkerStopReason :: Interrupted ) ) )
202204 }
203205 _ = heartbeat_fut => { unreachable!( ) }
206+ _ = retract_check_fut => { unreachable!( ) }
204207 _ = overview_fut => { unreachable!( ) }
205208 _ = local_comm_fut => { unreachable!( ) }
206209 } ;
@@ -310,9 +313,22 @@ async fn heartbeat_process(heartbeat_interval: Duration, state_ref: WrappedRcRef
310313 state
311314 . comm ( )
312315 . send_message_to_server ( FromWorkerMessage :: Heartbeat ) ;
316+ }
317+ log:: debug!( "Heartbeat sent" ) ;
318+ }
319+ }
320+
321+ /// Repeatedly check overdue task
322+ async fn retract_check_process ( check_interval : Duration , state_ref : WrappedRcRefCell < WorkerState > ) {
323+ let mut interval = tokio:: time:: interval ( check_interval) ;
324+ loop {
325+ interval. tick ( ) . await ;
326+ {
327+ let mut state = state_ref. get_mut ( ) ;
313328 if !state. prefilled_tasks . is_empty ( )
314329 && let Some ( remaining_time) = state. remaining_time ( )
315330 {
331+ log:: debug!( "Checking tasks for retract" ) ;
316332 let mut to_remove = Vec :: new ( ) ;
317333 let mut updates = TaskUpdates :: new ( ) ;
318334 for ( rq_id, tasks) in & state. prefilled_tasks {
@@ -338,7 +354,6 @@ async fn heartbeat_process(heartbeat_interval: Duration, state_ref: WrappedRcRef
338354 }
339355 }
340356 }
341- log:: debug!( "Heartbeat sent" ) ;
342357 }
343358}
344359
0 commit comments