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 2022/06/30 07:58:25 UTC

[syncope] branch master updated: [SYNCOPE-1687] Adding prefetch option to PropagationPolicy

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


The following commit(s) were added to refs/heads/master by this push:
     new e962bd0956 [SYNCOPE-1687] Adding prefetch option to PropagationPolicy
e962bd0956 is described below

commit e962bd0956d013cda6419f8ce1063c653ba55100
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Jun 30 09:58:17 2022 +0200

    [SYNCOPE-1687] Adding prefetch option to PropagationPolicy
---
 .../console/policies/PropagationPolicyDirectoryPanel.java  |  2 ++
 .../client/console/policies/PolicyModalPanelBuilder.java   |  6 ++++++
 .../console/policies/PolicyDirectoryPanel.properties       |  1 +
 .../console/policies/PolicyDirectoryPanel_fr_CA.properties |  1 +
 .../console/policies/PolicyDirectoryPanel_it.properties    |  1 +
 .../console/policies/PolicyDirectoryPanel_ja.properties    |  1 +
 .../console/policies/PolicyDirectoryPanel_pt_BR.properties |  1 +
 .../console/policies/PolicyDirectoryPanel_ru.properties    |  1 +
 .../syncope/common/lib/policy/PropagationPolicyTO.java     | 10 ++++++++++
 .../persistence/api/entity/policy/PropagationPolicy.java   |  4 ++++
 .../src/test/resources/domains/MasterContent.xml           |  2 +-
 .../jpa/entity/policy/JPAPropagationPolicy.java            | 13 +++++++++++++
 .../src/test/resources/domains/MasterContent.xml           |  2 +-
 .../core/provisioning/java/data/PolicyDataBinderImpl.java  |  2 ++
 .../java/propagation/AbstractPropagationTaskExecutor.java  | 14 ++++++++++++++
 src/main/asciidoc/reference-guide/concepts/policies.adoc   |  4 +++-
 16 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/PropagationPolicyDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/PropagationPolicyDirectoryPanel.java
index 8a9a7937b6..058304c883 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/PropagationPolicyDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/PropagationPolicyDirectoryPanel.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.policies;
 
 import java.util.List;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.common.lib.policy.PropagationPolicyTO;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.syncope.common.lib.types.PolicyType;
@@ -46,6 +47,7 @@ public class PropagationPolicyDirectoryPanel extends PolicyDirectoryPanel<Propag
 
     @Override
     protected void addCustomColumnFields(final List<IColumn<PropagationPolicyTO, String>> columns) {
+        columns.add(new BooleanPropertyColumn<>(new StringResourceModel("prefetch", this), "prefetch", "prefetch"));
         columns.add(new PropertyColumn<>(new StringResourceModel("maxAttempts", this), "maxAttempts", "maxAttempts"));
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
index f3b8a5e17b..3bd9da6e8a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
@@ -178,6 +178,12 @@ public class PolicyModalPanelBuilder<T extends PolicyTO> extends AbstractModalPa
                     break;
 
                 case PROPAGATION:
+                    fields.add(new AjaxCheckBoxPanel(
+                            "field",
+                            "prefetch",
+                            new PropertyModel<>(policyTO, "prefetch"),
+                            false));
+
                     fields.add(new AjaxSpinnerFieldPanel.Builder<Integer>().build(
                             "field",
                             "maxAttempts",
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties
index 1f1d3dc427..98454bb6a6 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties
@@ -53,3 +53,4 @@ rejectedAttrs.title=Rejected Attributes
 unauthorizedRedirectUrl=Unauthorized Redirect URL
 maxAttempts=Max Attempts
 backOffStrategy=BackOff Strategy
+prefetch=Prefetch
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_fr_CA.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_fr_CA.properties
index a7858b0bc6..8adddbd263 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_fr_CA.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_fr_CA.properties
@@ -53,3 +53,4 @@ rejectedAttrs.title=Rejected Attributes
 unauthorizedRedirectUrl=Unauthorized Redirect URL
 maxAttempts=Max Attempts
 backOffStrategy=BackOff Strategy
+prefetch=Prefetch
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties
index 690c704b62..99c62d4816 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties
@@ -53,3 +53,4 @@ rejectedAttrs.title=Attributi Rifiutati
 unauthorizedRedirectUrl=URL di Ridirezione Per Mancata Autorizzazione
 maxAttempts=Tentativi Massimi
 backOffStrategy=Strategia di BackOff
+prefetch=Prefetch
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ja.properties
index ebefed5285..f167bf3b22 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ja.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ja.properties
@@ -53,3 +53,4 @@ rejectedAttrs.title=Rejected Attributes
 unauthorizedRedirectUrl=Unauthorized Redirect URL
 maxAttempts=Max Attempts
 backOffStrategy=BackOff Strategy
+prefetch=Prefetch
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties
index 29e278e3f3..87254c0787 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties
@@ -53,3 +53,4 @@ rejectedAttrs.title=Rejected Attributes
 unauthorizedRedirectUrl=Unauthorized Redirect URL
 maxAttempts=Max Attempts
 backOffStrategy=BackOff Strategy
+prefetch=Prefetch
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties
index 4212773b3e..963b7d6b2d 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties
@@ -54,3 +54,4 @@ rejectedAttrs.title=Rejected Attributes
 unauthorizedRedirectUrl=Unauthorized Redirect URL
 maxAttempts=Max Attempts
 backOffStrategy=BackOff Strategy
+prefetch=Prefetch
diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java
index 90bc7cd781..1fd7ac0524 100644
--- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java
+++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java
@@ -28,6 +28,8 @@ public class PropagationPolicyTO extends PolicyTO {
 
     private static final long serialVersionUID = 10604950933449L;
 
+    private boolean prefetch = true;
+
     private BackOffStrategy backOffStrategy = BackOffStrategy.FIXED;
 
     private String backOffParams = BackOffStrategy.FIXED.getDefaultBackOffParams();
@@ -42,6 +44,14 @@ public class PropagationPolicyTO extends PolicyTO {
         return getClass().getName();
     }
 
+    public boolean isPrefetch() {
+        return prefetch;
+    }
+
+    public void setPrefetch(final boolean prefetch) {
+        this.prefetch = prefetch;
+    }
+
     public BackOffStrategy getBackOffStrategy() {
         return backOffStrategy;
     }
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/PropagationPolicy.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/PropagationPolicy.java
index d4e8172997..532b27de14 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/PropagationPolicy.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/policy/PropagationPolicy.java
@@ -22,6 +22,10 @@ import org.apache.syncope.common.lib.types.BackOffStrategy;
 
 public interface PropagationPolicy extends Policy {
 
+    boolean isPrefetch();
+
+    void setPrefetch(boolean prefetch);
+
     BackOffStrategy getBackOffStrategy();
 
     void setBackOffStrategy(BackOffStrategy backOffStrategy);
diff --git a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index d508cad45e..fb4299750b 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -44,7 +44,7 @@ under the License.
                   body='{"_class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"special":1,"specialChars":["@","!"],"digit":1,"lowercase":1,"uppercase":1,"wordsNotPermitted":["notpermitted1","notpermitted2"]}'/>
   <PasswordPolicyRule policy_id="55e5de0b-c79c-4e66-adda-251b6fb8579a" implementation_id="DefaultPasswordRuleConf3"/>
   <PropagationPolicy id="89d322db-9878-420c-b49c-67be13df9a12" name="sample propagation policy"
-                     maxAttempts="5" backOffStrategy="FIXED" backOffParams="10000"/>
+                     prefetch="1" maxAttempts="5" backOffStrategy="FIXED" backOffParams="10000"/>
 
   <!-- Authentication policies -->
   <AuthPolicy id="659b9906-4b6e-4bc0-aca0-6809dff346d4" name="MyDefaultAuthPolicyConf"
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPropagationPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPropagationPolicy.java
index 207886f382..e3b634a2f1 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPropagationPolicy.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAPropagationPolicy.java
@@ -35,6 +35,9 @@ public class JPAPropagationPolicy extends AbstractPolicy implements PropagationP
 
     public static final String TABLE = "PropagationPolicy";
 
+    @NotNull
+    private Boolean prefetch = true;
+
     @Enumerated(EnumType.STRING)
     @NotNull
     private BackOffStrategy backOffStrategy;
@@ -44,6 +47,16 @@ public class JPAPropagationPolicy extends AbstractPolicy implements PropagationP
     @NotNull
     private Integer maxAttempts = 3;
 
+    @Override
+    public boolean isPrefetch() {
+        return prefetch;
+    }
+
+    @Override
+    public void setPrefetch(final boolean prefetch) {
+        this.prefetch = prefetch;
+    }
+
     @Override
     public BackOffStrategy getBackOffStrategy() {
         return backOffStrategy;
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 7a90deec3f..1336795aec 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -44,7 +44,7 @@ under the License.
                   body='{"_class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"special":1,"specialChars":["@","!"],"digit":1,"lowercase":1,"uppercase":1,"wordsNotPermitted":["notpermitted1","notpermitted2"]}'/>
   <PasswordPolicyRule policy_id="55e5de0b-c79c-4e66-adda-251b6fb8579a" implementation_id="DefaultPasswordRuleConf3"/>
   <PropagationPolicy id="89d322db-9878-420c-b49c-67be13df9a12" name="sample propagation policy"
-                     maxAttempts="5" backOffStrategy="FIXED" backOffParams="10000"/>
+                     prefetch="1" maxAttempts="5" backOffStrategy="FIXED" backOffParams="10000"/>
 
   <!-- Authentication policies -->
   <AuthPolicy id="659b9906-4b6e-4bc0-aca0-6809dff346d4" name="MyDefaultAuthPolicyConf"
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
index db197f30f9..0a97c964bf 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
@@ -148,6 +148,7 @@ public class PolicyDataBinderImpl implements PolicyDataBinder {
             PropagationPolicy propagationPolicy = PropagationPolicy.class.cast(result);
             PropagationPolicyTO propagationPolicyTO = PropagationPolicyTO.class.cast(policyTO);
 
+            propagationPolicy.setPrefetch(propagationPolicyTO.isPrefetch());
             propagationPolicy.setBackOffStrategy(propagationPolicyTO.getBackOffStrategy());
             propagationPolicy.setBackOffParams(propagationPolicyTO.getBackOffParams());
             propagationPolicy.setMaxAttempts(propagationPolicyTO.getMaxAttempts());
@@ -307,6 +308,7 @@ public class PolicyDataBinderImpl implements PolicyDataBinder {
             PropagationPolicyTO propagationPolicyTO = new PropagationPolicyTO();
             policyTO = (T) propagationPolicyTO;
 
+            propagationPolicyTO.setPrefetch(propagationPolicy.isPrefetch());
             propagationPolicyTO.setBackOffStrategy(propagationPolicy.getBackOffStrategy());
             propagationPolicyTO.setBackOffParams(propagationPolicy.getBackOffParams());
             propagationPolicyTO.setMaxAttempts(propagationPolicy.getMaxAttempts());
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 eb22d2d64a..4ee1a26114 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
@@ -705,6 +705,13 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
             final List<PropagationActions> actions,
             final boolean latest) {
 
+        if (task.getResource().getPropagationPolicy() != null
+                && !task.getResource().getPropagationPolicy().isPrefetch()) {
+
+            LOG.debug("Skipping because of configured PropagationPolicy");
+            return null;
+        }
+
         String connObjectKeyValue = latest || task.getOldConnObjectKey() == null
                 ? task.getConnObjectKey()
                 : task.getOldConnObjectKey();
@@ -732,6 +739,13 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
             final List<PropagationActions> actions,
             final boolean latest) {
 
+        if (task.getResource().getPropagationPolicy() != null
+                && !task.getResource().getPropagationPolicy().isPrefetch()) {
+
+            LOG.debug("Skipping because of configured PropagationPolicy");
+            return null;
+        }
+
         String connObjectKey = latest || task.getOldConnObjectKey() == null
                 ? task.getConnObjectKey()
                 : task.getOldConnObjectKey();
diff --git a/src/main/asciidoc/reference-guide/concepts/policies.adoc b/src/main/asciidoc/reference-guide/concepts/policies.adoc
index 51746fdce8..9325fd514b 100644
--- a/src/main/asciidoc/reference-guide/concepts/policies.adoc
+++ b/src/main/asciidoc/reference-guide/concepts/policies.adoc
@@ -324,10 +324,12 @@ https://apereo.github.io/cas/6.5.x/authentication/Configuring-Authentication-Pol
 ==== Propagation
 
 Propagation policies are evaluated during the execution of <<tasks-propagation,propagation tasks>> and are meant to
-retry the configured operations in case of propagation failures.
+tweak the propagation process by setting the pre-fetch option or letting Syncope to retry the configured operations in
+case of failures.
 
 When defining a propagation policy, the following information must be provided:
 
+* pre-fetch - the default behavior to attempt to read upfront the object being propagated can be disabled
 * max number of attempts
 * back-off strategy
 ** `FIXED` - pauses for a fixed period of time before continuing