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