Skip to content

Commit 9d24615

Browse files
bentshermanjorgee
andauthored
Invoke workflow complete handler on all workflow errors (#4299)
Signed-off-by: Ben Sherman <[email protected]> Co-authored-by: Jorge Ejarque <[email protected]>
1 parent 24903f2 commit 9d24615

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
@@ -811,8 +811,10 @@ class Session implements ISession {
811811
// dump threads status
812812
if( log.isTraceEnabled() )
813813
log.trace(SysHelper.dumpThreads())
814-
// force termination
814+
// invoke shutdown callbacks
815+
shutdown0()
815816
notifyError(null)
817+
// force termination
816818
ansiLogObserver?.forceTermination()
817819
executorFactory?.signalExecutors()
818820
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+
println "workflow onComplete: ${workflow.success}"
28+
}
29+
30+
workflow.onError = {
31+
println "workflow onError: ${workflow.errorMessage}"
32+
}
33+
}

0 commit comments

Comments
 (0)