Merged V3.2 to HEAD

17332: ETHREEOH-2020: Original tag disappears after a new one has been added to a wiki page
   17711: Fix ETHREEOH-3720 - blocker (upgrade from 2.x)
   17712: Build/test fix (FeedCleanerTest.testConcurrentAccessAndRemoval)
   17726: DownloadContentServlet wraps call in read-only RetryingTransactionHelper
   17736: Fix ETHREEOH-2821 - deployment of layered file (fix for 3.2 deployment)
   17745: Fixed broken PostgreSQL (AVM, audit, etc) and Oracle (audit)
   17746: Merged V3.1 to V3.2
      17290: Merged V2.2 to V3.1
         17282: (record-only) Fix for ETWOTWO-1387: Node deletions transactions not properly detected ...
      17381: (record-only) Putting explicit version name on PDFRenderer.jar
      17413: (record-only) Removed dev from label
   17749: Type handler fixes for PostgreSQL: Use LONGVARBINARY
   17750: Fixed propval mappings for DB2
   17754: Fixed "invalid character" in Oracle port of propval
   17757: Re-added fix for ETHREEOH-2789 that got lost in a merge.
   17762: Fix FeedCleanerTest (for Oracle 10g) + exposed feed cleaner issue (maxSize)
   17765: Assorted minor build fixes for Oracle
   17767: Empty String property values are persisted as '.empty'
   17768: Merged DEV/BELARUS/V3.2-2009_11_24 to V3.2
      17758: ETHREEOH-3757: Oracle upgrade issue: failed "inviteEmailTemplate" patch
   17772: Fix build (JBPMEngineUnitTest) - fallout from r17765
   17774: Fix JSONtoFmModelTest
   17781: Build/test fix (AVMCrawlTestP)
   17791: Fix for ETHREEOH-3793: Oracle unit test failure for JobLockServiceTest - Missing unique indexes for all DB ports
   17795: ETHREEOH-3696: Attempt to navigate into any existent web-project or create new one after upgrade from Enterprise 2.1.7 ...
   17799: ETHREEOH-3796: org.alfresco.repo.importer.ImporterComponentTest fails
   17807: Fix ETHREEOH-3723 - MT blocker (can't restart)
   17816: Merged DEV/BELARUS/V3.2-2009_12_15 to V3.2
      17814: ETHREEOH-3808: Upgrade fails if content cm:name contains curly brackets ('{}')
   17822: Fix for ETHREEOH-3828: Mistake porting AlfrescoPostCreate-3.2-PropertyValueTables.sql script to mssql dialect
   17823: Fix for ETHREEOH-3829: SQLServer index limit reached for 'idx_alf_props_str'
   17831: Fix ETHREEOH-3818 - upgrade from Community 3.2r2 to Enterprise 3.2
   17862: Merged V3.1 to V3.2
      17722: Fix ETHREEOH-3643 - WCM layered folders (flatten) - also add unit test
      17835: ETHREEOH-3763 - fix for WCM layered folders - also add unit test
   17871: Merged V3.1 to V3.2
      17855: ACT 12915 - create web project performance (-> setPermission -> buildIndirections)
      17863: ETHREEOH-3852 - perf tweak (WCM layered files)
-------------------------------------
Modified: svn:mergeinfo
   Merged /alfresco/BRANCHES/DEV/BELARUS/V3.2-2009_11_24:r17758
   Merged /alfresco/BRANCHES/DEV/BELARUS/V3.2-2009_12_15:r17814
   Merged /alfresco/BRANCHES/V2.2:r17282
   Merged /alfresco/BRANCHES/V3.1:r17290,17381,17413,17722,17835,17855,17863
   Merged /alfresco/BRANCHES/V3.2:r17332,17711-17712,17726,17736,17745-17746,17749-17750,17754,17757,17762,17765,17767-17768,17772,17774,17781,17791,17795,17799,17807,17816,17822-17823,17831,17862,17871


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18169 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2010-01-20 12:30:14 +00:00
parent 5e86299377
commit add74c1a59
50 changed files with 1160 additions and 293 deletions

View File

@@ -58,7 +58,7 @@ import org.apache.commons.logging.LogFactory;
*/
public class AVMSyncServiceImpl implements AVMSyncService
{
private static Log fgLogger = LogFactory.getLog(AVMSyncServiceImpl.class);
private static Log logger = LogFactory.getLog(AVMSyncServiceImpl.class);
/**
* The AVMService.
@@ -115,9 +115,11 @@ public class AVMSyncServiceImpl implements AVMSyncService
int dstVersion, String dstPath,
NameMatcher excluder)
{
if (fgLogger.isDebugEnabled())
long start = System.currentTimeMillis();
if (logger.isDebugEnabled())
{
fgLogger.debug(srcPath + " : " + dstPath);
logger.debug(srcPath + " : " + dstPath);
}
if (srcPath == null || dstPath == null)
{
@@ -142,6 +144,12 @@ public class AVMSyncServiceImpl implements AVMSyncService
// Invoke the recursive implementation.
compare(srcVersion, srcDesc, dstVersion, dstDesc, result, excluder, true);
}
if (logger.isDebugEnabled())
{
logger.debug("Raw compare: ["+srcVersion+","+srcPath+"]["+dstVersion+","+dstPath+"]["+result.size()+"] in "+(System.currentTimeMillis()-start)+" msecs");
}
return result;
}
@@ -403,6 +411,7 @@ public class AVMSyncServiceImpl implements AVMSyncService
boolean overrideConflicts, boolean overrideOlder, String tag, String description)
{
long start = System.currentTimeMillis();
Map<String, Integer> storeVersions = new HashMap<String, Integer>();
Set<String> destStores = new HashSet<String>();
for (AVMDifference diff : diffList)
@@ -416,9 +425,9 @@ public class AVMSyncServiceImpl implements AVMSyncService
{
throw new AVMSyncException("Malformed AVMDifference.");
}
if (fgLogger.isDebugEnabled())
if (logger.isDebugEnabled())
{
fgLogger.debug("update: " + diff);
logger.debug("update: " + diff);
}
// Snapshot the source if needed.
int version = diff.getSourceVersion();
@@ -460,13 +469,15 @@ public class AVMSyncServiceImpl implements AVMSyncService
dispatchUpdate(diffCode, dstParts[0], dstParts[1], excluder, srcDesc, dstDesc,
ignoreConflicts, ignoreOlder, overrideConflicts, overrideOlder);
}
for (String storeName : destStores)
{
fAVMService.createSnapshot(storeName, tag, description);
}
if (fgLogger.isDebugEnabled())
if (logger.isDebugEnabled())
{
fgLogger.debug("Raw Update: " + (System.currentTimeMillis() - start));
logger.debug("Raw update: [" + diffList.size() + "] in " + (System.currentTimeMillis() - start) + " msecs");
}
}
@@ -558,9 +569,9 @@ public class AVMSyncServiceImpl implements AVMSyncService
catch (AVMNotFoundException nfe)
{
// ignore
if (fgLogger.isDebugEnabled())
if (logger.isDebugEnabled())
{
fgLogger.debug("linkIn: Does not exist: "+parentPath+"/"+name);
logger.debug("linkIn: Does not exist: "+parentPath+"/"+name);
}
}
return;
@@ -1126,6 +1137,8 @@ public class AVMSyncServiceImpl implements AVMSyncService
*/
public void flatten(String layerPath, String underlyingPath)
{
long start = System.currentTimeMillis();
if (layerPath == null || underlyingPath == null)
{
throw new AVMBadArgumentException("Illegal null path.");
@@ -1140,11 +1153,13 @@ public class AVMSyncServiceImpl implements AVMSyncService
{
throw new AVMNotFoundException("Not found: " + underlyingPath);
}
if (fgLogger.isDebugEnabled())
flatten(layerNode, underlyingNode);
if (logger.isDebugEnabled())
{
fgLogger.debug("flatten: " + layerNode + " " + underlyingNode);
logger.debug("Raw flatten: " + layerNode + " " + underlyingNode + " in " + (System.currentTimeMillis() - start) + " msecs");
}
flatten(layerNode, underlyingNode);
}
/**
@@ -1154,9 +1169,9 @@ public class AVMSyncServiceImpl implements AVMSyncService
*/
private boolean flatten(AVMNodeDescriptor layer, AVMNodeDescriptor underlying)
{
if (fgLogger.isDebugEnabled())
if (logger.isDebugEnabled())
{
fgLogger.debug("flatten: " + layer + " " + underlying);
logger.debug("flatten: " + layer + " " + underlying);
}
if (!layer.isLayeredDirectory())
{
@@ -1172,6 +1187,7 @@ public class AVMSyncServiceImpl implements AVMSyncService
{
return false;
}
Map<String, AVMNodeDescriptor> layerListing =
fAVMService.getDirectoryListingDirect(-1, layer.getPath(), true);
// If the layer is empty (directly, that is) we're done.
@@ -1179,26 +1195,29 @@ public class AVMSyncServiceImpl implements AVMSyncService
{
return true;
}
List<AVMDifference> diffs = compare(-1, layer.getPath(), -1, underlying.getPath(), null);
if (diffs.size() == 0)
{
for (String name : layerListing.keySet())
{
fAVMRepository.flatten(layer.getPath(), name);
}
return true;
}
// Grab the listing
Map<String, AVMNodeDescriptor> underListing =
fAVMService.getDirectoryListing(underlying, true);
boolean flattened = true;
for (String name : layerListing.keySet())
{
AVMNodeDescriptor topNode = layerListing.get(name);
AVMNodeDescriptor bottomNode = underListing.get(name);
// fgLogger.error("Trying to flatten out: " + name);
if (logger.isTraceEnabled())
{
logger.trace("Trying to flatten out: " + name);
}
if (bottomNode == null)
{
if (logger.isTraceEnabled())
{
logger.trace("Can't flatten (no bottomNode): " + name);
}
flattened = false;
continue;
}
@@ -1206,15 +1225,38 @@ public class AVMSyncServiceImpl implements AVMSyncService
if (topNode.getId() == bottomNode.getId())
{
fAVMRepository.flatten(layer.getPath(), name);
// fgLogger.error("Identity flattened: " + name);
if (logger.isTraceEnabled())
{
logger.trace("Identity flattened: " + name);
}
}
else
{
if (bottomNode.isLayeredDirectory())
{
AVMNodeDescriptor lookup = fAVMService.lookup(bottomNode.getIndirectionVersion(), bottomNode.getIndirection());
if (lookup == null)
{
if (logger.isDebugEnabled())
{
logger.debug("Can't flatten (no bottomNode indirection): " + name);
}
flattened = false;
continue;
}
}
// Otherwise recursively flatten the children.
if (flatten(topNode, bottomNode))
{
fAVMRepository.flatten(layer.getPath(), name);
// fgLogger.error("Recursively flattened: " + name);
if (logger.isTraceEnabled())
{
logger.trace("Recursively flattened: " + name);
}
}
else
{
@@ -1224,7 +1266,7 @@ public class AVMSyncServiceImpl implements AVMSyncService
}
return flattened;
}
/**
* Takes a layer, deletes it and recreates it pointing at the same underlying
* node. Any changes in the layer are lost (except to history if the layer has been
@@ -1236,6 +1278,8 @@ public class AVMSyncServiceImpl implements AVMSyncService
*/
public void resetLayer(String layerPath)
{
long start = System.currentTimeMillis();
AVMNodeDescriptor desc = fAVMService.lookup(-1, layerPath);
if (desc == null)
{
@@ -1247,6 +1291,11 @@ public class AVMSyncServiceImpl implements AVMSyncService
{
fAVMRepository.flatten(layerPath, name);
}
if (logger.isDebugEnabled())
{
logger.debug("Raw resetLayer: " + layerPath + " in " + (System.currentTimeMillis() - start) + " msecs");
}
}
/**