You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by he...@apache.org on 2022/02/26 06:59:14 UTC

[incubator-inlong] branch master updated: [INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)

This is an automated email from the ASF dual-hosted git repository.

healchow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 847c9a6  [INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)
847c9a6 is described below

commit 847c9a6d2af67b7f3694700ea6ae43322c81055f
Author: kipshi <48...@users.noreply.github.com>
AuthorDate: Sat Feb 26 14:59:09 2022 +0800

    [INLONG-2731][Manager] Add deep clone method to service task, use prototype instead of singleton (#2733)
---
 .../workflow/core/impl/WorkflowContextBuilderImpl.java      | 13 +++++++++----
 .../inlong/manager/workflow/definition/ServiceTask.java     | 10 ++++++++++
 .../apache/inlong/manager/workflow/definition/UserTask.java |  9 +++++++++
 .../inlong/manager/workflow/definition/WorkflowTask.java    |  1 +
 4 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
index 7ebe747..8a5d799 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/core/impl/WorkflowContextBuilderImpl.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.workflow.core.impl;
 
 import com.google.common.collect.Lists;
+import lombok.SneakyThrows;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.inlong.manager.common.util.JsonUtils;
 import org.apache.inlong.manager.common.util.Preconditions;
@@ -55,9 +56,10 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
         this.taskEntityMapper = taskEntityMapper;
     }
 
+    @SneakyThrows
     @Override
     public WorkflowContext buildContextForProcess(String name, String applicant, ProcessForm form) {
-        WorkflowProcess process = definitionRepository.get(name);
+        WorkflowProcess process = definitionRepository.get(name).clone();
         WorkflowContext context = new WorkflowContext();
         context.setProcess(process);
         context.setProcessForm(form);
@@ -66,11 +68,12 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
         return context;
     }
 
+    @SneakyThrows
     @Override
     public WorkflowContext buildContextForProcess(Integer processId) {
         WorkflowProcessEntity processEntity = processEntityMapper.selectById(processId);
         Preconditions.checkNotNull(processEntity, "process not exist with id: " + processId);
-        WorkflowProcess process = definitionRepository.get(processEntity.getName());
+        WorkflowProcess process = definitionRepository.get(processEntity.getName()).clone();
 
         return new WorkflowContext()
                 .setApplicant(processEntity.getApplicant())
@@ -96,23 +99,25 @@ public class WorkflowContextBuilderImpl implements WorkflowContextBuilder {
         return buildContextForTask(taskId, action, null, transferToUsers, remark, operator);
     }
 
+    @SneakyThrows
     @Override
     public WorkflowContext buildContextForTask(Integer taskId, WorkflowAction action) {
         WorkflowTaskEntity taskEntity = taskEntityMapper.selectById(taskId);
-        WorkflowProcess process = definitionRepository.get(taskEntity.getProcessName());
+        WorkflowProcess process = definitionRepository.get(taskEntity.getProcessName()).clone();
         TaskForm taskForm = WorkflowFormParserUtils.parseTaskForm(taskEntity, process);
         List<String> transferToUsers = getTransferToUsers(taskEntity.getExtParams());
         return buildContextForTask(taskId, action, taskForm, transferToUsers, taskEntity.getRemark(),
                 taskEntity.getOperator());
     }
 
+    @SneakyThrows
     private WorkflowContext buildContextForTask(Integer taskId, WorkflowAction action, TaskForm taskForm,
             List<String> transferToUsers, String remark, String operator) {
         WorkflowTaskEntity taskEntity = taskEntityMapper.selectById(taskId);
         Preconditions.checkNotNull(taskEntity, "task not exist with id: " + taskId);
 
         WorkflowProcessEntity processEntity = processEntityMapper.selectById(taskEntity.getProcessId());
-        WorkflowProcess process = definitionRepository.get(processEntity.getName());
+        WorkflowProcess process = definitionRepository.get(processEntity.getName()).clone();
         ProcessForm processForm = WorkflowFormParserUtils.parseProcessForm(processEntity.getFormData(), process);
         WorkflowTask task = process.getTaskByName(taskEntity.getName());
 
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
index 482320a..6aefdb5 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/ServiceTask.java
@@ -20,6 +20,7 @@ package org.apache.inlong.manager.workflow.definition;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import java.util.concurrent.atomic.AtomicBoolean;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.inlong.manager.common.exceptions.WorkflowException;
 import org.apache.inlong.manager.common.util.Preconditions;
@@ -84,6 +85,15 @@ public class ServiceTask extends WorkflowTask {
         }
     }
 
+    @SneakyThrows
+    @Override
+    public ServiceTask clone() {
+        ServiceTask serviceTask = (ServiceTask) super.clone();
+        serviceTask.addServiceTaskType(this.serviceTaskType);
+        serviceTask.addListenerProvider(this.listenerProvider);
+        return serviceTask;
+    }
+
     public WorkflowTask addListenerProvider(ServiceTaskListenerProvider provider) {
         this.listenerProvider = provider;
         return this;
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
index 8d3b67a..910a864 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/UserTask.java
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableSet;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
 import org.apache.inlong.manager.common.exceptions.WorkflowException;
 import org.apache.inlong.manager.common.pojo.workflow.form.TaskForm;
 import org.apache.inlong.manager.common.util.Preconditions;
@@ -75,4 +76,12 @@ public class UserTask extends WorkflowTask {
         }
     }
 
+    @SneakyThrows
+    @Override
+    public UserTask clone() {
+        UserTask userTask = (UserTask) super.clone();
+        userTask.setApproverAssign(this.approverAssign);
+        userTask.setFormClass(this.formClass);
+        return userTask;
+    }
 }
diff --git a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
index af7a925..28eeb98 100644
--- a/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
+++ b/inlong-manager/manager-workflow/src/main/java/org/apache/inlong/manager/workflow/definition/WorkflowTask.java
@@ -77,6 +77,7 @@ public abstract class WorkflowTask extends NextableElement implements SkippableE
         WorkflowTask cloneTask = (WorkflowTask) super.clone();
         cloneTask.setSyncListeners(new HashMap<>(syncListeners));
         cloneTask.setAsyncListeners(new HashMap<>(asyncListeners));
+        cloneTask.setNameToListenerMap(new HashMap<>(nameToListenerMap));
         return cloneTask;
     }