Skip to content

Commit 2765d4a

Browse files
committed
redirect .command.run output to .command.log when fusion is not enabled
Signed-off-by: jorgee <[email protected]>
1 parent a88e2cd commit 2765d4a

File tree

2 files changed

+8
-70
lines changed

2 files changed

+8
-70
lines changed

plugins/nf-k8s/src/main/nextflow/k8s/K8sTaskHandler.groovy

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,11 @@ class K8sTaskHandler extends TaskHandler implements FusionAwareTask {
148148
}
149149

150150
protected List<String> classicSubmitCli(TaskRun task) {
151+
final workDir = Escape.path(task.workDir)
152+
151153
final result = new ArrayList(BashWrapperBuilder.BASH)
152-
result.add("${Escape.path(task.workDir)}/${TaskRun.CMD_RUN}".toString())
154+
result.add('-c')
155+
result.add("bash ${workDir}/${TaskRun.CMD_RUN} 2>&1 | tee ${workDir}/${TaskRun.CMD_LOG}")
153156
return result
154157
}
155158

@@ -438,7 +441,6 @@ class K8sTaskHandler extends TaskHandler implements FusionAwareTask {
438441
task.stderr = errorFile
439442
}
440443
status = TaskStatus.COMPLETED
441-
savePodLogOnError(task)
442444
deletePodIfSuccessful(task)
443445
updateTimestamps(state.terminated as Map)
444446
determineNode()
@@ -448,31 +450,6 @@ class K8sTaskHandler extends TaskHandler implements FusionAwareTask {
448450
return false
449451
}
450452

451-
protected void savePodLogOnError(TaskRun task) {
452-
if( task.isSuccess() )
453-
return
454-
455-
if( errorFile && !errorFile.empty() )
456-
return
457-
458-
final session = executor.getSession()
459-
if( session.isAborted() || session.isCancelled() || session.isTerminated() )
460-
return
461-
462-
try {
463-
final stream = useJobResource()
464-
? client.jobLog(podName)
465-
: client.podLog(podName)
466-
Files.copy(stream, task.workDir.resolve(TaskRun.CMD_LOG))
467-
}
468-
catch( FileAlreadyExistsException e ) {
469-
log.debug "Log file already exists for ${resourceType.lower()} $podName", e
470-
}
471-
catch( Exception e ) {
472-
log.warn "Failed to copy log for ${resourceType.lower()} $podName", e
473-
}
474-
}
475-
476453
protected int readExitFile() {
477454
try {
478455
exitFile.text as Integer

plugins/nf-k8s/src/test/nextflow/k8s/K8sTaskHandlerTest.groovy

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class K8sTaskHandlerTest extends Specification {
9696
containers: [[
9797
name:'nf-123',
9898
image:'debian:latest',
99-
args:['/bin/bash', '-ue','/some/work/dir/.command.run']
99+
args:['/bin/bash', '-ue','-c','bash /some/work/dir/.command.run 2>&1 | tee /some/work/dir/.command.log']
100100
]]
101101
]
102102
]
@@ -123,7 +123,7 @@ class K8sTaskHandlerTest extends Specification {
123123
and:
124124
result.metadata.labels == [sessionId: 'xxx']
125125
result.metadata.annotations == [evict: 'false']
126-
result.spec.containers[0].command == ['/bin/bash', '-ue', '/some/work/dir/.command.run']
126+
result.spec.containers[0].command == ['/bin/bash', '-ue', '-c','bash /some/work/dir/.command.run 2>&1 | tee /some/work/dir/.command.log']
127127
result.spec.containers[0].resources == [ requests: [cpu:1] ]
128128
result.spec.containers[0].env == [ [name:'NXF_OWNER', value:'501:502'] ]
129129

@@ -148,7 +148,7 @@ class K8sTaskHandlerTest extends Specification {
148148
and:
149149
result.metadata.namespace == 'namespace-x'
150150
result.spec.containers[0].image == 'user/alpine:1.0'
151-
result.spec.containers[0].command == ['/bin/bash', '-ue', '/some/work/dir/.command.run']
151+
result.spec.containers[0].command == ['/bin/bash', '-ue', '-c','bash /some/work/dir/.command.run 2>&1 | tee /some/work/dir/.command.log']
152152
result.spec.containers[0].resources == [ requests: [cpu:4, memory:'16384Mi'], limits: [memory:'16384Mi'] ]
153153

154154
}
@@ -428,7 +428,7 @@ class K8sTaskHandlerTest extends Specification {
428428
containers: [[
429429
name: 'nf-123',
430430
image: 'debian:latest',
431-
command: ['/bin/bash', '-ue','/some/work/dir/.command.run']
431+
command: ['/bin/bash', '-ue','-c','bash /some/work/dir/.command.run 2>&1 | tee /some/work/dir/.command.log']
432432
]]
433433
]
434434
]
@@ -498,7 +498,6 @@ class K8sTaskHandlerTest extends Specification {
498498
1 * handler.updateTimestamps(termState)
499499
1 * handler.readExitFile() >> EXIT_STATUS
500500
1 * handler.deletePodIfSuccessful(task) >> null
501-
1 * handler.savePodLogOnError(task) >> null
502501
handler.task.exitStatus == EXIT_STATUS
503502
handler.task.@stdout == OUT_FILE
504503
handler.task.@stderr == ERR_FILE
@@ -529,7 +528,6 @@ class K8sTaskHandlerTest extends Specification {
529528
1 * handler.updateTimestamps(termState)
530529
0 * handler.readExitFile()
531530
1 * handler.deletePodIfSuccessful(task) >> null
532-
1 * handler.savePodLogOnError(task) >> null
533531
handler.task.exitStatus == 137
534532
handler.status == TaskStatus.COMPLETED
535533
result == true
@@ -788,43 +786,6 @@ class K8sTaskHandlerTest extends Specification {
788786

789787
}
790788

791-
def 'should save pod log' () {
792-
793-
given:
794-
def folder = Files.createTempDirectory('test')
795-
def POD_NAME = 'the-pod-name'
796-
def POD_MESSAGE = 'Hello world!'
797-
def POD_LOG = new ByteArrayInputStream(new String(POD_MESSAGE).bytes)
798-
def session = Mock(Session)
799-
def task = Mock(TaskRun)
800-
def executor = Mock(K8sExecutor)
801-
def client = Mock(K8sClient)
802-
and:
803-
def handler = Spy(new K8sTaskHandler(executor: executor, client: client, podName: POD_NAME))
804-
805-
when:
806-
handler.savePodLogOnError(task)
807-
then:
808-
task.isSuccess() >> true
809-
0 * client.podLog(_)
810-
811-
when:
812-
handler.savePodLogOnError(task)
813-
then:
814-
task.isSuccess() >> false
815-
task.getWorkDir() >> folder
816-
executor.getSession() >> session
817-
session.isTerminated() >> false
818-
session.isCancelled() >> false
819-
session.isAborted() >> false
820-
1 * client.podLog(POD_NAME) >> POD_LOG
821-
822-
folder.resolve( TaskRun.CMD_LOG ).text == POD_MESSAGE
823-
cleanup:
824-
folder?.deleteDir()
825-
826-
}
827-
828789
def 'should merge pod options' () {
829790
given:
830791
PodOptions opts

0 commit comments

Comments
 (0)