From 4211d4bd8a9eb243546610626dd078353037ccd4 Mon Sep 17 00:00:00 2001 From: Rodica Sutu Date: Thu, 26 Jul 2018 11:13:26 +0300 Subject: [PATCH] compare the new version of module currently being installed with the one installed --- .../compatibility/ModulePatchComponent.java | 94 +++++++++++-------- 1 file changed, 57 insertions(+), 37 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/compatibility/ModulePatchComponent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/compatibility/ModulePatchComponent.java index 92524b0bf2..de5c99fadf 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/compatibility/ModulePatchComponent.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/compatibility/ModulePatchComponent.java @@ -27,6 +27,8 @@ package org.alfresco.module.org_alfresco_module_rm.patch.compatibility; +import static org.alfresco.repo.module.ModuleVersionNumber.VERSION_ZERO; + import java.io.Serializable; import org.alfresco.module.org_alfresco_module_rm.patch.ModulePatchExecuterImpl; @@ -117,49 +119,63 @@ public abstract class ModulePatchComponent extends AbstractModuleComponent @Override protected void executeInternal() { - ModuleVersionNumber moduleInstalledVersionNumber = getModuleVersionNumber(REGISTRY_PROPERTY_INSTALLED_VERSION); - ModuleVersionNumber moduleCurrentVersionNumber = getModuleVersionNumber(REGISTRY_PROPERTY_CURRENT_VERSION); - - String moduleName = getName(); + //Get the new module version + String moduleId = modulePatchExecuter.getModuleId(); + ModuleVersionNumber moduleNewVersionNumber = moduleService.getModule(moduleId).getModuleVersionNumber(); - 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 {}", - moduleName, moduleInstalledVersionNumber, moduleCurrentVersionNumber); + LOGGER.info("Module patch component '{}' is skipped, no previous version found.", moduleName); } else { - try + if (isVersionLaterThan(moduleCurrentVersionNumber, moduleNewVersionNumber)) { - LOGGER.info("Module patch component '{}' is executing ...", moduleName); - - // execute path within an isolated transaction - retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() + LOGGER.info("Module patch component '{}' is skipped for upgrade from version {} to version {}", + moduleName, moduleCurrentVersionNumber, moduleNewVersionNumber); + } + else + { + try { - @Override - public Void execute() + LOGGER.info("Module patch component '{}' is executing ...", moduleName); + + // execute path within an isolated transaction + retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() + { - behaviourFilter.disableBehaviour(); - try + @Override + 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); - - } catch (Exception exception) - { - // record the exception otherwise it gets swallowed - LOGGER.info(" ... error encountered. {}", exception.getMessage(), exception); - throw exception; + LOGGER.info(" ... completed module patch '{}'", moduleName); + + } + catch (Exception exception) + { + // record the exception otherwise it gets swallowed + 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. */ - 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, new String[]{REGISTRY_PATH_MODULES, moduleId, registryProperty}); Serializable moduleVersion = this.registryService.getProperty(moduleKeyVersion); @@ -182,22 +197,27 @@ public abstract class ModulePatchComponent extends AbstractModuleComponent * patches. * */ - private boolean isVersionLaterThan(ModuleVersionNumber installedModuleVersionNumber, - ModuleVersionNumber currentModuleVersionNumber) + private boolean isVersionLaterThan(ModuleVersionNumber moduleCurrentVersionNumber, + ModuleVersionNumber moduleNewVersionNumber) { // assume that the v2.0 and v2.1 patches should be run boolean versionLaterThan = false; // 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 ModuleVersionNumber minVersion = this.getAppliesFromVersionNumber(); - if (installedModuleVersionNumber.compareTo(minVersion) >= 0) + if (moduleCurrentVersionNumber.compareTo(minVersion) >= 0) { 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; }