Skip to content

Commit ed455b5

Browse files
author
Ugo Plouviez
committed
Check that the consensus reached block number is available to the worker before revealing
1 parent 38476b0 commit ed455b5

File tree

7 files changed

+38
-31
lines changed

7 files changed

+38
-31
lines changed

src/main/java/com/iexec/worker/amnesia/AmnesiaRecoveryService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public boolean recoverReplicateByRevealing(ContributionAuthorization contributio
178178
}
179179

180180
resultService.saveResultInfo(chainTaskId, replicateModel);
181-
taskExecutorService.reveal(chainTaskId);
181+
taskExecutorService.reveal(chainTaskId, iexecHubService.getLatestBlockNumber());
182182
return true;
183183
}
184184

src/main/java/com/iexec/worker/chain/IexecHubService.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,13 @@ boolean isChainTaskActiveWhenNodeNotSync(String chainTaskId) {
212212
return isChainTaskStatusActive;
213213
}
214214

215-
boolean isChainTaskRevealingWhenNodeNotSync(String chainTaskId) {
216-
boolean isChainTaskStatusRevealing = isBlockchainReadTrueWhenNodeNotSync(chainTaskId, this::isChainTaskRevealing);
215+
boolean isChainTaskRevealingWhenNodeNotSync(String chainTaskId, long consensusReachedBlockNumber) {
216+
boolean isChainTaskStatusRevealing = false;
217+
218+
if (web3jService.isBlockAvailable(consensusReachedBlockNumber)) {
219+
isChainTaskStatusRevealing = isChainTaskRevealing(chainTaskId);
220+
}
221+
217222
if (!isChainTaskStatusRevealing){
218223
log.error("ChainTask status is still not in 'revealing' stage after maxWaitingTime [chainTaskId:{}]", chainTaskId);
219224
}

src/main/java/com/iexec/worker/chain/RevealService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,27 @@ public RevealService(IexecHubService iexecHubService,
2626
this.credentialsService = credentialsService;
2727
}
2828

29-
public boolean canReveal(String chainTaskId) {
29+
public boolean canReveal(String chainTaskId, long consensusReachedBlockNumber) {
3030

3131
Optional<ChainTask> optionalChainTask = iexecHubService.getChainTask(chainTaskId);
3232
if (!optionalChainTask.isPresent()) {
33+
log.error("Task couldn't be retrieved [chainTaskId:{}]", chainTaskId);
3334
return false;
3435
}
3536
ChainTask chainTask = optionalChainTask.get();
3637

37-
boolean isChainTaskRevealing = iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId);
38-
boolean isRevealDeadlineReached = chainTask.getRevealDeadline() < new Date().getTime();
39-
4038
Optional<ChainContribution> optionalContribution = iexecHubService.getChainContribution(chainTaskId);
4139
if (!optionalContribution.isPresent()) {
40+
log.error("Contribution couldn't be retrieved [chainTaskId:{}]", chainTaskId);
4241
return false;
4342
}
4443
ChainContribution chainContribution = optionalContribution.get();
4544
boolean isChainContributionStatusContributed = chainContribution.getStatus().equals(ChainContributionStatus.CONTRIBUTED);
4645
boolean isContributionResultHashConsensusValue = chainContribution.getResultHash().equals(chainTask.getConsensusValue());
4746

47+
boolean isChainTaskRevealing = iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, consensusReachedBlockNumber);
48+
boolean isRevealDeadlineReached = chainTask.getRevealDeadline() < new Date().getTime();
49+
4850
boolean isContributionResultHashCorrect = false;
4951
boolean isContributionResultSealCorrect = false;
5052
String deterministHash = resultService.getDeterministHashForTask(chainTaskId);

src/main/java/com/iexec/worker/executor/TaskExecutorService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,9 @@ public void contribute(ContributionAuthorization contribAuth) {
244244
}
245245

246246
@Async
247-
public void reveal(String chainTaskId) {
247+
public void reveal(String chainTaskId, long consensusReachedBlockNumber) {
248248
log.info("Trying to reveal [chainTaskId:{}]", chainTaskId);
249-
if (!revealService.canReveal(chainTaskId)) {
249+
if (!revealService.canReveal(chainTaskId, consensusReachedBlockNumber)) {
250250
log.warn("The worker will not be able to reveal [chainTaskId:{}]", chainTaskId);
251251
customFeignClient.updateReplicateStatus(chainTaskId, CANT_REVEAL);
252252
return;

src/main/java/com/iexec/worker/pubsub/SubscriptionService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ private void handleTaskNotification(TaskNotification notif) {
191191
break;
192192

193193
case PLEASE_REVEAL:
194-
taskExecutorService.reveal(chainTaskId);
194+
taskExecutorService.reveal(chainTaskId, notif.getBlockNumber());
195195
break;
196196

197197
case PLEASE_UPLOAD:

src/test/java/com/iexec/worker/amnesia/AmnesiaRecoveryServiceTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void shouldNotRecoverByRevealingWhenResultNotFound() {
153153
assertThat(recovered).isEmpty();
154154

155155
Mockito.verify(taskExecutorService, Mockito.times(0))
156-
.reveal(CHAIN_TASK_ID);
156+
.reveal(CHAIN_TASK_ID, blockNumber);
157157
}
158158

159159
@Test
@@ -171,7 +171,7 @@ public void shouldRecoverByRevealingWhenResultFound() {
171171
assertThat(recovered.get(0)).isEqualTo(CHAIN_TASK_ID);
172172

173173
Mockito.verify(taskExecutorService, Mockito.times(1))
174-
.reveal(CHAIN_TASK_ID);
174+
.reveal(CHAIN_TASK_ID, blockNumber);
175175
}
176176

177177
@Test

src/test/java/com/iexec/worker/chain/RevealServiceTests.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ public void canRevealAllValid() {
7171
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
7272
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
7373
when(credentialsService.getCredentials()).thenReturn(credentials);
74-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
74+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
7575

76-
assertThat(revealService.canReveal(chainTaskId)).isTrue();
76+
assertThat(revealService.canReveal(chainTaskId, 1)).isTrue();
7777
}
7878

7979
@Test
@@ -102,9 +102,9 @@ public void cannotRevealSinceChainTaskStatusWrong() {
102102
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
103103
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
104104
when(credentialsService.getCredentials()).thenReturn(credentials);
105-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(false);
105+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(false);
106106

107-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
107+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
108108
}
109109

110110
@Test
@@ -133,9 +133,9 @@ public void cannotRevealSinceRevealDeadlineReached() {
133133
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
134134
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
135135
when(credentialsService.getCredentials()).thenReturn(credentials);
136-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
136+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
137137

138-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
138+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
139139
}
140140

141141
@Test
@@ -164,9 +164,9 @@ public void cannotRevealSinceChainContributionStatusWrong() {
164164
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
165165
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
166166
when(credentialsService.getCredentials()).thenReturn(credentials);
167-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
167+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
168168

169-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
169+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
170170
}
171171

172172
@Test
@@ -195,9 +195,9 @@ public void cannotRevealSinceHashDoesntMatchConsensus() {
195195
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
196196
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
197197
when(credentialsService.getCredentials()).thenReturn(credentials);
198-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
198+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
199199

200-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
200+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
201201
}
202202

203203
@Test
@@ -226,9 +226,9 @@ public void cannotRevealSinceContributionResultHashWrong() {
226226
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
227227
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
228228
when(credentialsService.getCredentials()).thenReturn(credentials);
229-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
229+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
230230

231-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
231+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
232232
}
233233

234234
@Test
@@ -255,17 +255,17 @@ public void cannotRevealSinceContributionResultSealWrong() {
255255
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
256256
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
257257
when(credentialsService.getCredentials()).thenReturn(credentials);
258-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
258+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
259259

260-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
260+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
261261
}
262262

263263
@Test
264264
public void cannotRevealSinceCannotFindChainTask() {
265265
String chainTaskId = "0xd94b63fc2d3ec4b96daf84b403bbafdc8c8517e8e2addd51fec0fa4e67801be8";
266266
when(iexecHubService.getChainTask(chainTaskId)).thenReturn(Optional.empty());
267267

268-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
268+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
269269
}
270270

271271
@Test
@@ -281,10 +281,10 @@ public void cannotRevealSinceCannotFindChainContribution() {
281281
.build());
282282
when(iexecHubService.getChainTask(chainTaskId)).thenReturn(optionalChainTask);
283283
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.empty());
284-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
284+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
285285

286286

287-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
287+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
288288
}
289289

290290
@Test
@@ -313,9 +313,9 @@ public void cannotRevealSinceDeterministHashIsEmpty() {
313313
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
314314
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn("");
315315
when(credentialsService.getCredentials()).thenReturn(credentials);
316-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId)).thenReturn(true);
316+
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
317317

318-
assertThat(revealService.canReveal(chainTaskId)).isFalse();
318+
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
319319
}
320320

321321
@Test

0 commit comments

Comments
 (0)