This is an automated email from the ASF dual-hosted git repository.
fanjia pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/seatunnel-web.git
The following commit(s) were added to refs/heads/main by this push:
new 30ed42fd [Improvement] [Seatunnel-web] Add API to get and update job
definition. (#198)
30ed42fd is described below
commit 30ed42fdac21a0edc6a9cb06ed00f81967b64717
Author: Mohammad Arshad <[email protected]>
AuthorDate: Fri Aug 30 08:19:56 2024 +0530
[Improvement] [Seatunnel-web] Add API to get and update job definition.
(#198)
---
.../seatunnel/app/controller/JobController.java | 27 ++++++
.../seatunnel/app/domain/request/job/JobDAG.java | 4 +
.../job/JobDAG.java => response/job/JobRes.java} | 15 +++-
.../apache/seatunnel/app/service/IJobService.java | 6 ++
.../app/service/impl/JobConfigServiceImpl.java | 8 ++
.../seatunnel/app/service/impl/JobServiceImpl.java | 23 +++++
.../app/service/impl/TaskInstanceServiceImpl.java | 8 +-
.../server/common/SeatunnelErrorEnum.java | 1 +
.../app/controller/JobControllerWrapper.java | 13 +++
.../seatunnel/app/test/JobControllerTest.java | 97 +++++++++++++++++++++-
10 files changed, 194 insertions(+), 8 deletions(-)
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobController.java
index a6d941ea..b7b70ba7 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobController.java
@@ -18,9 +18,13 @@ package org.apache.seatunnel.app.controller;
import org.apache.seatunnel.app.common.Result;
import org.apache.seatunnel.app.domain.request.job.JobCreateReq;
+import org.apache.seatunnel.app.domain.response.job.JobRes;
import org.apache.seatunnel.app.service.IJobService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -49,4 +53,27 @@ public class JobController {
throws JsonProcessingException {
return Result.success(jobCRUDService.createJob(userId,
jobCreateRequest));
}
+
+ @PutMapping("/update/{jobVersionId}")
+ @ApiOperation(
+ value = "Update a job, all the existing ids should be passed in
the request.",
+ httpMethod = "PUT")
+ public Result<Void> updateJob(
+ @ApiParam(value = "userId", required = true)
@RequestAttribute("userId") Integer userId,
+ @ApiParam(value = "jobVersionId", required = true) @PathVariable
long jobVersionId,
+ @RequestBody JobCreateReq jobCreateReq)
+ throws JsonProcessingException {
+ jobCRUDService.updateJob(userId, jobVersionId, jobCreateReq);
+ return Result.success();
+ }
+
+ @GetMapping("/get/{jobVersionId}")
+ @ApiOperation(value = "Get a job detail.", httpMethod = "GET")
+ public Result<JobRes> getJob(
+ @ApiParam(value = "userId", required = true)
@RequestAttribute("userId") Integer userId,
+ @ApiParam(value = "jobVersionId", required = true) @PathVariable
long jobVersionId)
+ throws JsonProcessingException {
+ JobRes jobRes = jobCRUDService.getJob(userId, jobVersionId);
+ return Result.success(jobRes);
+ }
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
index 944ea793..30fb8a18 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
@@ -17,11 +17,15 @@
package org.apache.seatunnel.app.domain.request.job;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
import java.util.List;
@Data
+@NoArgsConstructor
+@AllArgsConstructor
public class JobDAG {
private List<Edge> edges;
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/job/JobRes.java
similarity index 67%
copy from
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
copy to
seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/job/JobRes.java
index 944ea793..87142d0e 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/job/JobDAG.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/job/JobRes.java
@@ -14,15 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.seatunnel.app.domain.response.job;
-package org.apache.seatunnel.app.domain.request.job;
+import org.apache.seatunnel.app.domain.request.job.JobDAG;
+import org.apache.seatunnel.app.domain.request.job.PluginConfig;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
import java.util.List;
@Data
-public class JobDAG {
-
- private List<Edge> edges;
+@NoArgsConstructor
+@AllArgsConstructor
+public class JobRes {
+ private JobConfigRes jobConfig;
+ private List<PluginConfig> pluginConfigs;
+ private JobDAG jobDAG;
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IJobService.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IJobService.java
index 7faa4a79..e8e5904b 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IJobService.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IJobService.java
@@ -17,10 +17,16 @@
package org.apache.seatunnel.app.service;
import org.apache.seatunnel.app.domain.request.job.JobCreateReq;
+import org.apache.seatunnel.app.domain.response.job.JobRes;
import com.fasterxml.jackson.core.JsonProcessingException;
public interface IJobService {
long createJob(int userId, JobCreateReq jobCreateRequest) throws
JsonProcessingException;
+
+ void updateJob(Integer userId, long jobId, JobCreateReq jobCreateReq)
+ throws JsonProcessingException;
+
+ JobRes getJob(Integer userId, long jobId) throws JsonProcessingException;
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobConfigServiceImpl.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobConfigServiceImpl.java
index eb6e7c6d..0ec04f53 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobConfigServiceImpl.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobConfigServiceImpl.java
@@ -57,6 +57,10 @@ public class JobConfigServiceImpl extends
SeatunnelBaseServiceImpl implements IJ
public JobConfigRes getJobConfig(long jobVersionId) throws
JsonProcessingException {
funcPermissionCheck(SeatunnelFuncPermissionKeyConstant.JOB_CONFIG_DETAIL, 0);
JobVersion jobVersion = jobVersionDao.getVersionById(jobVersionId);
+ if (jobVersion == null) {
+ throw new SeatunnelException(
+ SeatunnelErrorEnum.RESOURCE_NOT_FOUND, "job version not
found.");
+ }
JobDefinition jobDefinition =
jobDefinitionDao.getJob(jobVersion.getJobId());
JobConfigRes jobConfigRes = new JobConfigRes();
jobConfigRes.setName(jobDefinition.getName());
@@ -80,6 +84,10 @@ public class JobConfigServiceImpl extends
SeatunnelBaseServiceImpl implements IJ
throws JsonProcessingException {
funcPermissionCheck(SeatunnelFuncPermissionKeyConstant.JOB_CONFIG_UPDATE, 0);
JobVersion version = jobVersionDao.getVersionById(jobVersionId);
+ if (version == null) {
+ throw new SeatunnelException(
+ SeatunnelErrorEnum.RESOURCE_NOT_FOUND, "job version not
found.");
+ }
JobDefinition jobDefinition = new JobDefinition();
jobDefinition.setId(version.getJobId());
jobDefinition.setUpdateUserId(userId);
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobServiceImpl.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobServiceImpl.java
index d51835bd..bd54621c 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobServiceImpl.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/JobServiceImpl.java
@@ -23,7 +23,10 @@ import org.apache.seatunnel.app.domain.request.job.JobConfig;
import org.apache.seatunnel.app.domain.request.job.JobCreateReq;
import org.apache.seatunnel.app.domain.request.job.JobDAG;
import org.apache.seatunnel.app.domain.request.job.JobReq;
+import org.apache.seatunnel.app.domain.request.job.JobTaskInfo;
import org.apache.seatunnel.app.domain.request.job.PluginConfig;
+import org.apache.seatunnel.app.domain.response.job.JobConfigRes;
+import org.apache.seatunnel.app.domain.response.job.JobRes;
import org.apache.seatunnel.app.service.IJobConfigService;
import org.apache.seatunnel.app.service.IJobDefinitionService;
import org.apache.seatunnel.app.service.IJobService;
@@ -108,4 +111,24 @@ public class JobServiceImpl implements IJobService {
}
return jobReq;
}
+
+ @Override
+ public void updateJob(Integer userId, long jobVersionId, JobCreateReq
jobCreateReq)
+ throws JsonProcessingException {
+ jobConfigService.updateJobConfig(userId, jobVersionId,
jobCreateReq.getJobConfig());
+ List<PluginConfig> pluginConfigs = jobCreateReq.getPluginConfigs();
+ if (pluginConfigs != null) {
+ for (PluginConfig pluginConfig : pluginConfigs) {
+ jobTaskService.saveSingleTask(jobVersionId, pluginConfig);
+ }
+ }
+ jobTaskService.saveJobDAG(jobVersionId, jobCreateReq.getJobDAG());
+ }
+
+ @Override
+ public JobRes getJob(Integer userId, long jobVersionId) throws
JsonProcessingException {
+ JobConfigRes jobConfig = jobConfigService.getJobConfig(jobVersionId);
+ JobTaskInfo taskConfig = jobTaskService.getTaskConfig(jobVersionId);
+ return new JobRes(jobConfig, taskConfig.getPlugins(), new
JobDAG(taskConfig.getEdges()));
+ }
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskInstanceServiceImpl.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskInstanceServiceImpl.java
index 0f7a2266..2d2f4d90 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskInstanceServiceImpl.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskInstanceServiceImpl.java
@@ -31,6 +31,8 @@ import org.apache.seatunnel.app.service.IJobDefinitionService;
import org.apache.seatunnel.app.service.IJobMetricsService;
import org.apache.seatunnel.app.service.ITaskInstanceService;
import org.apache.seatunnel.app.utils.PageInfo;
+import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
+import org.apache.seatunnel.server.common.SeatunnelException;
import org.apache.commons.collections4.CollectionUtils;
@@ -200,7 +202,8 @@ public class TaskInstanceServiceImpl implements
ITaskInstanceService<SeaTunnelJo
public Result<JobExecutionStatus> getJobExecutionStatus(Integer userId,
long jobInstanceId) {
JobInstance jobInstance =
jobInstanceDao.getJobExecutionStatus(jobInstanceId);
if (jobInstance == null) {
- return Result.failure(404, "Job instance not found");
+ throw new SeatunnelException(
+ SeatunnelErrorEnum.RESOURCE_NOT_FOUND, "Job instance not
found");
}
return Result.success(
new JobExecutionStatus(jobInstance.getJobStatus(),
jobInstance.getErrorMessage()));
@@ -211,7 +214,8 @@ public class TaskInstanceServiceImpl implements
ITaskInstanceService<SeaTunnelJo
Integer userId, long jobInstanceId) {
JobInstance jobInstance = jobInstanceDao.getJobInstance(jobInstanceId);
if (jobInstance == null) {
- return Result.failure(404, "Job instance not found");
+ throw new SeatunnelException(
+ SeatunnelErrorEnum.RESOURCE_NOT_FOUND, "Job instance not
found");
}
SeaTunnelJobInstanceDto executionDetails = convertToDto(jobInstance);
populateExecutionMetricsData(
diff --git
a/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
index 5f4b218e..3059eb39 100644
---
a/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
+++
b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/SeatunnelErrorEnum.java
@@ -129,6 +129,7 @@ public enum SeatunnelErrorEnum {
MISSING_PARAM(1777000, "param miss [{0}]", "param miss [{0}]"),
PARAM_CAN_NOT_BE_NULL(60018, "", "param [%s] can not be null or empty"),
INVALID_PARAM(60019, "", "param [%s] is invalid. %s"),
+ RESOURCE_NOT_FOUND(404, "", "%s"),
;
private final int code;
diff --git
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobControllerWrapper.java
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobControllerWrapper.java
index 61bc2f5f..b899835f 100644
---
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobControllerWrapper.java
+++
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobControllerWrapper.java
@@ -19,6 +19,7 @@ package org.apache.seatunnel.app.controller;
import org.apache.seatunnel.app.common.Result;
import org.apache.seatunnel.app.common.SeatunnelWebTestingBase;
import org.apache.seatunnel.app.domain.request.job.JobCreateReq;
+import org.apache.seatunnel.app.domain.response.job.JobRes;
import org.apache.seatunnel.app.utils.JSONTestUtils;
import org.apache.seatunnel.app.utils.JSONUtils;
@@ -36,6 +37,18 @@ public class JobControllerWrapper extends
SeatunnelWebTestingBase {
return JSONTestUtils.parseObject(response, new
TypeReference<Result<Long>>() {});
}
+ public Result<Void> updateJob(long jobVersionId, JobCreateReq
jobCreateReq) {
+ String requestBody = JSONUtils.toPrettyJsonString(jobCreateReq);
+ String response =
+ sendRequest(urlWithParam("job/update/" + jobVersionId + "?"),
requestBody, "PUT");
+ return JSONTestUtils.parseObject(response, new
TypeReference<Result<Void>>() {});
+ }
+
+ public Result<JobRes> getJob(long jobVersionId) {
+ String response = sendRequest(urlWithParam("job/get/" + jobVersionId +
"?"), null, "GET");
+ return JSONTestUtils.parseObject(response, new
TypeReference<Result<JobRes>>() {});
+ }
+
public JobCreateReq populateJobCreateReqFromFile() {
String filePath =
"src/test/resources/jobs/fake_source_console_job.json";
String jsonContent;
diff --git
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobControllerTest.java
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobControllerTest.java
index 860ce20e..b898ebd9 100644
---
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobControllerTest.java
+++
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobControllerTest.java
@@ -23,7 +23,10 @@ import
org.apache.seatunnel.app.controller.JobExecutorControllerWrapper;
import
org.apache.seatunnel.app.controller.SeatunnelDatasourceControllerWrapper;
import org.apache.seatunnel.app.domain.request.job.JobConfig;
import org.apache.seatunnel.app.domain.request.job.JobCreateReq;
+import org.apache.seatunnel.app.domain.request.job.JobDAG;
import org.apache.seatunnel.app.domain.request.job.PluginConfig;
+import org.apache.seatunnel.app.domain.response.job.JobConfigRes;
+import org.apache.seatunnel.app.domain.response.job.JobRes;
import
org.apache.seatunnel.app.domain.response.metrics.JobPipelineDetailMetricsRes;
import org.apache.seatunnel.app.utils.JobUtils;
import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
@@ -35,6 +38,7 @@ import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -59,7 +63,7 @@ public class JobControllerTest {
JobCreateReq jobCreateReq =
jobControllerWrapper.populateJobCreateReqFromFile();
jobCreateReq.getJobConfig().setName(jobName);
jobCreateReq.getJobConfig().setDescription(jobName + " description");
- setSourceIds(jobCreateReq, "fake_source_ds1" + uniqueId, "console_ds1"
+ uniqueId);
+ setSourceIds(jobCreateReq, "fake_source_create" + uniqueId,
"console_create" + uniqueId);
Result<Long> job = jobControllerWrapper.createJob(jobCreateReq);
assertTrue(job.isSuccess());
@@ -124,13 +128,102 @@ public class JobControllerTest {
result.getMsg());
jobConfig.getEnv().put("job.mode", "BATCH");
- setSourceIds(jobCreateReq, "fake_source_ds2" + uniqueId, "console_ds2"
+ uniqueId);
+ setSourceIds(jobCreateReq, "fake_source_create2" + uniqueId,
"console_create2" + uniqueId);
result = jobControllerWrapper.createJob(jobCreateReq);
assertTrue(result.isSuccess());
assertEquals(0, result.getCode());
assertNotNull(result.getData());
}
+ @Test
+ public void testUpdateJob_ForValidAndInvalidScenarios() {
+ String jobName = "updateJob_single_api" + uniqueId;
+ JobCreateReq jobCreateReq =
jobControllerWrapper.populateJobCreateReqFromFile();
+ jobCreateReq.getJobConfig().setName(jobName);
+ jobCreateReq.getJobConfig().setDescription(jobName + " description");
+ setSourceIds(
+ jobCreateReq, "fake_source_update_job" + uniqueId,
"console_update_job" + uniqueId);
+
+ Result<Long> job = jobControllerWrapper.createJob(jobCreateReq);
+ assertTrue(job.isSuccess());
+
+ Result<JobRes> getJobResponse =
jobControllerWrapper.getJob(job.getData());
+ assertTrue(getJobResponse.isSuccess());
+ JobRes jobRes = getJobResponse.getData();
+ assertNotNull(jobRes.getJobConfig());
+ assertNotNull(jobRes.getJobConfig());
+ assertNotNull(jobRes.getJobDAG());
+
+ assertEquals(jobName, jobRes.getJobConfig().getName());
+ assertEquals(
+ jobCreateReq.getPluginConfigs().get(0).getName(),
+ jobRes.getPluginConfigs().get(0).getName());
+ assertEquals(
+ jobCreateReq.getPluginConfigs().get(1).getName(),
+ jobRes.getPluginConfigs().get(1).getName());
+
+ JobCreateReq jobUpdateReq = convertJobResToJobCreateReq(jobRes);
+ String jobName2 = "updateJob_single_api2" + uniqueId;
+ jobUpdateReq.getJobConfig().setName(jobName2);
+ jobUpdateReq.getJobConfig().setDescription(jobName2 + " description");
+
+ Result<Void> jobUpdateResult =
jobControllerWrapper.updateJob(job.getData(), jobUpdateReq);
+ assertTrue(jobUpdateResult.isSuccess());
+
+ Result<JobRes> getJobResponse2 =
jobControllerWrapper.getJob(job.getData());
+ assertTrue(getJobResponse2.isSuccess());
+ JobRes jobRes2 = getJobResponse2.getData();
+ assertEquals(jobName2, jobRes2.getJobConfig().getName());
+ assertEquals(
+ jobUpdateReq.getPluginConfigs().get(0).getName(),
+ jobRes2.getPluginConfigs().get(0).getName());
+ assertEquals(
+ jobUpdateReq.getPluginConfigs().get(1).getName(),
+ jobRes2.getPluginConfigs().get(1).getName());
+
+ // Handle error scenarios
+
+ // Invalid job instance id
+ Result<JobRes> invalidJobInstanceIdResponse =
jobControllerWrapper.getJob(123L);
+ assertFalse(invalidJobInstanceIdResponse.isSuccess());
+ assertEquals(
+ SeatunnelErrorEnum.RESOURCE_NOT_FOUND.getCode(),
+ invalidJobInstanceIdResponse.getCode());
+
+ Result<Void> result = jobControllerWrapper.updateJob(123L,
jobUpdateReq);
+ assertFalse(result.isSuccess());
+ assertEquals(SeatunnelErrorEnum.RESOURCE_NOT_FOUND.getCode(),
result.getCode());
+
+ // While doing job update some configuration is wrong.
+
jobUpdateReq.getJobDAG().getEdges().get(0).setInputPluginId("InvalidInputPluginId");
+
jobUpdateReq.getJobDAG().getEdges().get(0).setTargetPluginId("InvalidTargetPluginId");
+ jobUpdateResult = jobControllerWrapper.updateJob(job.getData(),
jobUpdateReq);
+ assertFalse(jobUpdateResult.isSuccess());
+ assertEquals(SeatunnelErrorEnum.ERROR_CONFIG.getCode(),
jobUpdateResult.getCode());
+ }
+
+ private JobCreateReq convertJobResToJobCreateReq(JobRes jobRes) {
+ JobCreateReq jobCreateReq = new JobCreateReq();
+
+ // Assuming JobRes contains JobConfigRes and List<PluginConfig> and
JobDAG
+ JobConfigRes jobConfigRes = jobRes.getJobConfig();
+ List<PluginConfig> pluginConfigs = jobRes.getPluginConfigs();
+ JobDAG jobDAG = jobRes.getJobDAG();
+
+ // Populate JobCreateReq with data from JobRes
+ JobConfig jobConfig = new JobConfig();
+ jobConfig.setName(jobConfigRes.getName());
+ jobConfig.setDescription(jobConfigRes.getDescription());
+ jobConfig.setEnv(jobConfigRes.getEnv());
+ jobConfig.setEngine(jobConfigRes.getEngine());
+
+ jobCreateReq.setJobConfig(jobConfig);
+ jobCreateReq.setPluginConfigs(pluginConfigs);
+ jobCreateReq.setJobDAG(jobDAG);
+
+ return jobCreateReq;
+ }
+
@AfterAll
public static void tearDown() {
seaTunnelWebCluster.stop();