12
12
import java .io .IOException ;
13
13
import java .util .UUID ;
14
14
import lombok .extern .slf4j .Slf4j ;
15
- import org .eclipse .xpanse .tofu .maker .models .exceptions .ResultAlreadyReturnedOrRequestIdInvalidException ;
16
15
import org .eclipse .xpanse .tofu .maker .models .response .OpenTofuResult ;
16
+ import org .eclipse .xpanse .tofu .maker .models .response .ReFetchResult ;
17
+ import org .eclipse .xpanse .tofu .maker .models .response .ReFetchState ;
17
18
import org .eclipse .xpanse .tofu .maker .utils .OpenTofuResultSerializer ;
18
19
import org .springframework .beans .factory .annotation .Value ;
19
- import org .springframework .http .ResponseEntity ;
20
20
import org .springframework .stereotype .Component ;
21
21
22
22
/** OpenTofu service classes are manage task result. */
@@ -30,9 +30,6 @@ public class OpenTofuResultPersistenceManage {
30
30
@ Value ("${failed.callback.response.store.location}" )
31
31
private String failedCallbackStoreLocation ;
32
32
33
- @ Value ("${clean.workspace.after.deployment.enabled:true}" )
34
- private Boolean cleanWorkspaceAfterDeployment ;
35
-
36
33
@ Resource private OpenTofuScriptsHelper scriptsHelper ;
37
34
@ Resource private OpenTofuResultSerializer openTofuResultSerializer ;
38
35
@@ -69,40 +66,50 @@ public void persistOpenTofuResult(OpenTofuResult result) {
69
66
* @param requestId requestId.
70
67
* @return OpenTofuResult.
71
68
*/
72
- public ResponseEntity < OpenTofuResult > retrieveOpenTofuResultByRequestId (UUID requestId ) {
69
+ public ReFetchResult retrieveOpenTofuResultByRequestId (UUID requestId ) {
73
70
File resultFile = new File (getFilePath (requestId ), getFileName (requestId ));
74
- if (!resultFile . exists () && ! resultFile . isFile ( )) {
75
- log . warn ( "Result file does not exist: {} " , resultFile . getAbsolutePath () );
71
+ if (!isValidResultFile ( resultFile )) {
72
+ String errorMsg = String . format ( "Not found result file for requestId %s. " , requestId );
76
73
if (isDeployingInProgress (requestId )) {
77
- return ResponseEntity .noContent ().build ();
74
+ errorMsg = errorMsg + " The order is still in progress." ;
75
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .ORDER_IN_PROGRESS );
78
76
}
79
- throw new ResultAlreadyReturnedOrRequestIdInvalidException (
80
- "Result file does not exist: " + resultFile .getAbsolutePath ());
77
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .RESULT_NOT_FOUND );
81
78
}
82
79
try (FileInputStream fis = new FileInputStream (resultFile )) {
83
- byte [] openTofuResultData = fis .readAllBytes ();
84
- OpenTofuResult openTofuResult =
85
- openTofuResultSerializer .deserialize (openTofuResultData );
86
- fis .close ();
80
+ OpenTofuResult terraformResult =
81
+ openTofuResultSerializer .deserialize (fis .readAllBytes ());
87
82
deleteResultFileAndDirectory (resultFile );
88
- return ResponseEntity .ok (openTofuResult );
89
- } catch (IOException e ) {
90
- log .error ("Failed to retrieve OpenTofuResult for requestId: {}" , requestId , e );
91
- throw new ResultAlreadyReturnedOrRequestIdInvalidException (
92
- "Failed to retrieve OpenTofuResult for requestId: " + requestId );
83
+ return ReFetchResult .builder ()
84
+ .requestId (requestId )
85
+ .state (ReFetchState .OK )
86
+ .openTofuResult (terraformResult )
87
+ .build ();
88
+ } catch (Exception e ) {
89
+ String errorMsg =
90
+ String .format ("Failed to parse result file for requestId %s" , requestId );
91
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .RESULT_PARSE_FAILED );
93
92
}
94
93
}
95
94
95
+ private ReFetchResult buildErrorResponse (
96
+ UUID requestId , String errorMessage , ReFetchState state ) {
97
+ log .error (errorMessage );
98
+ return ReFetchResult .builder ()
99
+ .requestId (requestId )
100
+ .state (state )
101
+ .errorMessage (errorMessage )
102
+ .build ();
103
+ }
104
+
105
+ private boolean isValidResultFile (File file ) {
106
+ return file .exists () && file .isFile ();
107
+ }
108
+
96
109
private boolean isDeployingInProgress (UUID requestId ) {
97
- String workspace = scriptsHelper .buildTaskWorkspace (requestId .toString ());
98
- File targetFile ;
99
- if (cleanWorkspaceAfterDeployment ) {
100
- targetFile = new File (workspace );
101
- return targetFile .exists () && targetFile .isDirectory ();
102
- } else {
103
- targetFile = new File (workspace , TF_LOCK_FILE_NAME );
104
- return targetFile .exists () && targetFile .isFile ();
105
- }
110
+ File workspace = scriptsHelper .getTaskWorkspace (requestId .toString ());
111
+ File targetFile = new File (workspace , TF_LOCK_FILE_NAME );
112
+ return targetFile .exists () && targetFile .isFile ();
106
113
}
107
114
108
115
private void deleteResultFileAndDirectory (File resultFile ) {
@@ -123,7 +130,9 @@ private void deleteRecursively(File file) {
123
130
}
124
131
}
125
132
}
126
- file .delete ();
133
+ if (file .delete ()) {
134
+ log .info ("File deleted successfully: {}" , file .getAbsolutePath ());
135
+ }
127
136
}
128
137
129
138
private File getFilePath (UUID requestId ) {
0 commit comments