fortrangoingonforty/fgof-jobs / 3cc83de

Browse files

Fix jobs pipeline fanout

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
3cc83de99ae46fee145a6e0f9cb8dfff731ddc8a
Parents
ef83fae
Tree
45957e0

2 changed files

StatusFile+-
M src/fgof_jobs.f90 4 0
M test/test_job_pipeline.f90 13 0
src/fgof_jobs.f90modified
@@ -422,10 +422,12 @@ contains
422422
     if (allocated(handle%members)) then
423423
       if (handle%signal_scope == FGOF_JOBS_SIGNAL_SCOPE_GROUP) then
424424
         do index_value = 1, size(handle%members)
425
+          if (handle%members(index_value)%finished) cycle
425426
           handle%members(index_value)%running = .true.
426427
           handle%members(index_value)%stopped = .false.
427428
         end do
428429
       else if (member_index > 0) then
430
+        if (handle%members(member_index)%finished) return
429431
         handle%members(member_index)%running = .true.
430432
         handle%members(member_index)%stopped = .false.
431433
       end if
@@ -441,6 +443,7 @@ contains
441443
     if (allocated(handle%members)) then
442444
       if (handle%signal_scope == FGOF_JOBS_SIGNAL_SCOPE_GROUP) then
443445
         do index_value = 1, size(handle%members)
446
+          if (handle%members(index_value)%finished) cycle
444447
           handle%members(index_value)%running = .false.
445448
           handle%members(index_value)%stopped = .true.
446449
           handle%members(index_value)%result = result_value
@@ -450,6 +453,7 @@ contains
450453
           end if
451454
         end do
452455
       else if (member_index > 0) then
456
+        if (handle%members(member_index)%finished) return
453457
         handle%members(member_index)%running = .false.
454458
         handle%members(member_index)%stopped = .true.
455459
         handle%members(member_index)%result = result_value
test/test_job_pipeline.f90modified
@@ -62,6 +62,19 @@ program test_job_pipeline
6262
   if (handle%members(2)%finished) error stop "terminal results should not finish untouched members"
6363
   if (.not. job_needs_cleanup(handle)) error stop "partially finished pipelines should still need cleanup"
6464
 
65
+  call observe_wait_result(handle, job_stop_result(20, pid=102, process_group=101))
66
+  if (.not. handle%members(1)%finished) error stop "group stop should not reopen finished members"
67
+  if (handle%members(1)%stopped) error stop "group stop should not mark finished members stopped"
68
+  if (.not. handle%members(1)%result%exited) error stop "group stop should preserve finished member results"
69
+  if (.not. handle%members(2)%stopped) error stop "group stop should still stop live members"
70
+  if (.not. handle%members(3)%stopped) error stop "group stop should still stop later live members"
71
+
72
+  call observe_wait_result(handle, job_continue_result(pid=101, process_group=101))
73
+  if (handle%members(1)%running) error stop "group continue should not resume finished members"
74
+  if (handle%members(1)%stopped) error stop "group continue should leave finished members terminal"
75
+  if (.not. handle%members(2)%running) error stop "group continue should resume live members"
76
+  if (.not. handle%members(3)%running) error stop "group continue should resume later live members"
77
+
6578
   call complete_job(handle, job_exit_result(0, pid=102, process_group=101))
6679
   call complete_job(handle, job_exit_result(0, pid=103, process_group=101))
6780
   if (.not. job_is_finished(handle)) error stop "all finished members should finish the pipeline"