Skip to content

Commit 661f261

Browse files
authored
Merge pull request #99 from baixinsui/feat/add_modification_id
Add UUID to record the request
2 parents e20d737 + 6fe1a3b commit 661f261

17 files changed

+269
-214
lines changed

pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<description>RESTful API Wrapper for Terraform</description>
2121
<properties>
2222
<java.version>21</java.version>
23+
<spring.retry.version>2.0.5</spring.retry.version>
2324
<springdoc.version>2.5.0</springdoc.version>
2425
<checkstyle-maven-plugin.version>3.3.1</checkstyle-maven-plugin.version>
2526
<logbook.version>3.8.0</logbook.version>
@@ -105,6 +106,11 @@
105106
<artifactId>org.eclipse.jgit</artifactId>
106107
<version>${jgit.version}</version>
107108
</dependency>
109+
<dependency>
110+
<groupId>org.springframework.retry</groupId>
111+
<artifactId>spring-retry</artifactId>
112+
<version>${spring.retry.version}</version>
113+
</dependency>
108114
</dependencies>
109115

110116
<build>

src/main/java/org/eclipse/xpanse/terraform/boot/TerraformBootApplication.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import org.springframework.boot.SpringApplication;
99
import org.springframework.boot.autoconfigure.SpringBootApplication;
1010
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
11+
import org.springframework.retry.annotation.EnableRetry;
1112
import org.springframework.scheduling.annotation.EnableAsync;
1213

1314
/**
1415
* Main entry class to terraform-boot. This class can be directly executed to start the server.
1516
*/
17+
@EnableRetry
1618
@EnableAsync
1719
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
1820
public class TerraformBootApplication {

src/main/java/org/eclipse/xpanse/terraform/boot/api/controllers/TerraformBootFromDirectoryApi.java

+42-52
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package org.eclipse.xpanse.terraform.boot.api.controllers;
77

8+
import static org.eclipse.xpanse.terraform.boot.logging.CustomRequestIdGenerator.REQUEST_ID;
9+
810
import io.swagger.v3.oas.annotations.Operation;
911
import io.swagger.v3.oas.annotations.Parameter;
1012
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -70,12 +72,9 @@ public TerraformBootFromDirectoryApi(
7072
public TerraformValidationResult validateFromDirectory(
7173
@Parameter(name = "module_directory",
7274
description = "directory name where the Terraform module files exist.")
73-
@PathVariable("module_directory") String moduleDirectory,
74-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
75-
if (Objects.isNull(uuid)) {
76-
uuid = UUID.randomUUID();
77-
}
78-
MDC.put("TASK_ID", uuid.toString());
75+
@PathVariable("module_directory") String moduleDirectory) {
76+
UUID uuid = UUID.randomUUID();
77+
MDC.put(REQUEST_ID, uuid.toString());
7978
return terraformDirectoryService.tfValidateFromDirectory(moduleDirectory);
8079
}
8180

@@ -93,13 +92,11 @@ public TerraformResult deployFromDirectory(
9392
@Parameter(name = "module_directory",
9493
description = "directory name where the Terraform module files exist.")
9594
@PathVariable("module_directory") String moduleDirectory,
96-
@Valid @RequestBody
97-
TerraformDeployFromDirectoryRequest request,
98-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
99-
if (Objects.isNull(uuid)) {
100-
uuid = UUID.randomUUID();
101-
}
102-
MDC.put("TASK_ID", uuid.toString());
95+
@Valid @RequestBody TerraformDeployFromDirectoryRequest request) {
96+
UUID uuid = Objects.nonNull(request.getRequestId())
97+
? request.getRequestId() : UUID.randomUUID();
98+
MDC.put(REQUEST_ID, uuid.toString());
99+
request.setRequestId(uuid);
103100
return terraformDirectoryService.deployFromDirectory(request, moduleDirectory);
104101
}
105102

@@ -117,13 +114,11 @@ public TerraformResult modifyFromDirectory(
117114
@Parameter(name = "module_directory",
118115
description = "directory name where the Terraform module files exist.")
119116
@PathVariable("module_directory") String moduleDirectory,
120-
@Valid @RequestBody
121-
TerraformModifyFromDirectoryRequest request,
122-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
123-
if (Objects.isNull(uuid)) {
124-
uuid = UUID.randomUUID();
125-
}
126-
MDC.put("TASK_ID", uuid.toString());
117+
@Valid @RequestBody TerraformModifyFromDirectoryRequest request) {
118+
UUID uuid = Objects.nonNull(request.getRequestId())
119+
? request.getRequestId() : UUID.randomUUID();
120+
MDC.put(REQUEST_ID, uuid.toString());
121+
request.setRequestId(uuid);
127122
return terraformDirectoryService.modifyFromDirectory(request, moduleDirectory);
128123
}
129124

@@ -142,13 +137,11 @@ public TerraformResult destroyFromDirectory(
142137
@Parameter(name = "module_directory",
143138
description = "directory name where the Terraform module files exist.")
144139
@PathVariable("module_directory") String moduleDirectory,
145-
@Valid @RequestBody
146-
TerraformDestroyFromDirectoryRequest request,
147-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
148-
if (Objects.isNull(uuid)) {
149-
uuid = UUID.randomUUID();
150-
}
151-
MDC.put("TASK_ID", uuid.toString());
140+
@Valid @RequestBody TerraformDestroyFromDirectoryRequest request) {
141+
UUID uuid = Objects.nonNull(request.getRequestId())
142+
? request.getRequestId() : UUID.randomUUID();
143+
MDC.put(REQUEST_ID, uuid.toString());
144+
request.setRequestId(uuid);
152145
return terraformDirectoryService.destroyFromDirectory(request, moduleDirectory);
153146
}
154147

@@ -169,10 +162,10 @@ public TerraformPlan plan(
169162
@PathVariable("module_directory") String moduleDirectory,
170163
@Valid @RequestBody TerraformPlanFromDirectoryRequest request,
171164
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
172-
if (Objects.isNull(uuid)) {
173-
uuid = UUID.randomUUID();
174-
}
175-
MDC.put("TASK_ID", uuid.toString());
165+
uuid = Objects.nonNull(request.getRequestId()) ? request.getRequestId()
166+
: (Objects.nonNull(uuid) ? uuid : UUID.randomUUID());
167+
MDC.put(REQUEST_ID, uuid.toString());
168+
request.setRequestId(uuid);
176169
return terraformDirectoryService.getTerraformPlanFromDirectory(request,
177170
moduleDirectory);
178171
}
@@ -190,13 +183,12 @@ public void asyncDeployFromDirectory(
190183
@Parameter(name = "module_directory",
191184
description = "directory name where the Terraform module files exist.")
192185
@PathVariable("module_directory") String moduleDirectory,
193-
@Valid @RequestBody TerraformAsyncDeployFromDirectoryRequest asyncDeployRequest,
194-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
195-
if (Objects.isNull(uuid)) {
196-
uuid = UUID.randomUUID();
197-
}
198-
MDC.put("TASK_ID", uuid.toString());
199-
terraformDirectoryService.asyncDeployWithScripts(asyncDeployRequest, moduleDirectory);
186+
@Valid @RequestBody TerraformAsyncDeployFromDirectoryRequest request) {
187+
UUID uuid = Objects.nonNull(request.getRequestId())
188+
? request.getRequestId() : UUID.randomUUID();
189+
MDC.put(REQUEST_ID, uuid.toString());
190+
request.setRequestId(uuid);
191+
terraformDirectoryService.asyncDeployWithScripts(request, moduleDirectory);
200192
}
201193

202194
/**
@@ -212,13 +204,12 @@ public void asyncModifyFromDirectory(
212204
@Parameter(name = "module_directory",
213205
description = "directory name where the Terraform module files exist.")
214206
@PathVariable("module_directory") String moduleDirectory,
215-
@Valid @RequestBody TerraformAsyncModifyFromDirectoryRequest asyncModifyRequest,
216-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
217-
if (Objects.isNull(uuid)) {
218-
uuid = UUID.randomUUID();
219-
}
220-
MDC.put("TASK_ID", uuid.toString());
221-
terraformDirectoryService.asyncModifyWithScripts(asyncModifyRequest, moduleDirectory);
207+
@Valid @RequestBody TerraformAsyncModifyFromDirectoryRequest request) {
208+
UUID uuid = Objects.nonNull(request.getRequestId())
209+
? request.getRequestId() : UUID.randomUUID();
210+
MDC.put(REQUEST_ID, uuid.toString());
211+
request.setRequestId(uuid);
212+
terraformDirectoryService.asyncModifyWithScripts(request, moduleDirectory);
222213
}
223214

224215
/**
@@ -234,12 +225,11 @@ public void asyncDestroyFromDirectory(
234225
@Parameter(name = "module_directory",
235226
description = "directory name where the Terraform module files exist.")
236227
@PathVariable("module_directory") String moduleDirectory,
237-
@Valid @RequestBody TerraformAsyncDestroyFromDirectoryRequest asyncDestroyRequest,
238-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
239-
if (Objects.isNull(uuid)) {
240-
uuid = UUID.randomUUID();
241-
}
242-
MDC.put("TASK_ID", uuid.toString());
243-
terraformDirectoryService.asyncDestroyWithScripts(asyncDestroyRequest, moduleDirectory);
228+
@Valid @RequestBody TerraformAsyncDestroyFromDirectoryRequest request) {
229+
UUID uuid = Objects.nonNull(request.getRequestId())
230+
? request.getRequestId() : UUID.randomUUID();
231+
MDC.put(REQUEST_ID, uuid.toString());
232+
request.setRequestId(uuid);
233+
terraformDirectoryService.asyncDestroyWithScripts(request, moduleDirectory);
244234
}
245235
}

src/main/java/org/eclipse/xpanse/terraform/boot/api/controllers/TerraformBootFromGitRepoApi.java

+45-52
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package org.eclipse.xpanse.terraform.boot.api.controllers;
77

8+
import static org.eclipse.xpanse.terraform.boot.logging.CustomRequestIdGenerator.REQUEST_ID;
9+
810
import io.swagger.v3.oas.annotations.Operation;
911
import io.swagger.v3.oas.annotations.tags.Tag;
1012
import jakarta.validation.Valid;
@@ -29,7 +31,6 @@
2931
import org.springframework.web.bind.annotation.DeleteMapping;
3032
import org.springframework.web.bind.annotation.PostMapping;
3133
import org.springframework.web.bind.annotation.RequestBody;
32-
import org.springframework.web.bind.annotation.RequestHeader;
3334
import org.springframework.web.bind.annotation.RequestMapping;
3435
import org.springframework.web.bind.annotation.ResponseStatus;
3536
import org.springframework.web.bind.annotation.RestController;
@@ -61,12 +62,11 @@ public TerraformBootFromGitRepoApi(TerraformGitRepoService terraformGitRepoServi
6162
MediaType.APPLICATION_JSON_VALUE)
6263
@ResponseStatus(HttpStatus.OK)
6364
public TerraformValidationResult validateScriptsFromGitRepo(
64-
@Valid @RequestBody TerraformDeployFromGitRepoRequest request,
65-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
66-
if (Objects.isNull(uuid)) {
67-
uuid = UUID.randomUUID();
68-
}
69-
MDC.put("TASK_ID", uuid.toString());
65+
@Valid @RequestBody TerraformDeployFromGitRepoRequest request) {
66+
UUID uuid = Objects.nonNull(request.getRequestId())
67+
? request.getRequestId() : UUID.randomUUID();
68+
MDC.put(REQUEST_ID, uuid.toString());
69+
request.setRequestId(uuid);
7070
return terraformGitRepoService.validateWithScripts(request);
7171
}
7272

@@ -82,12 +82,11 @@ public TerraformValidationResult validateScriptsFromGitRepo(
8282
@PostMapping(value = "/plan", produces = MediaType.APPLICATION_JSON_VALUE)
8383
@ResponseStatus(HttpStatus.OK)
8484
public TerraformPlan planFromGitRepo(
85-
@Valid @RequestBody TerraformPlanFromGitRepoRequest request,
86-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
87-
if (Objects.isNull(uuid)) {
88-
uuid = UUID.randomUUID();
89-
}
90-
MDC.put("TASK_ID", uuid.toString());
85+
@Valid @RequestBody TerraformPlanFromGitRepoRequest request) {
86+
UUID uuid = Objects.nonNull(request.getRequestId())
87+
? request.getRequestId() : UUID.randomUUID();
88+
MDC.put(REQUEST_ID, uuid.toString());
89+
request.setRequestId(uuid);
9190
return terraformGitRepoService.getTerraformPlanFromGitRepo(request, uuid);
9291
}
9392

@@ -103,12 +102,11 @@ public TerraformPlan planFromGitRepo(
103102
MediaType.APPLICATION_JSON_VALUE)
104103
@ResponseStatus(HttpStatus.OK)
105104
public TerraformResult deployFromGitRepo(
106-
@Valid @RequestBody TerraformDeployFromGitRepoRequest request,
107-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
108-
if (Objects.isNull(uuid)) {
109-
uuid = UUID.randomUUID();
110-
}
111-
MDC.put("TASK_ID", uuid.toString());
105+
@Valid @RequestBody TerraformDeployFromGitRepoRequest request) {
106+
UUID uuid = Objects.nonNull(request.getRequestId())
107+
? request.getRequestId() : UUID.randomUUID();
108+
MDC.put(REQUEST_ID, uuid.toString());
109+
request.setRequestId(uuid);
112110
return terraformGitRepoService.deployFromGitRepo(request, uuid);
113111
}
114112

@@ -124,12 +122,11 @@ public TerraformResult deployFromGitRepo(
124122
MediaType.APPLICATION_JSON_VALUE)
125123
@ResponseStatus(HttpStatus.OK)
126124
public TerraformResult modifyFromGitRepo(
127-
@Valid @RequestBody TerraformModifyFromGitRepoRequest request,
128-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
129-
if (Objects.isNull(uuid)) {
130-
uuid = UUID.randomUUID();
131-
}
132-
MDC.put("TASK_ID", uuid.toString());
125+
@Valid @RequestBody TerraformModifyFromGitRepoRequest request) {
126+
UUID uuid = Objects.nonNull(request.getRequestId())
127+
? request.getRequestId() : UUID.randomUUID();
128+
MDC.put(REQUEST_ID, uuid.toString());
129+
request.setRequestId(uuid);
133130
return terraformGitRepoService.modifyFromGitRepo(request, uuid);
134131
}
135132

@@ -145,12 +142,11 @@ public TerraformResult modifyFromGitRepo(
145142
MediaType.APPLICATION_JSON_VALUE)
146143
@ResponseStatus(HttpStatus.OK)
147144
public TerraformResult destroyFromGitRepo(
148-
@Valid @RequestBody TerraformDestroyFromGitRepoRequest request,
149-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
150-
if (Objects.isNull(uuid)) {
151-
uuid = UUID.randomUUID();
152-
}
153-
MDC.put("TASK_ID", uuid.toString());
145+
@Valid @RequestBody TerraformDestroyFromGitRepoRequest request) {
146+
UUID uuid = Objects.nonNull(request.getRequestId())
147+
? request.getRequestId() : UUID.randomUUID();
148+
MDC.put(REQUEST_ID, uuid.toString());
149+
request.setRequestId(uuid);
154150
return terraformGitRepoService.destroyFromGitRepo(request, uuid);
155151
}
156152

@@ -164,13 +160,12 @@ public TerraformResult destroyFromGitRepo(
164160
MediaType.APPLICATION_JSON_VALUE)
165161
@ResponseStatus(HttpStatus.ACCEPTED)
166162
public void asyncDeployFromGitRepo(
167-
@Valid @RequestBody TerraformAsyncDeployFromGitRepoRequest asyncDeployRequest,
168-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
169-
if (Objects.isNull(uuid)) {
170-
uuid = UUID.randomUUID();
171-
}
172-
MDC.put("TASK_ID", uuid.toString());
173-
terraformGitRepoService.asyncDeployFromGitRepo(asyncDeployRequest, uuid);
163+
@Valid @RequestBody TerraformAsyncDeployFromGitRepoRequest request) {
164+
UUID uuid = Objects.nonNull(request.getRequestId())
165+
? request.getRequestId() : UUID.randomUUID();
166+
MDC.put(REQUEST_ID, uuid.toString());
167+
request.setRequestId(uuid);
168+
terraformGitRepoService.asyncDeployFromGitRepo(request, uuid);
174169
}
175170

176171
/**
@@ -183,13 +178,12 @@ public void asyncDeployFromGitRepo(
183178
MediaType.APPLICATION_JSON_VALUE)
184179
@ResponseStatus(HttpStatus.ACCEPTED)
185180
public void asyncModifyFromGitRepo(
186-
@Valid @RequestBody TerraformAsyncModifyFromGitRepoRequest asyncModifyRequest,
187-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
188-
if (Objects.isNull(uuid)) {
189-
uuid = UUID.randomUUID();
190-
}
191-
MDC.put("TASK_ID", uuid.toString());
192-
terraformGitRepoService.asyncModifyFromGitRepo(asyncModifyRequest, uuid);
181+
@Valid @RequestBody TerraformAsyncModifyFromGitRepoRequest request) {
182+
UUID uuid = Objects.nonNull(request.getRequestId())
183+
? request.getRequestId() : UUID.randomUUID();
184+
MDC.put(REQUEST_ID, uuid.toString());
185+
request.setRequestId(uuid);
186+
terraformGitRepoService.asyncModifyFromGitRepo(request, uuid);
193187
}
194188

195189
/**
@@ -202,12 +196,11 @@ public void asyncModifyFromGitRepo(
202196
produces = MediaType.APPLICATION_JSON_VALUE)
203197
@ResponseStatus(HttpStatus.ACCEPTED)
204198
public void asyncDestroyFromGitRepo(
205-
@Valid @RequestBody TerraformAsyncDestroyFromGitRepoRequest asyncDestroyRequest,
206-
@RequestHeader(name = "X-Custom-RequestId", required = false) UUID uuid) {
207-
if (Objects.isNull(uuid)) {
208-
uuid = UUID.randomUUID();
209-
}
210-
MDC.put("TASK_ID", uuid.toString());
211-
terraformGitRepoService.asyncDestroyFromGitRepo(asyncDestroyRequest, uuid);
199+
@Valid @RequestBody TerraformAsyncDestroyFromGitRepoRequest request) {
200+
UUID uuid = Objects.nonNull(request.getRequestId())
201+
? request.getRequestId() : UUID.randomUUID();
202+
MDC.put(REQUEST_ID, uuid.toString());
203+
request.setRequestId(uuid);
204+
terraformGitRepoService.asyncDestroyFromGitRepo(request, uuid);
212205
}
213206
}

0 commit comments

Comments
 (0)