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
44796: Fix for ALF-16413 - Share asks for Basic-Auth while not needed trying to access RSS feeds (thus breaking SSO). - Share Feed Controller which correctly deals with SSO config for the "alfresco-feed" endpoint Configure the "alfresco-feed" endpoint to use SSO in the same way the "alfresco" endpoint is configured for it. Share will then detect this when serving feeds and ensure the SSO auth is used ahead of Basic HTTP auth. 44820: Merged V3.4-BUG-FIX (3.4.12) to V4.1-BUG-FIX (4.1.3) - A few extra 4.x changes were required 44818: ALF-17256 (3.4.12) Update Copyright notice to 2013 44831: ALF-17224 (All wiki pages are enumerated/built to display a single wiki page) 44841: ALF-17206 CIFS loses metadata when metadata edited from Windows 7 Explorer 44844: Incremented version revision to 4.1.4 44848: Fix for ALF-17178 SolrLuceneAnalyser.findAnalyser generating InavlidQNameExceptions wher they are easily protected. 44849: Fix for ALF-17162 Queries for content properties with a long search string causes huge amount of memory usage 44851: ALF-17224: Improvements for the wiki dashlet 44866: Merged PATCHES/V4.1.1 to V4.1-BUG-FIX 44663: ALF-17281 / MNT-231: Unable to cancel editing on certain docs in 4.1.1.10 - It's now impossible for WebDAV or anything else execpt CheckOutCheckInService to unlock a checked out node - It's also now possible to un check out / check in broken unlocked nodes, such as those on ts.alfresco.com! - Unit tests by Viachaslau Tikhanovich 44664: ALF-17281 / MNT-231: Unable to cancel editing on certain docs in 4.1.1.10 - File missed in previous checkin 44867: ALF-17285: Merged PATCHES/V4.0.1 to V4.1-BUG-FIX 44766: MNT-241: Severe performance issues with WebDAV / filesystem / IMAP rename operations - FileFolderServiceImpl.rename calls moveNode to do its renaming work - Unfortunately AbstractNodeDAOImpl.moveNode() was not optimized for the rename case and attempted to cascade-recompute ACLs on a simple folder rename - On a large hierarchy this could result in hanging transactions and delays of several minutes whilst all the node ACLs were repointed and all the node caches were invalidate 44787: MNT-241: Fixed merge issue. 44823: MNT-241: Severe performance issues with WebDAV / filesystem / IMAP rename operations - The last optimization revealed a caching problem - The childByName cache was retaining stale values because node renaming wasn't incrementing the node version key - We were previously relying on the unnecessary ACL re-evaluation on a move to 'bump' the version key and invalidate the childByName cache as a side effect - Now we explicitly invalidate childByNameCache when necessary and also update parent association rows individually rather than in bulk, hopefully avoiding unnecessary database lock contention 44830: MNT-241: Subtlety: On rename we only update and invalidate those associations for which name uniqueness checking is enforced. Such associations have a positive CRC 44868: Merged PATCHES/V4.1.3 to V4.1-BUG-FIX (RECORD ONLY) 44845: Incremented version revision to 4.1.3 44847: Merged PATCHES/V4.1.1 to PATCHES/V4.1.3 44863: ALF-17285: Merged PATCHES/V4.0.1 to PATCHES/V4.1.3 44864: ALF-15935: Merge V4.1-BUG-FIX to V4.1.3 44029 : MNT-180 - Clone for Hotfix: Word document on Windows via CIFS becomes locked (Read Only) when network drops temporarily 44865: Merged V4.1-BUG-FIX to PATCHES/V4.1.3 44872: Merged PATCHES/V4.1.3 to V4.1-BUG-FIX 44871: Fixed merge issue 44875: Merged V4.1-BUG-FIX (4.1.2) to V3.4-BUG-FIX (3.4.12) RECORD ONLY 44815: Merged V4.1-BUG-FIX to V3.4-BUG-FIX 44776: ALF-17164: Fix failing build in case build is not run in continuous mode - move generation of version.properties out of continuous mode 44874: ALF-17283: Merged V4.1-BUG-FIX (4.1.2) to V3.4-BUG-FIX (3.4.12) 41411: Fix possible FTP data session leak if client mixes PORT and PASV commands. ALF-15126 44876: Merged DEV to V4.1-BUG-FIX 44838: ALF-14468: Unable to authorize to Facebook Add 'www' to 'alfresco.com' urls. 44878: ALF-17208 - category.ftl does not allow to find multiple tags in Share advanced Search 44879: Fix for ALF-17150 - Edit Online action missing in Share for some mime types 44880: Fix to merge fail (rev 44866/44872) 44881: Fix for ALF-17186 - JBOSS specific: Google Docs v2 are not working 44904: Fix build - Merry Christmas! 44906: Merged V3.4-BUG-FIX to V4.1-BUG-FIX 44882: Fix for ALF-13805 - Authenticating Share RSS feed using cookies rather than basic auth 44884: Incremented version revision to 3.4.13 44903: Merged V3.4 to V3.4-BUG-FIX 44885: Fix unit test to cope with ALF-14421 version label behaviour (major unless specified). 44905: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 44883: Merged V3.4-BUG-FIX to V3.4 (3.4.12) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@44910 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1411,21 +1411,24 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
final StoreEntity newParentStore = newParentNode.getStore();
|
||||
final Node childNode = getNodeNotNull(childNodeId, true);
|
||||
final StoreEntity childStore = childNode.getStore();
|
||||
ChildAssocEntity primaryParentAssoc = getPrimaryParentAssocImpl(childNodeId);
|
||||
final ChildAssocEntity primaryParentAssoc = getPrimaryParentAssocImpl(childNodeId);
|
||||
final Long oldParentAclId;
|
||||
final Long oldParentNodeId;
|
||||
if (primaryParentAssoc == null)
|
||||
{
|
||||
oldParentAclId = null;
|
||||
oldParentNodeId = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (primaryParentAssoc.getParentNode() == null)
|
||||
{
|
||||
oldParentAclId = null;
|
||||
oldParentNodeId = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
Long oldParentNodeId = primaryParentAssoc.getParentNode().getId();
|
||||
oldParentNodeId = primaryParentAssoc.getParentNode().getId();
|
||||
oldParentAclId = getNodeNotNull(oldParentNodeId, true).getAclId();
|
||||
}
|
||||
}
|
||||
@@ -1491,6 +1494,18 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
assocQName,
|
||||
childNodeNameToUse);
|
||||
controlDAO.releaseSavepoint(savepoint);
|
||||
// Ensure we invalidate the name cache (the child version key might not have been 'bumped' by the last
|
||||
// 'touch')
|
||||
if (updated > 0 && primaryParentAssoc != null)
|
||||
{
|
||||
Pair<Long, QName> oldTypeQnamePair = qnameDAO.getQName(
|
||||
primaryParentAssoc.getTypeQNameId());
|
||||
if (oldTypeQnamePair != null)
|
||||
{
|
||||
childByNameCache.remove(new ChildByNameKey(oldParentNodeId, oldTypeQnamePair.getSecond(),
|
||||
primaryParentAssoc.getChildNodeName()));
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
catch (Throwable e)
|
||||
@@ -1515,16 +1530,20 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
};
|
||||
childAssocRetryingHelper.doWithRetry(callback);
|
||||
|
||||
// Check for cyclic relationships
|
||||
// TODO: This adds a lot of overhead when moving hierarchies.
|
||||
// While getPaths is faster, it would be better to avoid the parentAssocsCache
|
||||
// completely.
|
||||
getPaths(newChildNode.getNodePair(), false);
|
||||
// cycleCheck(newChildNodeId);
|
||||
// Optimize for rename case
|
||||
if (!EqualsHelper.nullSafeEquals(newParentNodeId, oldParentNodeId))
|
||||
{
|
||||
// Check for cyclic relationships
|
||||
// TODO: This adds a lot of overhead when moving hierarchies.
|
||||
// While getPaths is faster, it would be better to avoid the parentAssocsCache
|
||||
// completely.
|
||||
getPaths(newChildNode.getNodePair(), false);
|
||||
// cycleCheck(newChildNodeId);
|
||||
|
||||
// Update ACLs for moved tree
|
||||
Long newParentAclId = newParentNode.getAclId();
|
||||
accessControlListDAO.updateInheritance(newChildNodeId, oldParentAclId, newParentAclId);
|
||||
// Update ACLs for moved tree
|
||||
Long newParentAclId = newParentNode.getAclId();
|
||||
accessControlListDAO.updateInheritance(newChildNodeId, oldParentAclId, newParentAclId);
|
||||
}
|
||||
|
||||
// Done
|
||||
Pair<Long, ChildAssociationRef> assocPair = getPrimaryParentAssoc(newChildNode.getId());
|
||||
@@ -3115,12 +3134,37 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
{
|
||||
public Integer execute() throws Throwable
|
||||
{
|
||||
int total = 0;
|
||||
Savepoint savepoint = controlDAO.createSavepoint("DuplicateChildNodeNameException");
|
||||
try
|
||||
{
|
||||
Integer count = updateChildAssocsUniqueName(childNodeId, childName);
|
||||
for (ChildAssocEntity parentAssoc : getParentAssocsCached(childNodeId).getParentAssocs().values())
|
||||
{
|
||||
// Subtlety: We only update those associations for which name uniqueness checking is enforced.
|
||||
// Such associations have a positive CRC
|
||||
if (parentAssoc.getChildNodeNameCrc() <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
Pair<Long, QName> oldTypeQnamePair = qnameDAO.getQName(parentAssoc.getTypeQNameId());
|
||||
// Ensure we invalidate the name cache (the child version key might not be 'bumped' by the next
|
||||
// 'touch')
|
||||
if (oldTypeQnamePair != null)
|
||||
{
|
||||
childByNameCache.remove(new ChildByNameKey(parentAssoc.getParentNode().getId(),
|
||||
oldTypeQnamePair.getSecond(), parentAssoc.getChildNodeName()));
|
||||
}
|
||||
int count = updateChildAssocUniqueName(parentAssoc.getId(), childName);
|
||||
if (count <= 0)
|
||||
{
|
||||
// Should not be attempting to delete a deleted node
|
||||
throw new ConcurrencyFailureException("Failed to update an existing parent association "
|
||||
+ parentAssoc.getId());
|
||||
}
|
||||
total += count;
|
||||
}
|
||||
controlDAO.releaseSavepoint(savepoint);
|
||||
return count;
|
||||
return total;
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
@@ -4717,7 +4761,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
QName assocTypeQName,
|
||||
QName assocQName,
|
||||
int index);
|
||||
protected abstract int updateChildAssocsUniqueName(Long childNodeId, String name);
|
||||
protected abstract int updateChildAssocUniqueName(Long assocId, String name);
|
||||
// protected abstract int deleteChildAssocsToAndFrom(Long nodeId);
|
||||
protected abstract ChildAssocEntity selectChildAssoc(Long assocId);
|
||||
protected abstract List<ChildAssocEntity> selectChildNodeIds(
|
||||
|
Reference in New Issue
Block a user