@@ -19,8 +19,8 @@ use crate::internal::common::WrappedRcRefCell;
1919use crate :: internal:: common:: resources:: Allocation ;
2020use crate :: internal:: common:: resources:: map:: ResourceIdMap ;
2121use crate :: internal:: messages:: worker:: {
22- FromWorkerMessage , RetractResponseMsg , TaskResourceAllocation , ToWorkerMessage , WorkerOverview ,
23- WorkerRegistrationResponse , WorkerStopReason ,
22+ FromWorkerMessage , RetractResponseMsg , TaskResourceAllocation , TaskUpdates , ToWorkerMessage ,
23+ WorkerOverview , WorkerRegistrationResponse , WorkerStopReason , WorkerTaskUpdate ,
2424} ;
2525use crate :: internal:: server:: rpc:: ConnectionDescriptor ;
2626use crate :: internal:: transfer:: auth:: {
@@ -305,10 +305,39 @@ async fn heartbeat_process(heartbeat_interval: Duration, state_ref: WrappedRcRef
305305 let mut interval = tokio:: time:: interval ( heartbeat_interval) ;
306306 loop {
307307 interval. tick ( ) . await ;
308- state_ref
309- . get_mut ( )
310- . comm ( )
311- . send_message_to_server ( FromWorkerMessage :: Heartbeat ) ;
308+ {
309+ let mut state = state_ref. get_mut ( ) ;
310+ state
311+ . comm ( )
312+ . send_message_to_server ( FromWorkerMessage :: Heartbeat ) ;
313+ if !state. prefilled_tasks . is_empty ( )
314+ && let Some ( remaining_time) = state. remaining_time ( )
315+ {
316+ let mut to_remove = Vec :: new ( ) ;
317+ let mut updates = TaskUpdates :: new ( ) ;
318+ for ( rq_id, tasks) in & state. prefilled_tasks {
319+ let rqv = state. resource_rq_map . get ( * rq_id) ;
320+ if remaining_time < rqv. min_time ( ) {
321+ to_remove. push ( * rq_id) ;
322+ for task in tasks {
323+ // Hard reject, we never unblock this rejection so we do not need to update blocked requests
324+ updates. push ( WorkerTaskUpdate :: RejectRequest {
325+ task_id : task. id ,
326+ rv_id : None ,
327+ } ) ;
328+ }
329+ }
330+ }
331+ if !updates. is_empty ( ) {
332+ state
333+ . comm ( )
334+ . send_message_to_server ( FromWorkerMessage :: TaskUpdate ( updates) ) ;
335+ for rq_id in to_remove {
336+ state. prefilled_tasks . remove ( & rq_id) ;
337+ }
338+ }
339+ }
340+ }
312341 log:: debug!( "Heartbeat sent" ) ;
313342 }
314343}
0 commit comments