mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V4.1-BUG-FIX to HEAD
42774: ALF-16367: MT fix for "Exporting a tenant from one instance A and importing it to another Alfresco instance B does not work" 42775: Merged DEV to V4.1-BUG-FIX 42274: First part of ALF-14341: WQS: SOLR Request failed wit error 500: DTENANT_FILTER_FROM_JSON WQS jobs don't execute if repository is in the bootstrapping state. RepositoryState class was made thread safe. 42781: ALF-15135: Apple Mail always fails when copying folders with nested folders - Because FileFolderService.resolveNamePath was not properly honouring mustExist==false for parent folders 42798: ALF-16384 - checkLicenseForSyncMode exposed via properties files code comments changed. 42799: ALF-16384 - checkLicenseForSyncMode exposed via properties files properties comments changed. 42801: Merged BRANCHES/DEV/BELARUS/V4.1-BUG-FIX-2012_10_17 to BRANCHES/DEV/V4.1-BUG-FIX: 42748: ALF-14200: Adding Invalid Aspects Via CMIS ATOM API Results in NullPointerException 42802: Fix failing NodeServiceTest - Moved parentless node validation to correct location to avoid NPEs in indexing - Fixed unit test to temporarily disable indexing in order to be able to create a corrupt parentless node git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@42803 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -3867,30 +3867,6 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
completedPaths.add(pathToSave);
|
||||
}
|
||||
|
||||
if (!hasParents && !parentAssocInfo.isStoreRoot())
|
||||
{
|
||||
// We appear to have an orphaned node. But we may just have a temporarily out of sync clustered cache or a
|
||||
// transaction that started ages before the one that committed the cache content!. So double check the node
|
||||
// isn't actually deleted.
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Stale cache detected for Node #" + currentNodeId + ": removing from cache.");
|
||||
}
|
||||
invalidateNodeCaches(currentNodeId);
|
||||
|
||||
Status currentNodeStatus = getNodeRefStatus(currentNodeRef);
|
||||
if (currentNodeStatus == null || currentNodeStatus.isDeleted())
|
||||
{
|
||||
// Force a retry. The cached node was stale
|
||||
throw new DataIntegrityViolationException("Stale cache detected for Node #" + currentNodeId);
|
||||
}
|
||||
|
||||
// We have a corrupt repository - non-root node has a missing parent ?!
|
||||
bindFixAssocAndCollectLostAndFound(currentNodePair, "nonRootNodeWithoutParents", null, false);
|
||||
|
||||
// throw - error will be logged and then bound txn listener (afterRollback) will be called
|
||||
throw new NonRootNodeWithoutParentsException(currentNodePair);
|
||||
}
|
||||
// walk up each parent association
|
||||
for (Map.Entry<Long, ChildAssocEntity> entry : parentAssocInfo.getParentAssocs().entrySet())
|
||||
{
|
||||
@@ -4113,6 +4089,19 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
value = loadParentAssocs(node.getNodeVersionKey());
|
||||
parentAssocsCache.put(cacheKey, value);
|
||||
}
|
||||
|
||||
// We have already validated on loading that we have a list in sync with the child node, so if the list is still
|
||||
// empty we have an integrity problem
|
||||
if (value.getPrimaryParentAssoc() == null && !value.isStoreRoot())
|
||||
{
|
||||
Pair<Long, NodeRef> currentNodePair = node.getNodePair();
|
||||
// We have a corrupt repository - non-root node has a missing parent ?!
|
||||
bindFixAssocAndCollectLostAndFound(currentNodePair, "nonRootNodeWithoutParents", null, false);
|
||||
|
||||
// throw - error will be logged and then bound txn listener (afterRollback) will be called
|
||||
throw new NonRootNodeWithoutParentsException(currentNodePair);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -4185,7 +4174,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
// and the lack of parent associations will be cached, anyway.
|
||||
// But to match earlier fixes of ALF-12393, we do a double-check of the node's details
|
||||
NodeEntity nodeCheckFromDb = selectNodeById(nodeId);
|
||||
if (nodeCheckFromDb == null || !nodeCheckFromDb.getNodeVersionKey().equals(nodeVersionKey))
|
||||
if (nodeCheckFromDb == null || nodeCheckFromDb.getDeleted(qnameDAO) || !nodeCheckFromDb.getNodeVersionKey().equals(nodeVersionKey))
|
||||
{
|
||||
// The node is gone or has moved on in version
|
||||
invalidateNodeCaches(nodeId);
|
||||
|
Reference in New Issue
Block a user