11/*
2- * Copyright 2020-2023 IEXEC BLOCKCHAIN TECH
2+ * Copyright 2020-2024 IEXEC BLOCKCHAIN TECH
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
5050import static com .iexec .common .replicate .ReplicateStatusCause .*;
5151import static com .iexec .sms .api .TeeSessionGenerationError .UNKNOWN_ISSUE ;
5252
53-
5453@ Slf4j
5554@ Service
5655public class PreComputeService {
@@ -89,22 +88,29 @@ public PreComputeService(
8988 * If the task contains a dataset or some input files, the pre-compute enclave
9089 * is started to handle them.
9190 *
92- * @param taskDescription
93- * @param workerpoolAuth
91+ * @param taskDescription Task description read on-chain
92+ * @param workerpoolAuth Workerpool authorization provided by scheduler
9493 * @return PreComputeResponse
9594 */
9695 public PreComputeResponse runTeePreCompute (TaskDescription taskDescription , WorkerpoolAuthorization workerpoolAuth ) {
97- String chainTaskId = taskDescription .getChainTaskId ();
96+ final String chainTaskId = taskDescription .getChainTaskId ();
9897 final PreComputeResponse .PreComputeResponseBuilder preComputeResponseBuilder = PreComputeResponse .builder ()
9998 .isTeeTask (taskDescription .isTeeTask ());
10099
101100 // verify enclave configuration for compute stage
102- TeeEnclaveConfiguration enclaveConfig = taskDescription .getAppEnclaveConfiguration ();
101+ final TeeEnclaveConfiguration enclaveConfig = taskDescription .getAppEnclaveConfiguration ();
102+ if (enclaveConfig == null ) {
103+ log .error ("No enclave configuration found for task [chainTaskId:{}]" , chainTaskId );
104+ return preComputeResponseBuilder
105+ .exitCause (PRE_COMPUTE_MISSING_ENCLAVE_CONFIGURATION )
106+ .build ();
107+ }
103108 if (!enclaveConfig .getValidator ().isValid ()) {
104109 log .error ("Invalid enclave configuration [chainTaskId:{}, violations:{}]" ,
105110 chainTaskId , enclaveConfig .getValidator ().validate ().toString ());
106- preComputeResponseBuilder .exitCause (PRE_COMPUTE_INVALID_ENCLAVE_CONFIGURATION );
107- return preComputeResponseBuilder .build ();
111+ return preComputeResponseBuilder
112+ .exitCause (PRE_COMPUTE_INVALID_ENCLAVE_CONFIGURATION )
113+ .build ();
108114 }
109115 long teeComputeMaxHeapSize = DataSize
110116 .ofGigabytes (workerConfigService .getTeeComputeMaxHeapSizeGb ())
@@ -117,8 +123,7 @@ public PreComputeResponse runTeePreCompute(TaskDescription taskDescription, Work
117123 return preComputeResponseBuilder .build ();
118124 }
119125 // create secure session
120- TeeSessionGenerationResponse secureSession = null ;
121- TeeSessionGenerationError teeSessionGenerationError = null ;
126+ final TeeSessionGenerationResponse secureSession ;
122127 try {
123128 secureSession = smsService .createTeeSession (workerpoolAuth );
124129 if (secureSession == null ) {
@@ -127,16 +132,15 @@ public PreComputeResponse runTeePreCompute(TaskDescription taskDescription, Work
127132 preComputeResponseBuilder .secureSession (secureSession );
128133 } catch (TeeSessionGenerationException e ) {
129134 log .error ("Failed to create TEE secure session [chainTaskId:{}]" , chainTaskId , e );
130- teeSessionGenerationError = e .getTeeSessionGenerationError ();
131- preComputeResponseBuilder .exitCause (teeSessionGenerationErrorToReplicateStatusCause (e .getTeeSessionGenerationError ()));
135+ return preComputeResponseBuilder
136+ .exitCause (teeSessionGenerationErrorToReplicateStatusCause (e .getTeeSessionGenerationError ()))
137+ .build ();
132138 }
133139
134140 // run TEE pre-compute container if needed
135- if (teeSessionGenerationError == null &&
136- (taskDescription .containsDataset () || taskDescription .containsInputFiles ())) {
137- log .info ("Task contains TEE input data [chainTaskId:{}, containsDataset:{}, " +
138- "containsInputFiles:{}]" , chainTaskId , taskDescription .containsDataset (),
139- taskDescription .containsInputFiles ());
141+ if (taskDescription .containsDataset () || taskDescription .containsInputFiles ()) {
142+ log .info ("Task contains TEE input data [chainTaskId:{}, containsDataset:{}, containsInputFiles:{}]" ,
143+ chainTaskId , taskDescription .containsDataset (), taskDescription .containsInputFiles ());
140144 final ReplicateStatusCause exitCause = downloadDatasetAndFiles (taskDescription , secureSession );
141145 preComputeResponseBuilder .exitCause (exitCause );
142146 }
@@ -152,8 +156,8 @@ private ReplicateStatusCause downloadDatasetAndFiles(
152156 if (exitCode == null || exitCode != 0 ) {
153157 String chainTaskId = taskDescription .getChainTaskId ();
154158 ReplicateStatusCause exitCause = getExitCause (chainTaskId , exitCode );
155- log .error ("Failed to prepare TEE input data [chainTaskId:{}, " +
156- "exitCode:{}, exitCause:{}]" , chainTaskId , exitCode , exitCause );
159+ log .error ("Failed to prepare TEE input data [chainTaskId:{}, exitCode:{}, exitCause:{}]" ,
160+ chainTaskId , exitCode , exitCause );
157161 return exitCause ;
158162 }
159163 } catch (TimeoutException e ) {
0 commit comments