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. */
@@ -42,19 +42,14 @@ public class OpenTofuResultPersistenceManage {
42
42
* @param result OpenTofuResult.
43
43
*/
44
44
public void persistOpenTofuResult (OpenTofuResult result ) {
45
- String filePath = getFilePath (result .getRequestId ());
46
- File file = new File (filePath );
47
- if (!file .exists () && !file .mkdirs ()) {
45
+ File filePath = getFilePath (result .getRequestId ());
46
+ if (!filePath .exists () && !filePath .mkdirs ()) {
48
47
log .error ("Failed to create directory {}" , filePath );
49
48
return ;
50
49
}
50
+ File file = new File (filePath , getFileName (result .getRequestId ()));
51
51
byte [] openTofuResultData = openTofuResultSerializer .serialize (result );
52
- try (FileOutputStream fos =
53
- new FileOutputStream (
54
- file .getPath ()
55
- + File .separator
56
- + result .getRequestId ()
57
- + TF_RESULT_FILE_SUFFIX )) {
52
+ try (FileOutputStream fos = new FileOutputStream (file )) {
58
53
fos .write (openTofuResultData );
59
54
log .info (
60
55
"openTofu result successfully stored to directoryName: {}" ,
@@ -74,49 +69,58 @@ public void persistOpenTofuResult(OpenTofuResult result) {
74
69
* @param requestId requestId.
75
70
* @return OpenTofuResult.
76
71
*/
77
- public ResponseEntity < OpenTofuResult > retrieveOpenTofuResultByRequestId (String requestId ) {
78
- String filePath = getFilePath (UUID . fromString (requestId ));
79
- File resultFile = new File ( filePath + File . separator + requestId + TF_RESULT_FILE_SUFFIX );
80
- if (! resultFile . exists () && ! resultFile . isFile ()) {
72
+ public ReFetchResult retrieveOpenTofuResultByRequestId (UUID requestId ) {
73
+ File resultFile = new File ( getFilePath (requestId ), getFileName (requestId ));
74
+ if (! isValidResultFile ( resultFile )) {
75
+ String errorMsg = String . format ( "Not found result file for requestId %s." , requestId );
81
76
if (isDeployingInProgress (requestId )) {
82
- return ResponseEntity .noContent ().build ();
77
+ errorMsg = errorMsg + " The order is still in progress." ;
78
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .ORDER_IN_PROGRESS );
83
79
}
84
- throw new ResultAlreadyReturnedOrRequestIdInvalidException (
85
- "Result file does not exist: " + resultFile .getAbsolutePath ());
80
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .RESULT_NOT_FOUND );
86
81
}
87
82
try (FileInputStream fis = new FileInputStream (resultFile )) {
88
- byte [] openTofuResultData = fis .readAllBytes ();
89
- OpenTofuResult openTofuResult =
90
- openTofuResultSerializer .deserialize (openTofuResultData );
91
- fis .close ();
92
- deleteResultFileAndDirectory (new File (filePath ));
93
- return ResponseEntity .ok (openTofuResult );
94
- } catch (IOException e ) {
95
- log .error ("Failed to retrieve OpenTofuResult for requestId: {}" , requestId , e );
96
- throw new ResultAlreadyReturnedOrRequestIdInvalidException (
97
- "Failed to retrieve OpenTofuResult for requestId: " + requestId );
83
+ OpenTofuResult terraformResult =
84
+ openTofuResultSerializer .deserialize (fis .readAllBytes ());
85
+ deleteResultFileAndDirectory (resultFile );
86
+ return ReFetchResult .builder ()
87
+ .requestId (requestId )
88
+ .state (ReFetchState .OK )
89
+ .openTofuResult (terraformResult )
90
+ .build ();
91
+ } catch (Exception e ) {
92
+ String errorMsg =
93
+ String .format ("Failed to parse result file for requestId %s" , requestId );
94
+ return buildErrorResponse (requestId , errorMsg , ReFetchState .RESULT_PARSE_FAILED );
98
95
}
99
96
}
100
97
101
- private boolean isDeployingInProgress (String requestId ) {
102
- String workspace = scriptsHelper .buildTaskWorkspace (requestId );
103
- File targetFile ;
104
- if (cleanWorkspaceAfterDeployment ) {
105
- targetFile = new File (workspace );
106
- return targetFile .exists () && targetFile .isDirectory ();
107
- } else {
108
- targetFile = new File (workspace , TF_LOCK_FILE_NAME );
109
- return targetFile .exists () && targetFile .isFile ();
110
- }
98
+ private ReFetchResult buildErrorResponse (
99
+ UUID requestId , String errorMessage , ReFetchState state ) {
100
+ log .error (errorMessage );
101
+ return ReFetchResult .builder ()
102
+ .requestId (requestId )
103
+ .state (state )
104
+ .errorMessage (errorMessage )
105
+ .build ();
106
+ }
107
+
108
+ private boolean isValidResultFile (File file ) {
109
+ return file .exists () && file .isFile ();
110
+ }
111
+
112
+ private boolean isDeployingInProgress (UUID requestId ) {
113
+ String workspace = scriptsHelper .buildTaskWorkspace (requestId .toString ());
114
+ File targetFile = new File (workspace , TF_LOCK_FILE_NAME );
115
+ return targetFile .exists () && targetFile .isFile ();
111
116
}
112
117
113
118
private void deleteResultFileAndDirectory (File resultFile ) {
114
119
try {
115
120
deleteRecursively (resultFile );
116
- log .info ("File folder deleted successfully: " + resultFile .getAbsolutePath ());
121
+ log .info ("File folder deleted successfully: {}" , resultFile .getAbsolutePath ());
117
122
} catch (Exception e ) {
118
- log .error ("An error occurred while deleting files: " + e .getMessage ());
119
- e .printStackTrace ();
123
+ log .error ("An error occurred while deleting files: {}" , e .getMessage ());
120
124
}
121
125
}
122
126
@@ -129,10 +133,16 @@ private void deleteRecursively(File file) {
129
133
}
130
134
}
131
135
}
132
- file .delete ();
136
+ if (file .delete ()) {
137
+ log .info ("File deleted successfully: {}" , file .getAbsolutePath ());
138
+ }
139
+ }
140
+
141
+ private File getFilePath (UUID requestId ) {
142
+ return new File (failedCallbackStoreLocation + File .separator + requestId );
133
143
}
134
144
135
- private String getFilePath (UUID requestId ) {
136
- return failedCallbackStoreLocation + File . separator + requestId . toString () ;
145
+ private String getFileName (UUID requestId ) {
146
+ return requestId + TF_RESULT_FILE_SUFFIX ;
137
147
}
138
148
}
0 commit comments