mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.2 to HEAD
15897: Merged V3.1 to V3.2 14485: (RECORD ONLY) ETHREEOH-1937 14915: (RECORD ONLY) Fix for ETHREEOH-2011: chaining-authentication-context.xml.sample 14954: (RECORD ONLY) Fix merge error 14966: (RECORD ONLY) Merged V2.2 to V3.1 14131: *RECORD ONLY* 14605: Merged HEAD to V2.2 (workaround for ETWOTWO-1137) 14368: Fix for ETHREEOH-1936 14607: Fixed NPE in TextMiningContentTransformer: Lead-up to fix for ETWOTWO-1174 14992: (RECORD ONLY) Updated svn:mergeinfo for V2.1-A 15080: Applied suggested fix for ETHREEOH-2252: Emailed content created in wrong space 15131: Merged V2.1-A to V3.1 (ETHREEOH-2270) 13465: Fix for ADB-161 ACT 7870 - added 'xsd' to mimetype map. 15134: Merged V2.2 to V3.1 14332: (RECORD-ONLY) 14717: (RECORD-ONLY) 14745: (RECORD-ONLY) 14746: Fixed error relating to detection and clean-up of duplicate child associations 14759: Missed check-in: Set transactionService for post-transaction duplicate child assoc cleanup 14761: (RECORD-ONLY) 14885: (RECORD-ONLY) 14893: (RECORD-ONLY) 14903: (RECORD-ONLY) 15204: Fixed ETHREEOH-2303: FixNameCrcValuesPatch throws ConstraintViolationException during upgrade ... 15214: Fixed ETHREEOH-1861: Offline synchronization updates file content without any changes 15271: Applied patch fix: Imported users don't conform to case-sensitivity switch 15352: ETHREEOH-2322 15361: ETHREEOH-1112 15369: ETHREEOH-2448 15419: ETHREEOH-2479 15431: ETHREEOH-2520 and ETHREEOH-2521 15587: (RECORD ONLY) Moved Enterprise-only scripts to correct location 15616: Fix ETHREEOH-2581 - WCM layered folder - can't submit deleted file 15675: WCM fixes (ETHREEOH-2110 & ETHREEOH-2645) 15836: Check for null username in ContentUsage service getUserUsage() method 15840: (RECORD ONLY) Merged V3.2 to V3.1 14760: Fix for ALFCOM-586 - trims and ignores leading/trailing whitespace before validation in JSF client forms. 15841: Fixes for ETHREEOH-2702 and ETHREEOH-2687 15860: (RECORD ONLY) Added Oracle and MS SQL Server config 15891: Removed unused compiler directive ___________________________________________________________________ Modified: svn:mergeinfo Merged /alfresco/BRANCHES/DEV/BELARUS/ETHREEOH-2221:r14753 Merged /alfresco/BRANCHES/V2.1-A: lots Merged /alfresco/BRANCHES/V2.2:r14131,14332,14605,14607,14717,14745-14746,14759,14761,14885,14893,14903 Merged /alfresco/BRANCHES/V3.1:r14485,14915,14954,14966,14992,15080,15131,15134,15204,15214,15271,15352,15361,15369,15419,15431,15587,15616,15675,15818,15836,15840-15841,15860,15891 Merged /alfresco/BRANCHES/V3.2:r15897 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16886 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -75,6 +75,7 @@ public abstract class AbstractPatch implements Patch
|
||||
private int fixesFromSchema;
|
||||
private int fixesToSchema;
|
||||
private int targetSchema;
|
||||
private boolean force;
|
||||
private String description;
|
||||
/** a list of patches that this one depends on */
|
||||
private List<Patch> dependsOn;
|
||||
@@ -104,6 +105,7 @@ public abstract class AbstractPatch implements Patch
|
||||
this.fixesFromSchema = -1;
|
||||
this.fixesToSchema = -1;
|
||||
this.targetSchema = -1;
|
||||
this.force = false;
|
||||
this.applied = false;
|
||||
this.applyToTenants = true; // by default, apply to each tenant, if tenant service is enabled
|
||||
this.dependsOn = Collections.emptyList();
|
||||
@@ -257,6 +259,25 @@ public abstract class AbstractPatch implements Patch
|
||||
this.targetSchema = version;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public boolean isForce()
|
||||
{
|
||||
return force;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the flag that forces the patch to be forcefully applied. This allows patches to be overridden to induce execution
|
||||
* regardless of the upgrade or installation versions, or even if the patch has been executed before.
|
||||
*
|
||||
* @param force <tt>true</tt> to force the patch to be applied
|
||||
*/
|
||||
public void setForce(boolean force)
|
||||
{
|
||||
this.force = force;
|
||||
}
|
||||
|
||||
public String getDescription()
|
||||
{
|
||||
return description;
|
||||
@@ -513,7 +534,7 @@ public abstract class AbstractPatch implements Patch
|
||||
|
||||
if (timeRemaining > 60000)
|
||||
{
|
||||
int reportInterval = getreportingInterval(timeSoFar, timeRemaining);
|
||||
int reportInterval = getReportingInterval(timeSoFar, timeRemaining);
|
||||
|
||||
for (int i = previous + 1; i <= percentComplete; i++)
|
||||
{
|
||||
@@ -534,7 +555,7 @@ public abstract class AbstractPatch implements Patch
|
||||
}
|
||||
}
|
||||
|
||||
private int getreportingInterval(long soFar, long toGo)
|
||||
private int getReportingInterval(long soFar, long toGo)
|
||||
{
|
||||
long total = soFar + toGo;
|
||||
if (total < RANGE_10)
|
||||
|
@@ -62,6 +62,11 @@ public interface Patch
|
||||
*/
|
||||
public int getTargetSchema();
|
||||
|
||||
/**
|
||||
* @return Returns <tt>true</tt> if the patch must forcefully run regardless of any other state
|
||||
*/
|
||||
public boolean isForce();
|
||||
|
||||
/**
|
||||
* Get patches that this patch depends on
|
||||
*
|
||||
|
@@ -247,18 +247,26 @@ public class PatchServiceImpl implements PatchService
|
||||
|
||||
private AppliedPatch applyPatch(Patch patch)
|
||||
{
|
||||
boolean forcePatch = patch.isForce();
|
||||
if (forcePatch)
|
||||
{
|
||||
logger.warn(
|
||||
"Patch will be forcefully executed: \n" +
|
||||
" Patch: " + patch);
|
||||
}
|
||||
// get the patch from the DAO
|
||||
AppliedPatch appliedPatch = patchDaoService.getAppliedPatch(patch.getId());
|
||||
// We bypass the patch if it was executed successfully
|
||||
if (appliedPatch != null)
|
||||
if (appliedPatch != null && !forcePatch)
|
||||
{
|
||||
if (appliedPatch.getSucceeded())
|
||||
{
|
||||
// It has already been successfully applied
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Patch was already successfully applied: \n" +
|
||||
" patch: " + appliedPatch);
|
||||
logger.debug(
|
||||
"Patch was already successfully applied: \n" +
|
||||
" Patch: " + appliedPatch);
|
||||
}
|
||||
return appliedPatch;
|
||||
}
|
||||
@@ -268,8 +276,8 @@ public class PatchServiceImpl implements PatchService
|
||||
boolean success = false;
|
||||
// first check whether the patch is relevant to the repo
|
||||
Descriptor repoDescriptor = descriptorService.getInstalledRepositoryDescriptor();
|
||||
String preceededByAlternative = preceededByAlternative(patch);
|
||||
boolean applies = applies(repoDescriptor, patch);
|
||||
String preceededByAlternative = forcePatch ? null : preceededByAlternative(patch);
|
||||
boolean applies = forcePatch || applies(repoDescriptor, patch);
|
||||
if (!applies)
|
||||
{
|
||||
// create a dummy report
|
||||
|
@@ -65,6 +65,7 @@ public class FixNameCrcValuesPatch extends AbstractPatch
|
||||
{
|
||||
private static final String MSG_SUCCESS = "patch.fixNameCrcValues.result";
|
||||
private static final String MSG_REWRITTEN = "patch.fixNameCrcValues.fixed";
|
||||
private static final String MSG_UNABLE_TO_CHANGE = "patch.fixNameCrcValues.unableToChange";
|
||||
|
||||
private SessionFactory sessionFactory;
|
||||
private NodeDaoService nodeDaoService;
|
||||
@@ -163,6 +164,10 @@ public class FixNameCrcValuesPatch extends AbstractPatch
|
||||
@SuppressWarnings("unused")
|
||||
List<Long> childAssocIds = findMismatchedCrcs();
|
||||
|
||||
// Precautionary flush and clear so that we have an empty session
|
||||
getSession().flush();
|
||||
getSession().clear();
|
||||
|
||||
int updated = 0;
|
||||
for (Long childAssocId : childAssocIds)
|
||||
{
|
||||
@@ -188,7 +193,24 @@ public class FixNameCrcValuesPatch extends AbstractPatch
|
||||
assoc.setChildNodeNameCrc(crc);
|
||||
// Persist
|
||||
updated++;
|
||||
getSession().flush();
|
||||
try
|
||||
{
|
||||
getSession().flush();
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
String msg = I18NUtil.getMessage(MSG_UNABLE_TO_CHANGE, childNode.getId(), childName, oldCrc, crc, e.getMessage());
|
||||
// We just log this and add details to the message file
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(msg, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn(msg);
|
||||
}
|
||||
writeLine(msg);
|
||||
}
|
||||
getSession().clear();
|
||||
// Record
|
||||
writeLine(I18NUtil.getMessage(MSG_REWRITTEN, childNode.getId(), childName, oldCrc, crc));
|
||||
|
Reference in New Issue
Block a user