33import com .iexec .common .chain .ChainReceipt ;
44import com .iexec .common .chain .ContributionAuthorization ;
55import com .iexec .common .dapp .DappType ;
6- import com .iexec .common .replicate .AvailableReplicateModel ;
76import com .iexec .common .replicate .ReplicateDetails ;
87import com .iexec .common .replicate .ReplicateStatus ;
98import com .iexec .common .security .Signature ;
9+ import com .iexec .common .task .TaskDescription ;
1010import com .iexec .common .utils .BytesUtils ;
1111import com .iexec .common .utils .SignatureUtils ;
1212import com .iexec .worker .chain .ContributionService ;
1717import com .iexec .worker .dataset .DatasetService ;
1818import com .iexec .worker .docker .DockerComputationService ;
1919import com .iexec .worker .feign .CustomFeignClient ;
20- import com .iexec .worker .replicate .ReplicateService ;
2120import com .iexec .worker .result .ResultService ;
2221import com .iexec .worker .sms .SmsService ;
2322import com .iexec .worker .utils .LoggingUtils ;
24-
2523import lombok .extern .slf4j .Slf4j ;
26-
2724import org .springframework .scheduling .annotation .Async ;
2825import org .springframework .stereotype .Service ;
2926
@@ -54,11 +51,11 @@ public class TaskExecutorService {
5451 private IexecHubService iexecHubService ;
5552 private SmsService smsService ;
5653 private Web3jService web3jService ;
57- private ReplicateService replicateService ;
5854
5955 // internal variables
6056 private int maxNbExecutions ;
6157 private ThreadPoolExecutor executor ;
58+ private String corePublicAddress ;
6259
6360 public TaskExecutorService (DatasetService datasetService ,
6461 DockerComputationService dockerComputationService ,
@@ -69,8 +66,7 @@ public TaskExecutorService(DatasetService datasetService,
6966 WorkerConfigurationService workerConfigurationService ,
7067 IexecHubService iexecHubService ,
7168 SmsService smsService ,
72- Web3jService web3jService ,
73- ReplicateService replicateService ) {
69+ Web3jService web3jService ) {
7470 this .datasetService = datasetService ;
7571 this .dockerComputationService = dockerComputationService ;
7672 this .resultService = resultService ;
@@ -81,10 +77,10 @@ public TaskExecutorService(DatasetService datasetService,
8177 this .iexecHubService = iexecHubService ;
8278 this .smsService = smsService ;
8379 this .web3jService = web3jService ;
84- this .replicateService = replicateService ;
8580
8681 maxNbExecutions = Runtime .getRuntime ().availableProcessors () - 1 ;
8782 executor = (ThreadPoolExecutor ) Executors .newFixedThreadPool (maxNbExecutions );
83+ corePublicAddress = customFeignClient .getPublicConfiguration ().getSchedulerPublicAddress ();
8884 }
8985
9086 public boolean canAcceptMoreReplicates () {
@@ -95,11 +91,10 @@ public CompletableFuture<Void> addReplicate(ContributionAuthorization contributi
9591
9692 String chainTaskId = contributionAuth .getChainTaskId ();
9793
98- Optional <AvailableReplicateModel > replicateModel =
99- replicateService .contributionAuthToReplicate (contributionAuth );
94+ Optional <TaskDescription > taskDescriptionFromChain = iexecHubService .getTaskDescriptionFromChain (chainTaskId );
10095
10196 return CompletableFuture .supplyAsync (() -> compute (contributionAuth ), executor )
102- .thenApply (stdout -> resultService .saveResult (chainTaskId , replicateModel .get (), stdout ))
97+ .thenApply (stdout -> resultService .saveResult (chainTaskId , taskDescriptionFromChain .get (), stdout ))
10398 .thenAccept (isSaved -> {
10499 if (isSaved ) contribute (contributionAuth );
105100 })
@@ -115,6 +110,13 @@ public CompletableFuture<Void> addReplicate(ContributionAuthorization contributi
115110 public void tryToContribute (ContributionAuthorization contributionAuth ) {
116111
117112 String chainTaskId = contributionAuth .getChainTaskId ();
113+
114+ if (!contributionService .isContributionAuthorizationValid (contributionAuth , corePublicAddress )) {
115+ log .error ("The contribution contribAuth is NOT valid, the task will not be performed"
116+ + " [chainTaskId:{}, contribAuth:{}]" , chainTaskId , contributionAuth );
117+ return ;
118+ }
119+
118120 boolean isResultAvailable = resultService .isResultAvailable (chainTaskId );
119121
120122 if (!isResultAvailable ) {
@@ -142,31 +144,30 @@ private String compute(ContributionAuthorization contributionAuth) {
142144 throw new UnsupportedOperationException ("Task needs TEE, I don't support it" );
143145 }
144146
145- Optional <AvailableReplicateModel > optionalAvailableReplicateModel =
146- replicateService .contributionAuthToReplicate (contributionAuth );
147+ Optional <TaskDescription > taskDescriptionFromChain = iexecHubService .getTaskDescriptionFromChain (chainTaskId );
147148
148- if (!optionalAvailableReplicateModel .isPresent ()){
149+ if (!taskDescriptionFromChain .isPresent ()){
149150 stdout = "AvailableReplicateModel not found" ;
150151 log .error (stdout + " [chainTaskId:{}]" , chainTaskId );
151152 return stdout ;
152153 }
153154
154- AvailableReplicateModel availableReplicateModel = optionalAvailableReplicateModel .get ();
155+ TaskDescription taskDescription = taskDescriptionFromChain .get ();
155156
156157 // check app type
157158 customFeignClient .updateReplicateStatus (chainTaskId , RUNNING );
158- if (!availableReplicateModel .getAppType ().equals (DappType .DOCKER )) {
159+ if (!taskDescription .getAppType ().equals (DappType .DOCKER )) {
159160 stdout = "Application is not of type Docker" ;
160161 log .error (stdout + " [chainTaskId:{}]" , chainTaskId );
161162 return stdout ;
162163 }
163164
164165 // pull app
165166 customFeignClient .updateReplicateStatus (chainTaskId , APP_DOWNLOADING );
166- boolean isAppDownloaded = dockerComputationService .dockerPull (chainTaskId , availableReplicateModel .getAppUri ());
167+ boolean isAppDownloaded = dockerComputationService .dockerPull (chainTaskId , taskDescription .getAppUri ());
167168 if (!isAppDownloaded ) {
168169 customFeignClient .updateReplicateStatus (chainTaskId , APP_DOWNLOAD_FAILED );
169- stdout = "Failed to pull application image, URI:" + availableReplicateModel .getAppUri ();
170+ stdout = "Failed to pull application image, URI:" + taskDescription .getAppUri ();
170171 log .error (stdout + " [chainTaskId:{}]" , chainTaskId );
171172 return stdout ;
172173 }
@@ -175,10 +176,10 @@ private String compute(ContributionAuthorization contributionAuth) {
175176
176177 // pull data
177178 customFeignClient .updateReplicateStatus (chainTaskId , DATA_DOWNLOADING );
178- boolean isDatasetDownloaded = datasetService .downloadDataset (chainTaskId , availableReplicateModel .getDatasetUri ());
179+ boolean isDatasetDownloaded = datasetService .downloadDataset (chainTaskId , taskDescription .getDatasetUri ());
179180 if (!isDatasetDownloaded ) {
180181 customFeignClient .updateReplicateStatus (chainTaskId , DATA_DOWNLOAD_FAILED );
181- stdout = "Failed to pull dataset, URI:" + availableReplicateModel .getDatasetUri ();
182+ stdout = "Failed to pull dataset, URI:" + taskDescription .getDatasetUri ();
182183 log .error (stdout + " [chainTaskId:{}]" , chainTaskId );
183184 return stdout ;
184185 }
@@ -197,19 +198,19 @@ private String compute(ContributionAuthorization contributionAuth) {
197198 boolean isDatasetDecrypted = false ;
198199
199200 if (isDatasetDecryptionNeeded ) {
200- isDatasetDecrypted = datasetService .decryptDataset (chainTaskId , availableReplicateModel .getDatasetUri ());
201+ isDatasetDecrypted = datasetService .decryptDataset (chainTaskId , taskDescription .getDatasetUri ());
201202 }
202203
203204 if (isDatasetDecryptionNeeded && !isDatasetDecrypted ) {
204205 customFeignClient .updateReplicateStatus (chainTaskId , COMPUTE_FAILED );
205- stdout = "Failed to decrypt dataset, URI:" + availableReplicateModel .getDatasetUri ();
206+ stdout = "Failed to decrypt dataset, URI:" + taskDescription .getDatasetUri ();
206207 log .error (stdout + " [chainTaskId:{}]" , chainTaskId );
207208 return stdout ;
208209 }
209210
210211 // compute
211- String datasetFilename = datasetService .getDatasetFilename (availableReplicateModel .getDatasetUri ());
212- stdout = dockerComputationService .dockerRunAndGetLogs (availableReplicateModel , datasetFilename );
212+ String datasetFilename = datasetService .getDatasetFilename (taskDescription .getDatasetUri ());
213+ stdout = dockerComputationService .dockerRunAndGetLogs (taskDescription , datasetFilename );
213214
214215 if (stdout .isEmpty ()) {
215216 customFeignClient .updateReplicateStatus (chainTaskId , COMPUTE_FAILED );
0 commit comments