Skip to content

Commit da76142

Browse files
Merge pull request #194 from iExecBlockchainComputing/wait-block-before-can
Wait block before can
2 parents c4327f4 + 113cb1e commit da76142

File tree

6 files changed

+43
-59
lines changed

6 files changed

+43
-59
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private boolean hasEnoughtStakeToContribute(ChainTask chainTask) {
7979
}
8080

8181
private boolean isTaskActiveToContribute(ChainTask chainTask) {
82-
return iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTask.getChainTaskId());
82+
return iexecHubService.isChainTaskActive(chainTask.getChainTaskId());
8383
}
8484

8585
private boolean isBeforeContributionDeadlineToContribute(ChainTask chainTask) {

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

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -204,28 +204,7 @@ private boolean isBlockchainReadTrueWhenNodeNotSync(String chainTaskId, Function
204204
return false;
205205
}
206206

207-
boolean isChainTaskActiveWhenNodeNotSync(String chainTaskId) {
208-
boolean isChainTaskStatusActive = isBlockchainReadTrueWhenNodeNotSync(chainTaskId, this::isChainTaskActive);
209-
if (!isChainTaskStatusActive){
210-
log.error("ChainTask status is still not in 'active' stage after maxWaitingTime [chainTaskId:{}]", chainTaskId);
211-
}
212-
return isChainTaskStatusActive;
213-
}
214-
215-
boolean isChainTaskRevealingWhenNodeNotSync(String chainTaskId, long consensusReachedBlockNumber) {
216-
boolean isChainTaskStatusRevealing = false;
217-
218-
if (web3jService.isBlockAvailable(consensusReachedBlockNumber)) {
219-
isChainTaskStatusRevealing = isChainTaskRevealing(chainTaskId);
220-
}
221-
222-
if (!isChainTaskStatusRevealing){
223-
log.error("ChainTask status is still not in 'revealing' stage after maxWaitingTime [chainTaskId:{}]", chainTaskId);
224-
}
225-
return isChainTaskStatusRevealing;
226-
}
227-
228-
private Boolean isChainTaskActive(String chainTaskId){
207+
Boolean isChainTaskActive(String chainTaskId){
229208
Optional<ChainTask> chainTask = getChainTask(chainTaskId);
230209
if (chainTask.isPresent()){
231210
switch (chainTask.get().getStatus()){
@@ -244,7 +223,7 @@ private Boolean isChainTaskActive(String chainTaskId){
244223
return false;
245224
}
246225

247-
private Boolean isChainTaskRevealing(String chainTaskId){
226+
public Boolean isChainTaskRevealing(String chainTaskId){
248227
Optional<ChainTask> chainTask = getChainTask(chainTaskId);
249228
if (chainTask.isPresent()){
250229
switch (chainTask.get().getStatus()){

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

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

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

3131
Optional<ChainTask> optionalChainTask = iexecHubService.getChainTask(chainTaskId);
3232
if (!optionalChainTask.isPresent()) {
@@ -35,7 +35,7 @@ public boolean canReveal(String chainTaskId, long consensusReachedBlockNumber) {
3535
}
3636
ChainTask chainTask = optionalChainTask.get();
3737

38-
boolean isChainTaskRevealing = iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, consensusReachedBlockNumber);
38+
boolean isChainTaskRevealing = iexecHubService.isChainTaskRevealing(chainTaskId);
3939
boolean isRevealDeadlineReached = chainTask.getRevealDeadline() < new Date().getTime();
4040

4141
Optional<ChainContribution> optionalContribution = iexecHubService.getChainContribution(chainTaskId);
@@ -67,7 +67,7 @@ public boolean canReveal(String chainTaskId, long consensusReachedBlockNumber) {
6767
log.info("All the conditions are valid for the reveal to happen [chainTaskId:{}]", chainTaskId);
6868
} else {
6969
log.warn("One or more conditions are not met for the reveal to happen [chainTaskId:{}, " +
70-
"isChainTaskRevealingWhenNodeNotSync:{}, isRevealDeadlineReached:{}, " +
70+
"isChainTaskRevealing:{}, isRevealDeadlineReached:{}, " +
7171
"isChainContributionStatusContributed:{}, isContributionResultHashConsensusValue:{}, " +
7272
"isContributionResultHashCorrect:{}, isContributionResultSealCorrect:{}]", chainTaskId,
7373
isChainTaskRevealing, isRevealDeadlineReached,

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.iexec.worker.chain.ContributionService;
1313
import com.iexec.worker.chain.IexecHubService;
1414
import com.iexec.worker.chain.RevealService;
15+
import com.iexec.worker.chain.Web3jService;
1516
import com.iexec.worker.config.WorkerConfigurationService;
1617
import com.iexec.worker.dataset.DatasetService;
1718
import com.iexec.worker.docker.DockerComputationService;
@@ -51,6 +52,7 @@ public class TaskExecutorService {
5152
private WorkerConfigurationService workerConfigurationService;
5253
private IexecHubService iexecHubService;
5354
private SmsService smsService;
55+
private Web3jService web3jService;
5456

5557
// internal variables
5658
private int maxNbExecutions;
@@ -64,17 +66,18 @@ public TaskExecutorService(DatasetService datasetService,
6466
RevealService revealService,
6567
WorkerConfigurationService workerConfigurationService,
6668
IexecHubService iexecHubService,
67-
SmsService smsService) {
69+
SmsService smsService,
70+
Web3jService web3jService) {
6871
this.datasetService = datasetService;
6972
this.dockerComputationService = dockerComputationService;
7073
this.resultService = resultService;
7174
this.contributionService = contributionService;
7275
this.customFeignClient = customFeignClient;
7376
this.revealService = revealService;
74-
this.customFeignClient = customFeignClient;
7577
this.workerConfigurationService = workerConfigurationService;
7678
this.iexecHubService = iexecHubService;
7779
this.smsService = smsService;
80+
this.web3jService = web3jService;
7881

7982
maxNbExecutions = Runtime.getRuntime().availableProcessors() - 1;
8083
executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(maxNbExecutions);
@@ -244,9 +247,15 @@ public void contribute(ContributionAuthorization contribAuth) {
244247
}
245248

246249
@Async
247-
public void reveal(String chainTaskId, long consensusReachedBlockNumber) {
250+
public void reveal(String chainTaskId, long consensusBlock) {
248251
log.info("Trying to reveal [chainTaskId:{}]", chainTaskId);
249-
if (!revealService.canReveal(chainTaskId, consensusReachedBlockNumber)) {
252+
if (web3jService.isBlockAvailable(consensusBlock)) {
253+
log.warn("Sync issues before canReveal (latestBlock before consensusBlock) [chainTaskId:{}, latestBlock:{}, " +
254+
"consensusBlock:{}]", chainTaskId, web3jService.getLatestBlockNumber(), consensusBlock);
255+
return;
256+
}
257+
258+
if (!revealService.canReveal(chainTaskId)) {
250259
log.warn("The worker will not be able to reveal [chainTaskId:{}]", chainTaskId);
251260
customFeignClient.updateReplicateStatus(chainTaskId, CANT_REVEAL);
252261
return;

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@
99
import org.mockito.InjectMocks;
1010
import org.mockito.Mock;
1111
import org.mockito.MockitoAnnotations;
12-
import org.web3j.crypto.Sign;
1312

1413
import java.math.BigInteger;
1514
import java.util.Date;
1615
import java.util.Optional;
1716

18-
import static com.iexec.common.chain.ChainTaskStatus.ACTIVE;
19-
import static com.iexec.common.chain.ChainTaskStatus.REVEALING;
2017
import static com.iexec.worker.chain.ContributionService.computeResultHash;
2118
import static com.iexec.worker.chain.ContributionService.computeResultSeal;
2219
import static org.assertj.core.api.Java6Assertions.assertThat;
@@ -105,7 +102,7 @@ public void GetCanContributeStatusShouldReturnCanContribute() {
105102
when(iexecHubService.getChainAccount()).thenReturn(Optional.of(ChainAccount.builder().deposit(1000).build()));
106103
when(iexecHubService.getChainDeal(chainDealId)).thenReturn(Optional.of(ChainDeal.builder().workerStake(BigInteger.valueOf(5)).build()));
107104
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.of(ChainContribution.builder().status(ChainContributionStatus.UNSET).build()));
108-
when(iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTaskId)).thenReturn(true);
105+
when(iexecHubService.isChainTaskActive(chainTaskId)).thenReturn(true);
109106

110107
assertThat(contributionService.getCanContributeStatus(chainTaskId).isPresent()).isTrue();
111108
assertThat(contributionService.getCanContributeStatus(chainTaskId).get().equals(ReplicateStatus.CAN_CONTRIBUTE)).isTrue();
@@ -127,7 +124,7 @@ public void GetCanContributeStatusShouldReturnStakeTooLoww() {
127124
when(iexecHubService.getChainAccount()).thenReturn(Optional.of(ChainAccount.builder().deposit(0).build()));
128125
when(iexecHubService.getChainDeal(chainDealId)).thenReturn(Optional.of(ChainDeal.builder().workerStake(BigInteger.valueOf(5)).build()));
129126
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.of(ChainContribution.builder().status(ChainContributionStatus.UNSET).build()));
130-
when(iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTaskId)).thenReturn(true);
127+
when(iexecHubService.isChainTaskActive(chainTaskId)).thenReturn(true);
131128

132129
assertThat(contributionService.getCanContributeStatus(chainTaskId).isPresent()).isTrue();
133130
assertThat(contributionService.getCanContributeStatus(chainTaskId).get().equals(ReplicateStatus.CANT_CONTRIBUTE_SINCE_STAKE_TOO_LOW)).isTrue();
@@ -149,7 +146,7 @@ public void GetCanContributeStatusShouldReturnTaskNotActive() {
149146
when(iexecHubService.getChainAccount()).thenReturn(Optional.of(ChainAccount.builder().deposit(1000).build()));
150147
when(iexecHubService.getChainDeal(chainDealId)).thenReturn(Optional.of(ChainDeal.builder().workerStake(BigInteger.valueOf(5)).build()));
151148
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.of(ChainContribution.builder().status(ChainContributionStatus.UNSET).build()));
152-
when(iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTaskId)).thenReturn(false);
149+
when(iexecHubService.isChainTaskActive(chainTaskId)).thenReturn(false);
153150

154151
assertThat(contributionService.getCanContributeStatus(chainTaskId).isPresent()).isTrue();
155152
assertThat(contributionService.getCanContributeStatus(chainTaskId).get().equals(ReplicateStatus.CANT_CONTRIBUTE_SINCE_TASK_NOT_ACTIVE)).isTrue();
@@ -171,7 +168,7 @@ public void GetCanContributeStatusShouldReturnAfterDeadline() {
171168
when(iexecHubService.getChainAccount()).thenReturn(Optional.of(ChainAccount.builder().deposit(1000).build()));
172169
when(iexecHubService.getChainDeal(chainDealId)).thenReturn(Optional.of(ChainDeal.builder().workerStake(BigInteger.valueOf(5)).build()));
173170
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.of(ChainContribution.builder().status(ChainContributionStatus.UNSET).build()));
174-
when(iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTaskId)).thenReturn(true);
171+
when(iexecHubService.isChainTaskActive(chainTaskId)).thenReturn(true);
175172

176173
assertThat(contributionService.getCanContributeStatus(chainTaskId).isPresent()).isTrue();
177174
assertThat(contributionService.getCanContributeStatus(chainTaskId).get().equals(ReplicateStatus.CANT_CONTRIBUTE_SINCE_AFTER_DEADLINE)).isTrue();
@@ -193,7 +190,7 @@ public void GetCanContributeStatusShouldReturnContributed() {
193190
when(iexecHubService.getChainAccount()).thenReturn(Optional.of(ChainAccount.builder().deposit(1000).build()));
194191
when(iexecHubService.getChainDeal(chainDealId)).thenReturn(Optional.of(ChainDeal.builder().workerStake(BigInteger.valueOf(5)).build()));
195192
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.of(ChainContribution.builder().status(ChainContributionStatus.CONTRIBUTED).build()));
196-
when(iexecHubService.isChainTaskActiveWhenNodeNotSync(chainTaskId)).thenReturn(true);
193+
when(iexecHubService.isChainTaskActive(chainTaskId)).thenReturn(true);
197194

198195
assertThat(contributionService.getCanContributeStatus(chainTaskId).isPresent()).isTrue();
199196
assertThat(contributionService.getCanContributeStatus(chainTaskId).get().equals(ReplicateStatus.CANT_CONTRIBUTE_SINCE_CONTRIBUTION_ALREADY_SET)).isTrue();

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

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.iexec.common.chain.ChainContribution;
44
import com.iexec.common.chain.ChainContributionStatus;
55
import com.iexec.common.chain.ChainTask;
6-
import com.iexec.common.chain.ChainTaskStatus;
76
import com.iexec.common.contract.generated.IexecHubABILegacy;
87
import com.iexec.common.utils.HashUtils;
98
import com.iexec.worker.result.ResultService;
@@ -71,9 +70,9 @@ public void canRevealAllValid() {
7170
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
7271
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
7372
when(credentialsService.getCredentials()).thenReturn(credentials);
74-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
73+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
7574

76-
assertThat(revealService.canReveal(chainTaskId, 1)).isTrue();
75+
assertThat(revealService.canReveal(chainTaskId)).isTrue();
7776
}
7877

7978
@Test
@@ -102,9 +101,9 @@ public void cannotRevealSinceChainTaskStatusWrong() {
102101
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
103102
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
104103
when(credentialsService.getCredentials()).thenReturn(credentials);
105-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(false);
104+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(false);
106105

107-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
106+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
108107
}
109108

110109
@Test
@@ -133,9 +132,9 @@ public void cannotRevealSinceRevealDeadlineReached() {
133132
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
134133
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
135134
when(credentialsService.getCredentials()).thenReturn(credentials);
136-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
135+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
137136

138-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
137+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
139138
}
140139

141140
@Test
@@ -164,9 +163,9 @@ public void cannotRevealSinceChainContributionStatusWrong() {
164163
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
165164
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
166165
when(credentialsService.getCredentials()).thenReturn(credentials);
167-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
166+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
168167

169-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
168+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
170169
}
171170

172171
@Test
@@ -195,9 +194,9 @@ public void cannotRevealSinceHashDoesntMatchConsensus() {
195194
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
196195
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
197196
when(credentialsService.getCredentials()).thenReturn(credentials);
198-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
197+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
199198

200-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
199+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
201200
}
202201

203202
@Test
@@ -226,9 +225,9 @@ public void cannotRevealSinceContributionResultHashWrong() {
226225
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
227226
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
228227
when(credentialsService.getCredentials()).thenReturn(credentials);
229-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
228+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
230229

231-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
230+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
232231
}
233232

234233
@Test
@@ -255,17 +254,17 @@ public void cannotRevealSinceContributionResultSealWrong() {
255254
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
256255
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn(deterministHash);
257256
when(credentialsService.getCredentials()).thenReturn(credentials);
258-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
257+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
259258

260-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
259+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
261260
}
262261

263262
@Test
264263
public void cannotRevealSinceCannotFindChainTask() {
265264
String chainTaskId = "0xd94b63fc2d3ec4b96daf84b403bbafdc8c8517e8e2addd51fec0fa4e67801be8";
266265
when(iexecHubService.getChainTask(chainTaskId)).thenReturn(Optional.empty());
267266

268-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
267+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
269268
}
270269

271270
@Test
@@ -281,10 +280,10 @@ public void cannotRevealSinceCannotFindChainContribution() {
281280
.build());
282281
when(iexecHubService.getChainTask(chainTaskId)).thenReturn(optionalChainTask);
283282
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(Optional.empty());
284-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
283+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
285284

286285

287-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
286+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
288287
}
289288

290289
@Test
@@ -313,9 +312,9 @@ public void cannotRevealSinceDeterministHashIsEmpty() {
313312
when(iexecHubService.getChainContribution(chainTaskId)).thenReturn(optionalChainContribution);
314313
when(resultService.getDeterministHashForTask(chainTaskId)).thenReturn("");
315314
when(credentialsService.getCredentials()).thenReturn(credentials);
316-
when(iexecHubService.isChainTaskRevealingWhenNodeNotSync(chainTaskId, 1)).thenReturn(true);
315+
when(iexecHubService.isChainTaskRevealing(chainTaskId)).thenReturn(true);
317316

318-
assertThat(revealService.canReveal(chainTaskId, 1)).isFalse();
317+
assertThat(revealService.canReveal(chainTaskId)).isFalse();
319318
}
320319

321320
@Test

0 commit comments

Comments
 (0)