Skip to content

Commit bfd5174

Browse files
committed
Invoke shutdown callbacks on abort
Signed-off-by: Ben Sherman <bentshermann@gmail.com>
1 parent bde9ef1 commit bfd5174

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

modules/nextflow/src/main/groovy/nextflow/Session.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,8 +819,10 @@ class Session implements ISession {
819819
// dump threads status
820820
if( log.isTraceEnabled() )
821821
log.trace(SysHelper.dumpThreads())
822-
// force termination
822+
// invoke shutdown callbacks
823+
shutdown0()
823824
notifyError(null)
825+
// force termination
824826
ansiLogObserver?.forceTermination()
825827
executorFactory?.signalExecutors()
826828
processesBarrier.forceTermination()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
set -e
2+
3+
echo ''
4+
$NXF_RUN > stdout || true
5+
6+
[[ `grep -c 'workflow onComplete: false' stdout` == 1 ]] || false
7+
[[ `grep -c 'workflow onError: Not enough values!' stdout` == 1 ]] || false

tests/workflow-oncomplete-error.nf

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env nextflow
2+
/*
3+
* Copyright 2013-2024, Seqera Labs
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
workflow {
19+
channel.of(1, 2, 3)
20+
.collect()
21+
.subscribe { values ->
22+
if( values.size() < 10 )
23+
error 'Not enough values!'
24+
}
25+
26+
workflow.onComplete = {
27+
log.info "workflow onComplete: ${workflow.success}"
28+
}
29+
30+
workflow.onError = {
31+
log.info "workflow onError: ${workflow.errorMessage}"
32+
}
33+
}

0 commit comments

Comments
 (0)