Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2020-2023 IEXEC BLOCKCHAIN TECH
* Copyright 2020-2025 IEXEC BLOCKCHAIN TECH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -16,7 +16,6 @@

package com.iexec.worker.replicate;

import com.iexec.common.replicate.ComputeLogs;
import com.iexec.common.replicate.ReplicateStatusCause;
import com.iexec.common.replicate.ReplicateStatusDetails;
import com.iexec.commons.poco.chain.ChainReceipt;
Expand All @@ -30,63 +29,36 @@
@NoArgsConstructor
@AllArgsConstructor
public class ReplicateActionResponse {

private boolean isSuccess;
private ReplicateStatusDetails details;

public static ReplicateActionResponse success() {
return new ReplicateActionResponse(true, null);
}

public static ReplicateActionResponse success(ChainReceipt chainReceipt) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.chainReceipt(chainReceipt)
.build();
return new ReplicateActionResponse(true, details);
public static ReplicateActionResponse success(final ChainReceipt chainReceipt) {
return new ReplicateActionResponse(
true, ReplicateStatusDetails.builder().chainReceipt(chainReceipt).build());
}

public static ReplicateActionResponse success(String resultLink, String callbackData) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
public static ReplicateActionResponse success(final String resultLink, final String callbackData) {
final ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.resultLink(resultLink)
.chainCallbackData(callbackData)
.build();
return new ReplicateActionResponse(true, details);
}

public static ReplicateActionResponse successWithLogs(ComputeLogs computeLogs) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.computeLogs(computeLogs)
.build();
public static ReplicateActionResponse successWithDetails(final ReplicateStatusDetails details) {
return new ReplicateActionResponse(true, details);
}

public static ReplicateActionResponse failure() {
return new ReplicateActionResponse(false, null);
}

public static ReplicateActionResponse failure(ReplicateStatusCause cause) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.cause(cause)
.build();
return new ReplicateActionResponse(false, details);
}

public static ReplicateActionResponse failureWithStdout(String stdout) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.computeLogs(ComputeLogs.builder().stdout(stdout).build())
.build();
return new ReplicateActionResponse(false, details);
}

public static ReplicateActionResponse failureWithStdout(ReplicateStatusCause cause, String stdout) {
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.cause(cause)
.computeLogs(ComputeLogs.builder().stdout(stdout).build())
.build();
return new ReplicateActionResponse(false, details);
}

public static ReplicateActionResponse failureWithDetails(ReplicateStatusDetails details) {
return new ReplicateActionResponse(false, details);
public static ReplicateActionResponse failure(final ReplicateStatusCause cause) {
return new ReplicateActionResponse(
false, ReplicateStatusDetails.builder().cause(cause).build());
}
}
45 changes: 16 additions & 29 deletions src/main/java/com/iexec/worker/task/TaskManagerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -264,39 +265,25 @@ ReplicateActionResponse compute(final TaskDescription taskDescription) {
}

final PreComputeResponse preResponse = computeManagerService.runPreCompute(taskDescription);
if (!preResponse.isSuccessful()) {
return getFailureResponseAndPrintErrors(preResponse.getExitCauses(), context, chainTaskId);
}
final List<WorkflowError> cumulatedErrors = new ArrayList<>(preResponse.getExitCauses());

final AppComputeResponse appResponse = computeManagerService.runCompute(taskDescription);
if (!appResponse.isSuccessful()) {
final List<WorkflowError> appErrors = appResponse.getExitCauses();
appErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
return ReplicateActionResponse.failureWithDetails(
ReplicateStatusDetails.builder()
.cause(appErrors.get(0).cause()) //TODO: Handle list of causes
.exitCode(appResponse.getExitCode())
.computeLogs(
ComputeLogs.builder()
.stdout(appResponse.getStdout())
.stderr(appResponse.getStderr())
.build()
)
.build());
}
cumulatedErrors.addAll(appResponse.getExitCauses());

final PostComputeResponse postResponse = computeManagerService.runPostCompute(taskDescription);
if (!postResponse.isSuccessful()) {
final List<WorkflowError> postComputeErrors = postResponse.getExitCauses();
postComputeErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
return ReplicateActionResponse.failureWithStdout(postComputeErrors.get(0).cause(), postResponse.getStdout()); // TODO: Handle list of causes
}
return ReplicateActionResponse.successWithLogs(
ComputeLogs.builder()
.stdout(appResponse.getStdout())
.stderr(appResponse.getStderr())
.build()
);
cumulatedErrors.addAll(postResponse.getExitCauses());
final ComputeLogs computeLogs = ComputeLogs.builder()
.stdout(appResponse.getStdout())
.stderr(appResponse.getStderr())
.build();
final ReplicateStatusDetails details = ReplicateStatusDetails.builder()
.exitCode(appResponse.getExitCode())
.computeLogs(computeLogs)
.build();

// Always return success to avoid returning COMPUTE_FAILED as this would stop the task execution
cumulatedErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
return ReplicateActionResponse.successWithDetails(details);
}

/**
Expand Down
Loading