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