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 39595778 [Bug] [Seatunnel-web] Job instance delete is not working
(#200)
39595778 is described below
commit 395957787da45af0b70e2567c696366904b4ae3d
Author: Mohammad Arshad <[email protected]>
AuthorDate: Mon Sep 2 07:27:27 2024 +0530
[Bug] [Seatunnel-web] Job instance delete is not working (#200)
---
.../app/controller/JobExecutorController.java | 9 +++++++
.../seatunnel/app/dal/dao/IJobInstanceDao.java | 2 ++
.../app/dal/dao/impl/JobInstanceDaoImpl.java | 5 ++++
.../app/service/ITaskInstanceService.java | 2 ++
.../app/service/impl/TaskInstanceServiceImpl.java | 6 +++++
.../src/service/sync-task-instance/index.ts | 4 +--
.../task/synchronization-instance/use-sync-task.ts | 6 ++---
.../controller/JobExecutorControllerWrapper.java | 9 +++++++
.../app/test/JobExecutorControllerTest.java | 30 ++++++++++++++++++++++
9 files changed, 67 insertions(+), 6 deletions(-)
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobExecutorController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobExecutorController.java
index 44fe7d95..f7c8cea9 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobExecutorController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobExecutorController.java
@@ -28,6 +28,7 @@ import org.apache.seatunnel.app.service.ITaskInstanceService;
import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
import org.apache.seatunnel.server.common.SeatunnelException;
+import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
@@ -108,4 +109,12 @@ public class JobExecutorController {
@ApiParam(value = "jobInstanceId", required = true) @RequestParam
Long jobInstanceId) {
return taskInstanceService.getJobExecutionDetail(userId,
jobInstanceId);
}
+
+ @DeleteMapping("/delete")
+ @ApiOperation(value = "Deletes given job instance id", httpMethod =
"DELETE")
+ Result<Void> deleteJobInstance(
+ @ApiParam(value = "userId", required = true)
@RequestAttribute("userId") Integer userId,
+ @ApiParam(value = "jobInstanceId", required = true) @RequestParam
Long jobInstanceId) {
+ return taskInstanceService.deleteJobInstanceById(userId,
jobInstanceId);
+ }
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IJobInstanceDao.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IJobInstanceDao.java
index 44026af8..ad0db611 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IJobInstanceDao.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IJobInstanceDao.java
@@ -49,4 +49,6 @@ public interface IJobInstanceDao {
List<JobInstance> getAllJobInstance(@NonNull List<Long> jobInstanceIdList);
JobInstance getJobExecutionStatus(@NonNull Long jobInstanceId);
+
+ void deleteById(@NonNull Long jobInstanceId);
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/JobInstanceDaoImpl.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/JobInstanceDaoImpl.java
index 02b529bf..c296a635 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/JobInstanceDaoImpl.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/JobInstanceDaoImpl.java
@@ -93,4 +93,9 @@ public class JobInstanceDaoImpl implements IJobInstanceDao {
public JobInstance getJobExecutionStatus(@NonNull Long jobInstanceId) {
return jobInstanceMapper.getJobExecutionStatus(jobInstanceId);
}
+
+ @Override
+ public void deleteById(@NonNull Long jobInstanceId) {
+ jobInstanceMapper.deleteById(jobInstanceId);
+ }
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskInstanceService.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskInstanceService.java
index ee74b244..b5ed7209 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskInstanceService.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskInstanceService.java
@@ -38,4 +38,6 @@ public interface ITaskInstanceService<T> {
Result<JobExecutionStatus> getJobExecutionStatus(Integer userId, long
jobInstanceId);
Result<SeaTunnelJobInstanceDto> getJobExecutionDetail(Integer userId, long
jobInstanceId);
+
+ Result<Void> deleteJobInstanceById(Integer userId, long jobInstanceId);
}
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 2d2f4d90..1e17ebaa 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
@@ -241,4 +241,10 @@ public class TaskInstanceServiceImpl implements
ITaskInstanceService<SeaTunnelJo
dto.setErrorMessage(jobInstance.getErrorMessage());
return dto;
}
+
+ @Override
+ public Result<Void> deleteJobInstanceById(Integer userId, long
jobInstanceId) {
+ jobInstanceDao.deleteById(jobInstanceId);
+ return Result.success();
+ }
}
diff --git a/seatunnel-ui/src/service/sync-task-instance/index.ts
b/seatunnel-ui/src/service/sync-task-instance/index.ts
index aa140673..c6c98a01 100644
--- a/seatunnel-ui/src/service/sync-task-instance/index.ts
+++ b/seatunnel-ui/src/service/sync-task-instance/index.ts
@@ -85,7 +85,7 @@ export function hanldleRecoverJob(id: number): any {
export function hanldleDelJob(id: number): any {
return axios({
- url: `/job/executor/del?jobInstanceId=${id}`,
- method: 'get'
+ url: `/job/executor/delete?jobInstanceId=${id}`,
+ method: 'delete'
})
}
diff --git
a/seatunnel-ui/src/views/task/synchronization-instance/use-sync-task.ts
b/seatunnel-ui/src/views/task/synchronization-instance/use-sync-task.ts
index b6e60020..f1488a90 100644
--- a/seatunnel-ui/src/views/task/synchronization-instance/use-sync-task.ts
+++ b/seatunnel-ui/src/views/task/synchronization-instance/use-sync-task.ts
@@ -180,10 +180,7 @@ export function useSyncTask(syncTaskType = 'BATCH') {
isDelete: true,
text: t('project.synchronization_instance.delete'),
icon: h(DeleteOutlined),
- onClick: (row) => void handleDel(row.id),
- onPositiveClick: () => {
- console.log('123')
- },
+ onPositiveClick: (row) => void handleDel(row.id),
positiveText: t('project.synchronization_instance.confirm'),
popTips: t('project.synchronization_instance.delete_confirm')
}
@@ -226,6 +223,7 @@ export function useSyncTask(syncTaskType = 'BATCH') {
const handleDel = (id: number) => {
hanldleDelJob(id).then(() => {
message.success(t('common.success_tips'))
+ getList()
})
}
diff --git
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobExecutorControllerWrapper.java
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobExecutorControllerWrapper.java
index f78fae34..a2aaefb9 100644
---
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobExecutorControllerWrapper.java
+++
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/controller/JobExecutorControllerWrapper.java
@@ -79,4 +79,13 @@ public class JobExecutorControllerWrapper extends
SeatunnelWebTestingBase {
return JSONTestUtils.parseObject(
response, new TypeReference<Result<SeaTunnelJobInstanceDto>>()
{});
}
+
+ public Result<Void> deleteJobInstance(long jobInstanceId) {
+ String response =
+ sendRequest(
+ urlWithParam("job/executor/delete?jobInstanceId=" +
jobInstanceId),
+ null,
+ "DELETE");
+ return JSONTestUtils.parseObject(response, Result.class);
+ }
}
diff --git
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobExecutorControllerTest.java
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobExecutorControllerTest.java
index 96adebe2..8cf6f999 100644
---
a/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobExecutorControllerTest.java
+++
b/seatunnel-web-it/src/test/java/org/apache/seatunnel/app/test/JobExecutorControllerTest.java
@@ -317,6 +317,36 @@ public class JobExecutorControllerTest {
assertEquals(404, jobExecutionDetailResult2.getCode());
}
+ @Test
+ public void testJobInstanceDelete() {
+ String jobName = "jobInstanceDelete" + uniqueId;
+ long jobVersionId = JobTestingUtils.createJob(jobName);
+ Result<Long> result =
jobExecutorControllerWrapper.jobExecutor(jobVersionId);
+ assertTrue(result.isSuccess());
+ assertTrue(result.getData() > 0);
+ Long jobInstanceId = result.getData();
+ JobTestingUtils.waitForJobCompletion(jobInstanceId);
+ Result<SeaTunnelJobInstanceDto> jobExecutionDetailResult =
+
jobExecutorControllerWrapper.getJobExecutionDetail(jobInstanceId);
+ assertTrue(jobExecutionDetailResult.isSuccess());
+ assertNotNull(jobExecutionDetailResult.getData());
+
+ // Delete should be success
+ Result<Void> deleteResult =
jobExecutorControllerWrapper.deleteJobInstance(jobInstanceId);
+ assertTrue(deleteResult.isSuccess());
+
+ // After delete job instance should not be found
+ jobExecutionDetailResult =
+
jobExecutorControllerWrapper.getJobExecutionDetail(jobInstanceId);
+ assertFalse(jobExecutionDetailResult.isSuccess());
+ assertEquals(404, jobExecutionDetailResult.getCode());
+
+ // Delete job instance which do not exist
+ deleteResult =
jobExecutorControllerWrapper.deleteJobInstance(jobInstanceId);
+ // should be success as there is nothing to delete
+ assertTrue(deleteResult.isSuccess());
+ }
+
@AfterAll
public static void tearDown() {
seaTunnelWebCluster.stop();