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ò <ilgro...@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