From bd4baa5e98f4b22058b39c1801502ce07cbba540 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 29 Nov 2011 11:45:48 +0000 Subject: [PATCH] Minor follow up on 32329: ALF-11734: Concurrency conditions not handled correctly for ACL persistence - Pessimistically throw away the node cache entry referencing the ACL git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32381 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/domain/node/AbstractNodeDAOImpl.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 3e96f86a7a..40b5549093 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -1055,11 +1055,20 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO Long childAclId = null; if (parentAclId != null) { - AccessControlListProperties inheritedAcl = aclDAO.getAccessControlListProperties( - aclDAO.getInheritedAccessControlList(parentAclId)); - if (inheritedAcl != null) + try { - childAclId = inheritedAcl.getId(); + Long inheritedACL = aclDAO.getInheritedAccessControlList(parentAclId); + AccessControlListProperties inheritedAcl = aclDAO.getAccessControlListProperties(inheritedACL); + if (inheritedAcl != null) + { + childAclId = inheritedAcl.getId(); + } + } + catch (Throwable e) + { + // The get* calls above actually do writes. So pessimistically get rid of the + // parent node from the cache in case it was wrong somehow. + invalidateNodeCaches(parentNodeId); } } // Build the cm:auditable properties