Fix jobs pipeline fanout
Authored by
mfwolffe <wolffemf@dukes.jmu.edu>
- SHA
3cc83de99ae46fee145a6e0f9cb8dfff731ddc8a- Parents
-
ef83fae - Tree
45957e0
3cc83de
3cc83de99ae46fee145a6e0f9cb8dfff731ddc8aef83fae
45957e0| Status | File | + | - |
|---|---|---|---|
| M |
src/fgof_jobs.f90
|
4 | 0 |
| M |
test/test_job_pipeline.f90
|
13 | 0 |
src/fgof_jobs.f90modified@@ -422,10 +422,12 @@ contains | ||
| 422 | 422 | if (allocated(handle%members)) then |
| 423 | 423 | if (handle%signal_scope == FGOF_JOBS_SIGNAL_SCOPE_GROUP) then |
| 424 | 424 | do index_value = 1, size(handle%members) |
| 425 | + if (handle%members(index_value)%finished) cycle | |
| 425 | 426 | handle%members(index_value)%running = .true. |
| 426 | 427 | handle%members(index_value)%stopped = .false. |
| 427 | 428 | end do |
| 428 | 429 | else if (member_index > 0) then |
| 430 | + if (handle%members(member_index)%finished) return | |
| 429 | 431 | handle%members(member_index)%running = .true. |
| 430 | 432 | handle%members(member_index)%stopped = .false. |
| 431 | 433 | end if |
@@ -441,6 +443,7 @@ contains | ||
| 441 | 443 | if (allocated(handle%members)) then |
| 442 | 444 | if (handle%signal_scope == FGOF_JOBS_SIGNAL_SCOPE_GROUP) then |
| 443 | 445 | do index_value = 1, size(handle%members) |
| 446 | + if (handle%members(index_value)%finished) cycle | |
| 444 | 447 | handle%members(index_value)%running = .false. |
| 445 | 448 | handle%members(index_value)%stopped = .true. |
| 446 | 449 | handle%members(index_value)%result = result_value |
@@ -450,6 +453,7 @@ contains | ||
| 450 | 453 | end if |
| 451 | 454 | end do |
| 452 | 455 | else if (member_index > 0) then |
| 456 | + if (handle%members(member_index)%finished) return | |
| 453 | 457 | handle%members(member_index)%running = .false. |
| 454 | 458 | handle%members(member_index)%stopped = .true. |
| 455 | 459 | handle%members(member_index)%result = result_value |
test/test_job_pipeline.f90modified@@ -62,6 +62,19 @@ program test_job_pipeline | ||
| 62 | 62 | if (handle%members(2)%finished) error stop "terminal results should not finish untouched members" |
| 63 | 63 | if (.not. job_needs_cleanup(handle)) error stop "partially finished pipelines should still need cleanup" |
| 64 | 64 | |
| 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 | + | |
| 65 | 78 | call complete_job(handle, job_exit_result(0, pid=102, process_group=101)) |
| 66 | 79 | call complete_job(handle, job_exit_result(0, pid=103, process_group=101)) |
| 67 | 80 | if (.not. job_is_finished(handle)) error stop "all finished members should finish the pipeline" |