Merge branch 'feature/RM-6355_OrcaFix' into 'master'

RM-6355 Orca: Won't start with 2.7 installed.

See merge request records-management/records-management!1092
This commit is contained in:
Rodica Sutu
2018-07-27 12:49:41 +01:00

View File

@@ -27,6 +27,8 @@
package org.alfresco.module.org_alfresco_module_rm.patch.compatibility; package org.alfresco.module.org_alfresco_module_rm.patch.compatibility;
import static org.alfresco.repo.module.ModuleVersionNumber.VERSION_ZERO;
import java.io.Serializable; import java.io.Serializable;
import org.alfresco.module.org_alfresco_module_rm.patch.ModulePatchExecuterImpl; import org.alfresco.module.org_alfresco_module_rm.patch.ModulePatchExecuterImpl;
@@ -117,49 +119,63 @@ public abstract class ModulePatchComponent extends AbstractModuleComponent
@Override @Override
protected void executeInternal() protected void executeInternal()
{ {
ModuleVersionNumber moduleInstalledVersionNumber = getModuleVersionNumber(REGISTRY_PROPERTY_INSTALLED_VERSION); //Get the new module version
ModuleVersionNumber moduleCurrentVersionNumber = getModuleVersionNumber(REGISTRY_PROPERTY_CURRENT_VERSION); String moduleId = modulePatchExecuter.getModuleId();
ModuleVersionNumber moduleNewVersionNumber = moduleService.getModule(moduleId).getModuleVersionNumber();
String moduleName = getName();
if (isVersionLaterThan(moduleInstalledVersionNumber, moduleCurrentVersionNumber)) // Get the module details from the registry
ModuleVersionNumber moduleCurrentVersionNumber = getModuleVersionNumber(REGISTRY_PROPERTY_CURRENT_VERSION,
moduleId);
// Get the module patch component name
String moduleName = getName();
if (moduleCurrentVersionNumber.equals(VERSION_ZERO) ||
moduleCurrentVersionNumber.equals(moduleNewVersionNumber)) // No previous record of it
{ {
LOGGER.info("Module patch component '{}' is skipped for upgrade from version {} to version {}", LOGGER.info("Module patch component '{}' is skipped, no previous version found.", moduleName);
moduleName, moduleInstalledVersionNumber, moduleCurrentVersionNumber);
} }
else else
{ {
try if (isVersionLaterThan(moduleCurrentVersionNumber, moduleNewVersionNumber))
{ {
LOGGER.info("Module patch component '{}' is executing ...", moduleName); LOGGER.info("Module patch component '{}' is skipped for upgrade from version {} to version {}",
moduleName, moduleCurrentVersionNumber, moduleNewVersionNumber);
// execute path within an isolated transaction }
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>() else
{
try
{ {
@Override LOGGER.info("Module patch component '{}' is executing ...", moduleName);
public Void execute()
// execute path within an isolated transaction
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{ {
behaviourFilter.disableBehaviour(); @Override
try public Void execute()
{ {
executePatch(); behaviourFilter.disableBehaviour();
try
{
executePatch();
}
finally
{
behaviourFilter.enableBehaviour();
}
return null;
} }
finally
{
behaviourFilter.enableBehaviour();
}
return null;
}
}, false, true); }, false, true);
LOGGER.info(" ... completed module patch '{}'", moduleName); LOGGER.info(" ... completed module patch '{}'", moduleName);
} catch (Exception exception) }
{ catch (Exception exception)
// record the exception otherwise it gets swallowed {
LOGGER.info(" ... error encountered. {}", exception.getMessage(), exception); // record the exception otherwise it gets swallowed
throw exception; LOGGER.info(" ... error encountered. {}", exception.getMessage(), exception);
throw exception;
}
} }
} }
} }
@@ -167,9 +183,8 @@ public abstract class ModulePatchComponent extends AbstractModuleComponent
/** /**
* Helper method to get the ModuleVersionNumber. * Helper method to get the ModuleVersionNumber.
*/ */
private ModuleVersionNumber getModuleVersionNumber(String registryProperty) private ModuleVersionNumber getModuleVersionNumber(String registryProperty, String moduleId)
{ {
String moduleId = modulePatchExecuter.getModuleId();
RegistryKey moduleKeyVersion = new RegistryKey(ModuleComponentHelper.URI_MODULES_1_0, RegistryKey moduleKeyVersion = new RegistryKey(ModuleComponentHelper.URI_MODULES_1_0,
new String[]{REGISTRY_PATH_MODULES, moduleId, registryProperty}); new String[]{REGISTRY_PATH_MODULES, moduleId, registryProperty});
Serializable moduleVersion = this.registryService.getProperty(moduleKeyVersion); Serializable moduleVersion = this.registryService.getProperty(moduleKeyVersion);
@@ -182,22 +197,27 @@ public abstract class ModulePatchComponent extends AbstractModuleComponent
* patches. * patches.
* *
*/ */
private boolean isVersionLaterThan(ModuleVersionNumber installedModuleVersionNumber, private boolean isVersionLaterThan(ModuleVersionNumber moduleCurrentVersionNumber,
ModuleVersionNumber currentModuleVersionNumber) ModuleVersionNumber moduleNewVersionNumber)
{ {
// assume that the v2.0 and v2.1 patches should be run // assume that the v2.0 and v2.1 patches should be run
boolean versionLaterThan = false; boolean versionLaterThan = false;
// if this is an upgrade as opposed to a fresh install // if this is an upgrade as opposed to a fresh install
if (installedModuleVersionNumber.compareTo(currentModuleVersionNumber) != 0) if (moduleCurrentVersionNumber.compareTo(moduleNewVersionNumber) < 0)
{ {
// if the installed version is later than the minimum version number of this patch // if the installed version is later than the minimum version number of this patch
ModuleVersionNumber minVersion = this.getAppliesFromVersionNumber(); ModuleVersionNumber minVersion = this.getAppliesFromVersionNumber();
if (installedModuleVersionNumber.compareTo(minVersion) >= 0) if (moduleCurrentVersionNumber.compareTo(minVersion) >= 0)
{ {
versionLaterThan = true; versionLaterThan = true;
} }
} }
// v2.0 and v2.1 patches should not be run when both the current and the new version numbers are equals
else
{
versionLaterThan =true;
}
return versionLaterThan; return versionLaterThan;
} }