Skip to content

Commit 588114c

Browse files
authored
feat: add bulk cid to DealParams and chainDealId to TaskDescription (#144)
1 parent 6157056 commit 588114c

File tree

4 files changed

+103
-5
lines changed

4 files changed

+103
-5
lines changed

src/main/java/com/iexec/commons/poco/chain/DealParams.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ public class DealParams {
112112
@JsonProperty("iexec_secrets")
113113
Map<String, String> iexecSecrets = Map.of();
114114

115+
@Builder.Default
116+
@JsonProperty("bulk_cid")
117+
String bulkCid = "";
118+
115119
@JsonPOJOBuilder(withPrefix = "")
116120
public static class DealParamsBuilder {
117121
}
@@ -129,7 +133,7 @@ public static DealParams createFromString(final String paramString) {
129133
try {
130134
return new ObjectMapper().readValue(paramString, DealParams.class);
131135
} catch (IOException e) {
132-
log.warn("Could not deserialize arguments to DealParams [string:{}]", paramString);
136+
log.warn("Could not deserialize arguments to DealParams [string:{}]", paramString, e);
133137
//the requester want to execute one task with the whole string
134138
return DealParams.builder()
135139
.iexecArgs(paramString)

src/main/java/com/iexec/commons/poco/task/TaskDescription.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class TaskDescription {
4747
String datasetChecksum;
4848

4949
// deal
50+
String chainDealId;
5051
String appAddress;
5152
String appOwner;
5253
BigInteger appPrice;
@@ -87,10 +88,10 @@ public class TaskDescription {
8788
* non-empty values, false otherwise.
8889
*/
8990
public boolean containsDataset() {
90-
return !StringUtils.isEmpty(datasetAddress) &&
91+
return !StringUtils.isBlank(datasetAddress) &&
9192
!datasetAddress.equals(BytesUtils.EMPTY_ADDRESS) &&
92-
!StringUtils.isEmpty(datasetUri) &&
93-
!StringUtils.isEmpty(datasetChecksum);
93+
!StringUtils.isBlank(datasetUri) &&
94+
!StringUtils.isBlank(datasetChecksum);
9495
}
9596

9697
/**
@@ -116,6 +117,15 @@ public String getAppCommand() {
116117
appEnclaveConfiguration.getEntrypoint() + " " + dealParams.getIexecArgs();
117118
}
118119

120+
/**
121+
* Returns whether the request is for a bulk operation or not.
122+
*
123+
* @return {@literal true} for a bulk operation, {@literal false} otherwise
124+
*/
125+
public boolean isBulkRequest() {
126+
return dealParams != null && !StringUtils.isBlank(dealParams.getBulkCid());
127+
}
128+
119129
/**
120130
* A task is eligible to the Contribute And Finalize flow
121131
* if it matches the following conditions:
@@ -131,6 +141,15 @@ public boolean isEligibleToContributeAndFinalize() {
131141
return isTeeTask && BigInteger.ONE.equals(trust);
132142
}
133143

144+
/**
145+
* Returns whether pre-compute stage must be executed to retrieve data
146+
*
147+
* @return {@literal true} if pre-compute has to be executed, {@literal false}
148+
*/
149+
public boolean requiresPreCompute() {
150+
return containsDataset() || containsInputFiles() || isBulkRequest();
151+
}
152+
134153
/**
135154
* Create a {@link TaskDescription} from the provided chain deal. This method
136155
* if preferred to constructors or the builder method.
@@ -159,6 +178,7 @@ public static TaskDescription toTaskDescription(final ChainDeal chainDeal, final
159178
.datasetUri(datasetUri)
160179
.datasetChecksum(datasetChecksum)
161180
// deal
181+
.chainDealId(chainDeal.getChainDealId())
162182
.appAddress(chainDeal.getDappPointer())
163183
.appOwner(chainDeal.getDappOwner())
164184
.appPrice(chainDeal.getDappPrice())

src/test/java/com/iexec/commons/poco/chain/DealParamsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ void shouldReadArgsWithoutJson() {
4646

4747
@Test
4848
void shouldReadArgsInJson() {
49-
final DealParams params = DealParams.createFromString("{\"iexec_args\":\"" + ARGS + "\"}");
49+
final DealParams params = DealParams.createFromString("{\"iexec_args\":\"" + ARGS + "\", \"bulk_cid\":\"cid\"}");
5050
assertThat(params.getIexecArgs()).isEqualTo(ARGS);
5151
assertThat(params.getIexecInputFiles()).isNotNull();
5252
assertThat(params.getIexecInputFiles()).isEmpty();
5353
assertThat(params.getIexecSecrets()).isNotNull();
5454
assertThat(params.getIexecSecrets()).isEmpty();
55+
assertThat(params.getBulkCid()).isEqualTo("cid");
5556
}
5657

5758
@Test

src/test/java/com/iexec/commons/poco/task/TaskDescriptionTests.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,38 @@ void shouldGenerateAppCommandWithEntrypointAndArgs() {
309309
}
310310
// endregion
311311

312+
// region isBulkRequest
313+
@Test
314+
void shouldBeBulkRequest() {
315+
final DealParams dealParams = DealParams.builder()
316+
.bulkCid("cid")
317+
.build();
318+
final TaskDescription taskDescription = TaskDescription.builder()
319+
.dealParams(dealParams)
320+
.build();
321+
assertTrue(taskDescription.isBulkRequest());
322+
}
323+
324+
@ParameterizedTest
325+
@NullSource
326+
@MethodSource("provideDealParamsWithoutBulkCid")
327+
void shouldNotBeBulkRequest(final DealParams dealParams) {
328+
final TaskDescription taskDescription = TaskDescription.builder()
329+
.dealParams(dealParams)
330+
.build();
331+
assertFalse(taskDescription.isBulkRequest());
332+
}
333+
334+
private static Stream<Arguments> provideDealParamsWithoutBulkCid() {
335+
return Stream.of(
336+
Arguments.of(DealParams.builder().build()),
337+
Arguments.of(DealParams.builder().bulkCid(null).build()),
338+
Arguments.of(DealParams.builder().bulkCid("").build()),
339+
Arguments.of(DealParams.builder().bulkCid(" ").build())
340+
);
341+
}
342+
// endregion
343+
312344
// region isEligibleToContributeAndFinalize
313345
@ParameterizedTest
314346
@ValueSource(strings = {"", CALLBACK})
@@ -344,4 +376,45 @@ void shouldNotBeEligibleToContributeAndFinalizeSinceWrongTrust() {
344376
assertFalse(taskDescription.isEligibleToContributeAndFinalize());
345377
}
346378
// endregion
379+
380+
// region requiresPreCompute
381+
@ParameterizedTest
382+
@MethodSource("provideDealParamsForTaskPreCompute")
383+
void shouldRequirePreCompute(final TaskDescription taskDescription) {
384+
assertTrue(taskDescription.requiresPreCompute());
385+
}
386+
387+
private static Stream<Arguments> provideDealParamsForTaskPreCompute() {
388+
return Stream.of(
389+
Arguments.of(TaskDescription.builder().datasetAddress("0x01").datasetUri("http://dataset-url").datasetChecksum("0xabc").build()),
390+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().bulkCid("cid").build()).build()),
391+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().iexecInputFiles(List.of("http://file1", "http://file2")).build()).build())
392+
);
393+
}
394+
395+
@ParameterizedTest
396+
@MethodSource("provideDealParamsForTaskWithoutPreCompute")
397+
void shouldNotRequirePreCompute(final TaskDescription taskDescription) {
398+
assertFalse(taskDescription.requiresPreCompute());
399+
}
400+
401+
private static Stream<Arguments> provideDealParamsForTaskWithoutPreCompute() {
402+
return Stream.of(
403+
Arguments.of(TaskDescription.builder().build()),
404+
Arguments.of(TaskDescription.builder().datasetAddress(EMPTY_ADDRESS).build()),
405+
Arguments.of(TaskDescription.builder().datasetAddress(" ").build()),
406+
Arguments.of(TaskDescription.builder().datasetUri("").build()),
407+
Arguments.of(TaskDescription.builder().datasetUri(" ").build()),
408+
Arguments.of(TaskDescription.builder().datasetChecksum("").build()),
409+
Arguments.of(TaskDescription.builder().datasetChecksum(" ").build()),
410+
Arguments.of(TaskDescription.builder().dealParams(null).build()),
411+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().build()).build()),
412+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().bulkCid(null).build()).build()),
413+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().bulkCid("").build()).build()),
414+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().bulkCid(" ").build()).build()),
415+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().iexecInputFiles(null).build()).build()),
416+
Arguments.of(TaskDescription.builder().dealParams(DealParams.builder().iexecInputFiles(List.of()).build()).build())
417+
);
418+
}
419+
// endregion
347420
}

0 commit comments

Comments
 (0)