@@ -7,7 +7,7 @@ use crate::internal::messages::worker::{
77} ;
88use crate :: internal:: server:: comm:: Comm ;
99use crate :: internal:: server:: core:: Core ;
10- use crate :: internal:: server:: task:: { FinishInfo , WaitingInfo } ;
10+ use crate :: internal:: server:: task:: WaitingInfo ;
1111use crate :: internal:: server:: task:: { Task , TaskRuntimeState } ;
1212use crate :: internal:: server:: worker:: Worker ;
1313use crate :: internal:: server:: workermap:: WorkerMap ;
@@ -84,7 +84,7 @@ pub(crate) fn on_remove_worker(
8484 continue ;
8585 }
8686 }
87- TaskRuntimeState :: Finished ( _finfo ) => {
87+ TaskRuntimeState :: Finished => {
8888 continue ;
8989 }
9090 TaskRuntimeState :: RunningMultiNode ( ws) => {
@@ -164,13 +164,17 @@ pub(crate) fn on_new_tasks(core: &mut Core, comm: &mut impl Comm, new_tasks: Vec
164164 assert ! ( !new_tasks. is_empty( ) ) ;
165165 for mut task in new_tasks. into_iter ( ) {
166166 let mut count = 0 ;
167- for t in task. task_deps . iter ( ) {
168- let task_dep = core. get_task_mut ( * t) ;
169- task_dep. add_consumer ( task. id ) ;
170- if !task_dep. is_finished ( ) {
171- count += 1
167+ task. task_deps . retain ( |t| {
168+ if let Some ( task_dep) = core. find_task_mut ( * t) {
169+ task_dep. add_consumer ( task. id ) ;
170+ if !task_dep. is_finished ( ) {
171+ count += 1
172+ }
173+ true
174+ } else {
175+ false
172176 }
173- }
177+ } ) ;
174178 assert ! ( matches!(
175179 task. state,
176180 TaskRuntimeState :: Waiting ( WaitingInfo { unfinished_deps: 0 } )
@@ -225,7 +229,7 @@ pub(crate) fn on_task_running(
225229 }
226230 TaskRuntimeState :: Running { .. }
227231 | TaskRuntimeState :: Waiting ( _)
228- | TaskRuntimeState :: Finished ( _ ) => {
232+ | TaskRuntimeState :: Finished => {
229233 unreachable ! ( )
230234 }
231235 } ;
@@ -276,7 +280,7 @@ pub(crate) fn on_task_finished(
276280 assert_eq ! ( * w_id, worker_id) ;
277281 /* Do nothing */
278282 }
279- TaskRuntimeState :: Waiting ( _) | TaskRuntimeState :: Finished ( _ ) => {
283+ TaskRuntimeState :: Waiting ( _) | TaskRuntimeState :: Finished => {
280284 unreachable ! ( ) ;
281285 }
282286 }
@@ -287,7 +291,7 @@ pub(crate) fn on_task_finished(
287291 placement. insert ( worker_id) ;
288292 }
289293
290- task. state = TaskRuntimeState :: Finished ( FinishInfo { } ) ;
294+ task. state = TaskRuntimeState :: Finished ;
291295 comm. ask_for_scheduling ( ) ;
292296 comm. send_client_task_finished ( task. id ) ;
293297 } else {
@@ -315,8 +319,8 @@ pub(crate) fn on_task_finished(
315319 core. add_ready_to_assign ( id) ;
316320 comm. ask_for_scheduling ( ) ;
317321 }
318- unregister_as_consumer ( core , comm , msg. id ) ;
319- remove_task_if_possible ( core , comm , msg . id ) ;
322+ let state = core . remove_task ( msg. id ) ;
323+ assert ! ( matches! ( state , TaskRuntimeState :: Finished ) ) ;
320324}
321325
322326pub ( crate ) fn on_steal_response (
@@ -423,18 +427,13 @@ fn fail_task_helper(
423427 }
424428 } ;
425429
426- // TODO: take taskmap in `unregister_as_consumer`
427- unregister_as_consumer ( core, comm, task_id) ;
428-
429430 for & consumer in & consumers {
430- {
431- let task = core. get_task ( consumer) ;
432- log:: debug!( "Task={} canceled because of failed dependency" , task. id) ;
433- assert ! ( task. is_waiting( ) ) ;
434- }
435- unregister_as_consumer ( core, comm, consumer) ;
431+ log:: debug!( "Task={} canceled because of failed dependency" , consumer) ;
432+ assert ! ( matches!(
433+ core. remove_task( consumer) ,
434+ TaskRuntimeState :: Waiting ( _)
435+ ) ) ;
436436 }
437-
438437 let state = core. remove_task ( task_id) ;
439438 if worker_id. is_some ( ) {
440439 assert ! ( matches!(
@@ -448,14 +447,6 @@ fn fail_task_helper(
448447 assert ! ( matches!( state, TaskRuntimeState :: Waiting ( _) ) ) ;
449448 }
450449 drop ( state) ;
451-
452- for & consumer in & consumers {
453- // We can drop the resulting state as checks was done earlier
454- assert ! ( matches!(
455- core. remove_task( consumer) ,
456- TaskRuntimeState :: Waiting ( _)
457- ) ) ;
458- }
459450 comm. send_client_task_error ( task_id, consumers, error_info) ;
460451}
461452
@@ -522,17 +513,13 @@ pub(crate) fn on_cancel_tasks(
522513 }
523514 running_ids. entry ( from_id) . or_default ( ) . push ( task_id) ;
524515 }
525- TaskRuntimeState :: Finished ( _ ) => {
516+ TaskRuntimeState :: Finished => {
526517 already_finished. push ( task_id) ;
527518 }
528519 } ;
529520 }
530521 }
531522
532- for & task_id in & to_unregister {
533- unregister_as_consumer ( core, comm, task_id) ;
534- }
535-
536523 core. remove_tasks_batched ( & to_unregister) ;
537524
538525 for ( w_id, ids) in running_ids {
@@ -542,23 +529,3 @@ pub(crate) fn on_cancel_tasks(
542529 comm. ask_for_scheduling ( ) ;
543530 ( to_unregister. into_iter ( ) . collect ( ) , already_finished)
544531}
545-
546- fn unregister_as_consumer ( core : & mut Core , comm : & mut impl Comm , task_id : TaskId ) {
547- let inputs: Vec < TaskId > = core. get_task ( task_id) . task_deps . iter ( ) . copied ( ) . collect ( ) ;
548- for input_id in inputs {
549- let input = core. get_task_mut ( input_id) ;
550- assert ! ( input. remove_consumer( task_id) ) ;
551- remove_task_if_possible ( core, comm, input_id) ;
552- }
553- }
554-
555- fn remove_task_if_possible ( core : & mut Core , _comm : & mut impl Comm , task_id : TaskId ) {
556- if !core. get_task ( task_id) . is_removable ( ) {
557- return ;
558- }
559- match core. remove_task ( task_id) {
560- TaskRuntimeState :: Finished ( _finfo) => { /* Ok */ }
561- _ => unreachable ! ( ) ,
562- } ;
563- log:: debug!( "Task id={task_id} is no longer needed" ) ;
564- }
0 commit comments