Skip to content

Commit 030f21c

Browse files
authored
feat: maximize chances to go from compute to result contribution (#668)
1 parent 7c11687 commit 030f21c

File tree

3 files changed

+110
-145
lines changed

3 files changed

+110
-145
lines changed
Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2023 IEXEC BLOCKCHAIN TECH
2+
* Copyright 2020-2025 IEXEC BLOCKCHAIN TECH
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
1616

1717
package com.iexec.worker.replicate;
1818

19-
import com.iexec.common.replicate.ComputeLogs;
2019
import com.iexec.common.replicate.ReplicateStatusCause;
2120
import com.iexec.common.replicate.ReplicateStatusDetails;
2221
import com.iexec.commons.poco.chain.ChainReceipt;
@@ -30,63 +29,36 @@
3029
@NoArgsConstructor
3130
@AllArgsConstructor
3231
public class ReplicateActionResponse {
33-
3432
private boolean isSuccess;
3533
private ReplicateStatusDetails details;
3634

3735
public static ReplicateActionResponse success() {
3836
return new ReplicateActionResponse(true, null);
3937
}
4038

41-
public static ReplicateActionResponse success(ChainReceipt chainReceipt) {
42-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
43-
.chainReceipt(chainReceipt)
44-
.build();
45-
return new ReplicateActionResponse(true, details);
39+
public static ReplicateActionResponse success(final ChainReceipt chainReceipt) {
40+
return new ReplicateActionResponse(
41+
true, ReplicateStatusDetails.builder().chainReceipt(chainReceipt).build());
4642
}
4743

48-
public static ReplicateActionResponse success(String resultLink, String callbackData) {
49-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
44+
public static ReplicateActionResponse success(final String resultLink, final String callbackData) {
45+
final ReplicateStatusDetails details = ReplicateStatusDetails.builder()
5046
.resultLink(resultLink)
5147
.chainCallbackData(callbackData)
5248
.build();
5349
return new ReplicateActionResponse(true, details);
5450
}
5551

56-
public static ReplicateActionResponse successWithLogs(ComputeLogs computeLogs) {
57-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
58-
.computeLogs(computeLogs)
59-
.build();
52+
public static ReplicateActionResponse successWithDetails(final ReplicateStatusDetails details) {
6053
return new ReplicateActionResponse(true, details);
6154
}
6255

6356
public static ReplicateActionResponse failure() {
6457
return new ReplicateActionResponse(false, null);
6558
}
6659

67-
public static ReplicateActionResponse failure(ReplicateStatusCause cause) {
68-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
69-
.cause(cause)
70-
.build();
71-
return new ReplicateActionResponse(false, details);
72-
}
73-
74-
public static ReplicateActionResponse failureWithStdout(String stdout) {
75-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
76-
.computeLogs(ComputeLogs.builder().stdout(stdout).build())
77-
.build();
78-
return new ReplicateActionResponse(false, details);
79-
}
80-
81-
public static ReplicateActionResponse failureWithStdout(ReplicateStatusCause cause, String stdout) {
82-
ReplicateStatusDetails details = ReplicateStatusDetails.builder()
83-
.cause(cause)
84-
.computeLogs(ComputeLogs.builder().stdout(stdout).build())
85-
.build();
86-
return new ReplicateActionResponse(false, details);
87-
}
88-
89-
public static ReplicateActionResponse failureWithDetails(ReplicateStatusDetails details) {
90-
return new ReplicateActionResponse(false, details);
60+
public static ReplicateActionResponse failure(final ReplicateStatusCause cause) {
61+
return new ReplicateActionResponse(
62+
false, ReplicateStatusDetails.builder().cause(cause).build());
9163
}
9264
}

src/main/java/com/iexec/worker/task/TaskManagerService.java

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import lombok.extern.slf4j.Slf4j;
4949
import org.springframework.stereotype.Service;
5050

51+
import java.util.ArrayList;
5152
import java.util.List;
5253
import java.util.Optional;
5354

@@ -264,39 +265,25 @@ ReplicateActionResponse compute(final TaskDescription taskDescription) {
264265
}
265266

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

271270
final AppComputeResponse appResponse = computeManagerService.runCompute(taskDescription);
272-
if (!appResponse.isSuccessful()) {
273-
final List<WorkflowError> appErrors = appResponse.getExitCauses();
274-
appErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
275-
return ReplicateActionResponse.failureWithDetails(
276-
ReplicateStatusDetails.builder()
277-
.cause(appErrors.get(0).cause()) //TODO: Handle list of causes
278-
.exitCode(appResponse.getExitCode())
279-
.computeLogs(
280-
ComputeLogs.builder()
281-
.stdout(appResponse.getStdout())
282-
.stderr(appResponse.getStderr())
283-
.build()
284-
)
285-
.build());
286-
}
271+
cumulatedErrors.addAll(appResponse.getExitCauses());
287272

288273
final PostComputeResponse postResponse = computeManagerService.runPostCompute(taskDescription);
289-
if (!postResponse.isSuccessful()) {
290-
final List<WorkflowError> postComputeErrors = postResponse.getExitCauses();
291-
postComputeErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
292-
return ReplicateActionResponse.failureWithStdout(postComputeErrors.get(0).cause(), postResponse.getStdout()); // TODO: Handle list of causes
293-
}
294-
return ReplicateActionResponse.successWithLogs(
295-
ComputeLogs.builder()
296-
.stdout(appResponse.getStdout())
297-
.stderr(appResponse.getStderr())
298-
.build()
299-
);
274+
cumulatedErrors.addAll(postResponse.getExitCauses());
275+
final ComputeLogs computeLogs = ComputeLogs.builder()
276+
.stdout(appResponse.getStdout())
277+
.stderr(appResponse.getStderr())
278+
.build();
279+
final ReplicateStatusDetails details = ReplicateStatusDetails.builder()
280+
.exitCode(appResponse.getExitCode())
281+
.computeLogs(computeLogs)
282+
.build();
283+
284+
// Always return success to avoid returning COMPUTE_FAILED as this would stop the task execution
285+
cumulatedErrors.forEach(error -> logError(error.cause(), context, chainTaskId));
286+
return ReplicateActionResponse.successWithDetails(details);
300287
}
301288

302289
/**

0 commit comments

Comments
 (0)