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();

Reply via email to