Skip to content

Commit 1f3b0ff

Browse files
authored
feat: execute pre-compute container for a TEE task requesting a bulk processing (#655)
1 parent 1f0bb7f commit 1f3b0ff

File tree

8 files changed

+119
-119
lines changed

8 files changed

+119
-119
lines changed

src/main/java/com/iexec/worker/compute/ComputeController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public ResponseEntity<Void> sendExitCausesForGivenComputeStage(
8585
.build();
8686
}
8787

88-
final boolean stored = computeStageExitService.setExitCausesForGivenComputeStage(stage, chainTaskId, causes);
88+
final boolean stored = computeStageExitService.setExitCausesForGivenComputeStage(chainTaskId, stage, causes);
8989

9090
if (!stored) {
9191
return ResponseEntity

src/main/java/com/iexec/worker/compute/ComputeExitCauseService.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,20 @@ public class ComputeExitCauseService {
3939
* @param causes list of root causes of the failure
4040
* @return true if exit causes are reported, false if already reported
4141
*/
42-
boolean setExitCausesForGivenComputeStage(final ComputeStage computeStage,
43-
final String chainTaskId,
42+
boolean setExitCausesForGivenComputeStage(final String chainTaskId,
43+
final ComputeStage computeStage,
4444
final List<ReplicateStatusCause> causes) {
4545
final String key = buildKey(computeStage, chainTaskId);
4646

4747
if (exitCauseMap.containsKey(key)) {
48-
log.warn("Exit causes already reported for compute stage [computeStage:{}, chainTaskId:{}]",
49-
computeStage, chainTaskId);
48+
log.warn("Exit causes already reported for compute stage [chainTaskId:{}, computeStage:{}]",
49+
chainTaskId, computeStage);
5050
return false;
5151
}
5252

5353
exitCauseMap.put(key, List.copyOf(causes));
54-
log.info("Added exit causes [computeStage:{}, chainTaskId:{}, causeCount:{}]",
55-
computeStage, chainTaskId, causes.size());
54+
log.info("Added exit causes [chainTaskId:{}, computeStage:{}, causeCount:{}]",
55+
chainTaskId, computeStage, causes.size());
5656
return true;
5757
}
5858

@@ -66,18 +66,18 @@ boolean setExitCausesForGivenComputeStage(final ComputeStage computeStage,
6666
* @return list of exit causes, or default unknown issue if not found
6767
*/
6868
public List<ReplicateStatusCause> getExitCausesAndPruneForGivenComputeStage(
69-
final ComputeStage computeStage,
7069
final String chainTaskId,
70+
final ComputeStage computeStage,
7171
final ReplicateStatusCause fallbackCause) {
7272
final String key = buildKey(computeStage, chainTaskId);
7373
final List<ReplicateStatusCause> causes = exitCauseMap.remove(key);
7474
if (causes != null) {
75-
log.info("Retrieved and pruned exit causes [computeStage:{}, chainTaskId:{}, causeCount:{}]",
76-
computeStage, chainTaskId, causes.size());
75+
log.info("Retrieved and pruned exit causes [chainTaskId:{} computeStage:{}, causeCount:{}]",
76+
chainTaskId, computeStage, causes.size());
7777
return causes;
7878
} else {
79-
log.info("No exit causes found, returning fallback cause [computeStage:{}, chainTaskId:{}]",
80-
computeStage, chainTaskId);
79+
log.info("No exit causes found, returning fallback cause [chainTaskId:{}, computeStage:{}]",
80+
chainTaskId, computeStage);
8181
return List.of(fallbackCause);
8282
}
8383
}
@@ -89,7 +89,7 @@ public List<ReplicateStatusCause> getExitCausesAndPruneForGivenComputeStage(
8989
* @param chainTaskId task ID
9090
* @return exit cause storage key
9191
*/
92-
private String buildKey(ComputeStage prefix, String chainTaskId) {
92+
private String buildKey(final ComputeStage prefix, final String chainTaskId) {
9393
return prefix + "_" + chainTaskId;
9494
}
9595
}

src/main/java/com/iexec/worker/compute/post/PostComputeService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ private ReplicateStatusCause getExitCause(String chainTaskId, Integer exitCode)
239239
switch (exitCode) {
240240
case 1:
241241
// Use first cause from bulk processing for now
242-
cause = computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(ComputeStage.POST, chainTaskId, POST_COMPUTE_FAILED_UNKNOWN_ISSUE).get(0);
242+
cause = computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(chainTaskId, ComputeStage.POST, POST_COMPUTE_FAILED_UNKNOWN_ISSUE).get(0);
243243
break;
244244
case 2:
245245
cause = ReplicateStatusCause.POST_COMPUTE_EXIT_REPORTING_FAILED;

src/main/java/com/iexec/worker/compute/pre/PreComputeService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public PreComputeResponse runTeePreCompute(TaskDescription taskDescription, Work
139139
}
140140

141141
// run TEE pre-compute container if needed
142-
if (taskDescription.containsDataset() || taskDescription.containsInputFiles()) {
142+
if (taskDescription.requiresPreCompute()) {
143143
log.info("Task contains TEE input data [chainTaskId:{}, containsDataset:{}, containsInputFiles:{}]",
144144
chainTaskId, taskDescription.containsDataset(), taskDescription.containsInputFiles());
145145
final ReplicateStatusCause exitCause = downloadDatasetAndFiles(taskDescription, secureSession);
@@ -175,7 +175,7 @@ private ReplicateStatusCause getExitCause(String chainTaskId, Integer exitCode)
175175
switch (exitCode) {
176176
case 1:
177177
// Use first cause from bulk processing for now
178-
cause = computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(ComputeStage.PRE, chainTaskId, PRE_COMPUTE_FAILED_UNKNOWN_ISSUE).get(0);
178+
cause = computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(chainTaskId, ComputeStage.PRE, PRE_COMPUTE_FAILED_UNKNOWN_ISSUE).get(0);
179179
break;
180180
case 2:
181181
cause = ReplicateStatusCause.PRE_COMPUTE_EXIT_REPORTING_FAILED;

src/test/java/com/iexec/worker/compute/ComputeControllerTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ void shouldReturnAlreadyReportedWhenCalledMultipleTimes(final ComputeStage stage
117117
assertThat(secondResponse.getStatusCode().value()).isEqualTo(HttpStatus.ALREADY_REPORTED.value());
118118

119119
final List<ReplicateStatusCause> retrievedCauses = computeStageExitService
120-
.getExitCausesAndPruneForGivenComputeStage(stage, CHAIN_TASK_ID, fallbackCause);
120+
.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, stage, fallbackCause);
121121
assertThat(retrievedCauses)
122122
.hasSize(causes.size())
123123
.containsAll(causes);

src/test/java/com/iexec/worker/compute/ComputeExitCauseServiceTests.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,22 +80,22 @@ static Stream<Arguments> computeStageAndCausesArguments() {
8080
@ParameterizedTest
8181
@MethodSource("computeStageAndCausesArguments")
8282
void shouldSetExitCausesSuccessfully(final ComputeStage stage, final List<ReplicateStatusCause> causes) {
83-
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes)).isTrue();
83+
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes)).isTrue();
8484
}
8585

8686
@ParameterizedTest
8787
@MethodSource("computeStageAndCausesArguments")
8888
void shouldGetExitCausesAfterSetting(final ComputeStage stage, final List<ReplicateStatusCause> causes, final ReplicateStatusCause defaultCause) {
89-
computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes);
90-
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(stage, CHAIN_TASK_ID, defaultCause)).containsExactlyElementsOf(causes);
89+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes);
90+
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, stage, defaultCause)).containsExactlyElementsOf(causes);
9191
}
9292

9393
@ParameterizedTest
9494
@MethodSource("computeStageAndCausesArguments")
9595
void shouldReturnDefaultCauseAfterPruning(final ComputeStage stage, final List<ReplicateStatusCause> causes, final ReplicateStatusCause defaultCause) {
96-
computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes);
97-
computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(stage, CHAIN_TASK_ID, defaultCause);
98-
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(stage, CHAIN_TASK_ID, defaultCause)).isEqualTo(List.of(defaultCause));
96+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes);
97+
computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, stage, defaultCause);
98+
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, stage, defaultCause)).isEqualTo(List.of(defaultCause));
9999
}
100100
//endregion
101101

@@ -112,43 +112,43 @@ static Stream<Arguments> validExitCauseProvider() {
112112
@ParameterizedTest
113113
@MethodSource("validExitCauseProvider")
114114
void shouldReturnTrueWhenReportingForFirstTime(final ComputeStage stage, final List<ReplicateStatusCause> causes) {
115-
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes))
115+
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes))
116116
.isTrue();
117117
}
118118

119119
@ParameterizedTest
120120
@MethodSource("validExitCauseProvider")
121121
void shouldReturnFalseWhenReportingTwiceWithSameCauses(final ComputeStage stage, final List<ReplicateStatusCause> causes) {
122-
computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes);
123-
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes)).isFalse();
122+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes);
123+
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes)).isFalse();
124124
}
125125

126126
@ParameterizedTest
127127
@MethodSource("validExitCauseProvider")
128128
void shouldReturnFalseWhenReportingTwiceWithDifferentCauses(final ComputeStage stage, final List<ReplicateStatusCause> causes) {
129-
computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes);
129+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes);
130130
List<ReplicateStatusCause> differentCauses = stage == ComputeStage.PRE
131131
? List.of(ReplicateStatusCause.PRE_COMPUTE_INVALID_DATASET_CHECKSUM)
132132
: List.of(ReplicateStatusCause.POST_COMPUTE_TIMEOUT);
133-
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, differentCauses)).isFalse();
133+
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, differentCauses)).isFalse();
134134
}
135135

136136
@ParameterizedTest
137137
@MethodSource("validExitCauseProvider")
138138
void shouldReturnOriginalCausesAfterSuccessfulReport(final ComputeStage stage, final List<ReplicateStatusCause> causes, final ReplicateStatusCause defaultCause) {
139-
computeExitCauseService.setExitCausesForGivenComputeStage(stage, CHAIN_TASK_ID, causes);
140-
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(stage, CHAIN_TASK_ID, defaultCause)).isEqualTo(causes);
139+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, stage, causes);
140+
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, stage, defaultCause)).isEqualTo(causes);
141141
}
142142

143143
@Test
144144
void shouldAllowReportingPostStageAfterPreStageForSameTask() {
145-
computeExitCauseService.setExitCausesForGivenComputeStage(ComputeStage.PRE, CHAIN_TASK_ID, SINGLE_PRE_CAUSES);
146-
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(ComputeStage.POST, CHAIN_TASK_ID, SINGLE_POST_CAUSES)).isTrue();
145+
computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, ComputeStage.PRE, SINGLE_PRE_CAUSES);
146+
assertThat(computeExitCauseService.setExitCausesForGivenComputeStage(CHAIN_TASK_ID, ComputeStage.POST, SINGLE_POST_CAUSES)).isTrue();
147147
}
148148

149149
@Test
150150
void shouldReturnDefaultCauseWhenNoCausesWereSet() {
151-
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(ComputeStage.PRE, CHAIN_TASK_ID, DEFAULT_PRE_CAUSE))
151+
assertThat(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, ComputeStage.PRE, DEFAULT_PRE_CAUSE))
152152
.isEqualTo(List.of(DEFAULT_PRE_CAUSE));
153153
}
154154
//endregion

src/test/java/com/iexec/worker/compute/post/PostComputeServiceTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ void shouldRunTeePostComputeWithFailDockerResponse(Map.Entry<Integer, ReplicateS
318318
.build();
319319
when(dockerService.run(any())).thenReturn(expectedDockerRunResponse);
320320
when(sgxService.getSgxDriverMode()).thenReturn(SgxDriverMode.LEGACY);
321-
when(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(ComputeStage.POST, CHAIN_TASK_ID, POST_COMPUTE_FAILED_UNKNOWN_ISSUE))
321+
when(computeExitCauseService.getExitCausesAndPruneForGivenComputeStage(CHAIN_TASK_ID, ComputeStage.POST, POST_COMPUTE_FAILED_UNKNOWN_ISSUE))
322322
.thenReturn(List.of(exitCodeKeyToExpectedCauseValue.getValue()));
323323

324324
PostComputeResponse postComputeResponse =

0 commit comments

Comments
 (0)