You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2023/04/21 09:34:19 UTC

[syncope] 04/09: Avoid duplicating Propagation Tasks on re-execution

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

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit e2f94d33419be1a093782866f6ea6d4a56713493
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Apr 20 10:49:34 2023 +0200

    Avoid duplicating Propagation Tasks on re-execution
---
 .../org/apache/syncope/core/logic/TaskLogic.java   |  1 +
 .../api/propagation/PropagationTaskInfo.java       | 13 ++++++++++-
 .../AbstractPropagationTaskExecutor.java           | 26 +++++++++++++---------
 3 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index feac42cc88..0c9d4ee25e 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -305,6 +305,7 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
                         propagationTask.getEntityKey(),
                         propagationTask.getConnObjectKey(),
                         propagationTask.getPropagationData());
+                taskInfo.setKey(propagationTask.getKey());
                 taskInfo.setOldConnObjectKey(propagationTask.getOldConnObjectKey());
 
                 TaskExec<PropagationTask> propExec = taskExecutor.execute(
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
index d9cad412bb..8d77fa935d 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationTaskInfo.java
@@ -30,6 +30,8 @@ import org.identityconnectors.framework.common.objects.ObjectClass;
 
 public class PropagationTaskInfo {
 
+    private String key;
+
     private final ExternalResource resource;
 
     private final ResourceOperation operation;
@@ -74,6 +76,14 @@ public class PropagationTaskInfo {
         this.propagationData = propagationData;
     }
 
+    public void setKey(final String key) {
+        this.key = key;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
     public ExternalResource getResource() {
         return resource;
     }
@@ -145,7 +155,8 @@ public class PropagationTaskInfo {
     @Override
     public String toString() {
         return "PropagationTaskInfo{"
-                + "resource=" + resource.getKey()
+                + "key=" + key
+                + ",resource=" + resource.getKey()
                 + ", operation=" + operation
                 + ", objectClass=" + objectClass
                 + ", anyTypeKind=" + anyTypeKind
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
index 4f320d857e..b26d4bcb7d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
@@ -808,12 +808,11 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
     protected Optional<PropagationTask> hasToBeregistered(
             final PropagationTaskInfo taskInfo, final TaskExec<PropagationTask> execution) {
 
-        boolean result;
-
         boolean failed = ExecStatus.valueOf(execution.getStatus()) != ExecStatus.SUCCESS;
 
         ExternalResource resource = taskInfo.getResource();
 
+        boolean result;
         switch (taskInfo.getOperation()) {
 
             case CREATE:
@@ -839,15 +838,20 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
             return Optional.empty();
         }
 
-        PropagationTask task = taskUtilsFactory.getInstance(TaskType.PROPAGATION).newTask();
-        task.setResource(resourceDAO.find(resource.getKey()));
-        task.setObjectClassName(taskInfo.getObjectClass().getObjectClassValue());
-        task.setAnyTypeKind(taskInfo.getAnyTypeKind());
-        task.setAnyType(taskInfo.getAnyType());
-        task.setEntityKey(taskInfo.getEntityKey());
-        task.setOperation(taskInfo.getOperation());
-        task.setConnObjectKey(taskInfo.getConnObjectKey());
-        task.setOldConnObjectKey(taskInfo.getOldConnObjectKey());
+        PropagationTask task = Optional.ofNullable(taskInfo.getKey()).
+                map(key -> taskDAO.<PropagationTask>find(TaskType.PROPAGATION, key)).
+                orElseGet(() -> {
+                    PropagationTask t = taskUtilsFactory.getInstance(TaskType.PROPAGATION).newTask();
+                    t.setResource(resourceDAO.find(resource.getKey()));
+                    t.setObjectClassName(taskInfo.getObjectClass().getObjectClassValue());
+                    t.setAnyTypeKind(taskInfo.getAnyTypeKind());
+                    t.setAnyType(taskInfo.getAnyType());
+                    t.setEntityKey(taskInfo.getEntityKey());
+                    t.setOperation(taskInfo.getOperation());
+                    t.setConnObjectKey(taskInfo.getConnObjectKey());
+                    t.setOldConnObjectKey(taskInfo.getOldConnObjectKey());
+                    return t;
+                });
         task.setPropagationData(taskInfo.getPropagationData());
 
         return Optional.of(task);