From f35159080173237c0755799db4dd3461d29e6c04 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Fri, 13 Nov 2009 18:11:12 +0000 Subject: [PATCH] Merged V3.2 to HEAD 17476: ETHREEOH-3374: Fixed problem when LDAP sync worker thread reaches a child group out of order from its parent - Used fix from ETHREEOH-3295 to force transaction retry git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17477 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../sync/ChainingUserRegistrySynchronizer.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizer.java b/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizer.java index 309ade8f4f..f84741fc80 100644 --- a/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizer.java +++ b/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizer.java @@ -24,6 +24,7 @@ */ package org.alfresco.repo.security.sync; +import java.sql.BatchUpdateException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; @@ -47,6 +48,7 @@ import org.alfresco.repo.management.subsystems.ActivateableBean; import org.alfresco.repo.management.subsystems.ChildApplicationContextManager; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; +import org.alfresco.repo.security.authority.UnknownAuthorityException; import org.alfresco.repo.security.sync.BatchProcessor.Worker; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -817,7 +819,16 @@ public class ChainingUserRegistrySynchronizer extends AbstractLifecycleBean impl .getShortName(groupName) + "'"); } } - ChainingUserRegistrySynchronizer.this.authorityService.addAuthority(parents, child); + try + { + ChainingUserRegistrySynchronizer.this.authorityService.addAuthority(parents, child); + } + catch (UnknownAuthorityException e) + { + // Let's force a transaction retry if a parent doesn't exist. It may be because we are + // waiting for another worker thread to create it + throw new BatchUpdateException().initCause(e); + } } Set parentsToDelete = groupAssocsToDelete.get(child); if (parentsToDelete != null && !parentsToDelete.isEmpty())