Class AbstractUpgradeManager

java.lang.Object
com.atlassian.confluence.upgrade.AbstractUpgradeManager
All Implemented Interfaces:
UpgradeManager, UpgradeTaskInfoService, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.InitializingBean
Direct Known Subclasses:
DefaultUpgradeManager

public abstract class AbstractUpgradeManager extends Object implements UpgradeManager, org.springframework.beans.factory.InitializingBean, UpgradeTaskInfoService, org.springframework.beans.factory.BeanFactoryAware
  • Field Details

    • MAXIMUM_CLOUD_BUILD_VERSION_NUMBER

      protected static final int MAXIMUM_CLOUD_BUILD_VERSION_NUMBER
      In Confluence 8.0.0 we have removed upgrade tasks with build numbers lower than 7103 Cloud's build number is still that of the fork "6452", so our build number is too high. This temporary fix ensures the build number is what cloud expects until we update the logic regarding cloud server compatibility.
      See Also:
    • UPGRADE_TASK_COMPARATOR

      public static final Comparator<UpgradeTask> UPGRADE_TASK_COMPARATOR
  • Constructor Details

    • AbstractUpgradeManager

      public AbstractUpgradeManager()
  • Method Details

    • setBeanFactory

      public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
      Specified by:
      setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
    • setApplicationConfig

      public void setApplicationConfig(com.atlassian.config.ApplicationConfiguration applicationConfig)
    • setUpgradedFlag

      public void setUpgradedFlag(com.atlassian.confluence.upgrade.MutableUpgradedFlag upgradedFlag)
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • validateSchemaUpdateIfNeeded

      protected abstract void validateSchemaUpdateIfNeeded() throws com.atlassian.config.ConfigurationException
      Throws:
      com.atlassian.config.ConfigurationException
    • updateSchemaIfNeeded

      protected abstract void updateSchemaIfNeeded() throws com.atlassian.config.ConfigurationException
      Throws:
      com.atlassian.config.ConfigurationException
    • releaseSchemaReferences

      protected abstract void releaseSchemaReferences()
    • upgrade

      public void upgrade(com.atlassian.johnson.JohnsonEventContainer agentJohnson) throws UpgradeException
      Specified by:
      upgrade in interface UpgradeManager
      Throws:
      UpgradeException
    • neededSchemaUpgrade

      protected boolean neededSchemaUpgrade()
    • finalizeIfNeeded

      protected abstract void finalizeIfNeeded() throws UpgradeException
      Throws:
      UpgradeException
    • runUpgradeTasks

      protected void runUpgradeTasks(List<UpgradeTask> upgradeTasks) throws UpgradeException
      Throws:
      UpgradeException
    • getAllUpgradeTasks

      protected List<UpgradeTask> getAllUpgradeTasks()
      Returns:
      the complete list of upgrade tasks for checking space import/export compatibility, in the correct order.
    • getAllUpgradeTasksInfo

      public Collection<UpgradeTaskInfo> getAllUpgradeTasksInfo()
      While this could just return the list of UpgradeTasks directly (since UpgradeTask implements UpgradeTaskInfo), we re-wrap them here to prevent plugins from casting them to UpgradeTask and trying to execute them. That would be bad.
      Specified by:
      getAllUpgradeTasksInfo in interface UpgradeTaskInfoService
      Returns:
      a Collection of UpgradeTaskInfo objects, one for each UpgradeTask in the system, in no particular order.
    • getUpgradeTasksToRun

      protected List<UpgradeTask> getUpgradeTasksToRun()
      Returns:
      the complete list of upgrade tasks to be run for this upgrade, in the correct order. Note: this excludes pre-schema upgrade tasks
    • upgradeTaskSucceeded

      protected void upgradeTaskSucceeded(UpgradeTask upgradeTask) throws Exception
      Throws:
      Exception
    • upgradeStarted

      protected void upgradeStarted()
    • getPreSchemaUpgradeTasks

      public List<UpgradeTask> getPreSchemaUpgradeTasks()
    • setPreSchemaUpgradeTasks

      public void setPreSchemaUpgradeTasks(List<UpgradeTask> preSchemaUpgradeTasks)
    • setPreSchemaUpgradeTaskNames

      public void setPreSchemaUpgradeTaskNames(List<String> preSchemaUpgradeTaskNames)
      Since:
      7.5
    • setUpgradeTasks

      public void setUpgradeTasks(List<UpgradeTask> upgradeTasks)
    • setUpgradeTaskNames

      public void setUpgradeTaskNames(List<String> upgradeTaskNames)
      Since:
      7.5
    • setPluginAccessor

      public void setPluginAccessor(com.atlassian.plugin.PluginAccessor pluginAccessor)
    • assertNoDuplicateBuildNumbers

      public static void assertNoDuplicateBuildNumbers(Iterable<UpgradeTask> upgradeTasks) throws IllegalStateException
      Throws:
      IllegalStateException
    • getUpgradeTasks

      public List<UpgradeTask> getUpgradeTasks()
    • setSchemaUpgradeTasks

      public void setSchemaUpgradeTasks(List<UpgradeTask> upgradeTasks)
    • setSchemaUpgradeTaskNames

      public void setSchemaUpgradeTaskNames(List<String> upgradeTaskNames)
      Since:
      7.5
    • getSchemaUpgradeTasks

      public List<UpgradeTask> getSchemaUpgradeTasks()
    • getErrors

      public List<UpgradeError> getErrors()
      Specified by:
      getErrors in interface UpgradeManager
    • setPluginDependentUpgradeTasks

      public void setPluginDependentUpgradeTasks(List<DeferredUpgradeTask> upgradeTasks)
    • setPluginDependentUpgradeTaskNames

      public void setPluginDependentUpgradeTaskNames(List<String> upgradeTaskNames)
      Since:
      7.5
    • getPluginDependentUpgradeTasks

      public List<DeferredUpgradeTask> getPluginDependentUpgradeTasks()
    • runUpgradePrerequisites

      protected abstract List<UpgradeError> runUpgradePrerequisites()
      Runs all upgrade prerequisites.
      Returns:
      an empty list if all upgrade prerequisites pass, otherwise, returns a list consisting of one or more failure messages.
    • getConfiguredBuildNumber

      protected String getConfiguredBuildNumber()
      Returns:
      The build number of the current version that the user is running under. This version is stored in their confluence home confluence.cfg.xml file
    • setConfiguredBuildNumber

      protected void setConfiguredBuildNumber(String buildNumber) throws com.atlassian.config.ConfigurationException
      Throws:
      com.atlassian.config.ConfigurationException
    • needUpgrade

      public boolean needUpgrade()
      Specified by:
      needUpgrade in interface UpgradeManager
    • configuredBuildNumberNewerThan

      public boolean configuredBuildNumberNewerThan(String buildNumber)
      Description copied from interface: UpgradeManager
      Returns true if the passed build number is less than the configured build number - that is, the version of the currently running Confluence is newer than the version passed.
      Specified by:
      configuredBuildNumberNewerThan in interface UpgradeManager
    • taskNewerThan

      public boolean taskNewerThan(String buildNumber, UpgradeTask upgradeTask)
      Description copied from interface: UpgradeManager
      Returns true if the build number for the task is greater than the passed build number. Usually indicates that the task should run as part of an upgrade.
      Specified by:
      taskNewerThan in interface UpgradeManager
    • initialUpgradeFinished

      protected void initialUpgradeFinished() throws Exception
      Once all upgrade tasks have been completed without error, make sure the build number stored in the applications main configuration file and database now matches the build number of this version of the release.

      Note that this method is called "initialUpgradeFinished" because any deferred pluginDependentUpgradeTasks may still have to run, so the upgrade process is not yet complete.

      Throws:
      Exception - when setting the database or configuration build number fails
    • entireUpgradeFinished

      public void entireUpgradeFinished()
      Description copied from interface: UpgradeManager
      Called when all immediate and deferred upgrade actions have been performed *if* an upgrade was needed.
      Specified by:
      entireUpgradeFinished in interface UpgradeManager
    • getRealBuildNumber

      protected abstract String getRealBuildNumber()
      Returns:
      The build number of the new version of Confluence being upgraded to. This number can be found in the default.properties of the new expanded WAR
    • getDatabaseBuildNumber

      protected abstract String getDatabaseBuildNumber()
      Returns:
      The build number of the data in the database. If the version of the database data can not be determined, this method should return the same value as getConfiguredBuildNumber().
    • setDatabaseBuildNumber

      protected abstract void setDatabaseBuildNumber(String databaseBuildNumber) throws Exception
      Once the upgrade is complete, we'll need to set the new database build number in the database.
      Parameters:
      databaseBuildNumber - The new database build number
      Throws:
      Exception - when there is any problem setting the database build number
    • permitDatabaseUpgrades

      protected boolean permitDatabaseUpgrades() throws UpgradeException
      This is used to guard against database upgrades being performed multiple times on the same database. By default, assume a non-clustered setup and allow database upgrades.
      Returns:
      True by default. Is overridden for cluster upgrades.
      Throws:
      UpgradeException - If the implementation of this method encounters any errors.
    • beforeUpgrade

      protected void beforeUpgrade() throws UpgradeException
      Throws:
      UpgradeException
    • postUpgrade

      protected void postUpgrade()
    • isUpgraded

      public boolean isUpgraded()
      Specified by:
      isUpgraded in interface UpgradeManager
      Returns:
      true if the UpgradeManager was able to successfully upgrade this instance, or if no upgrade was necessary; otherwise false.
    • getOldestSpaceImportAllowed

      public String getOldestSpaceImportAllowed()
      Description copied from interface: UpgradeManager
      Calculates the oldest build number from which a space can be imported.
      Specified by:
      getOldestSpaceImportAllowed in interface UpgradeManager
      Returns:
      the build number
    • getExportBuildNumber

      public String getExportBuildNumber(boolean isSpaceExport)
      Description copied from interface: UpgradeManager
      Tells the earliest version the exports will be compatible with.
      Specified by:
      getExportBuildNumber in interface UpgradeManager
      Parameters:
      isSpaceExport - true if the export is about a space, false for a global export.
      Returns:
      a build number
    • getPluginExportCompatibility

      public Map<String,PluginExportCompatibility> getPluginExportCompatibility(boolean isSpaceExport)
      Description copied from interface: UpgradeManager

      Returns the list of plugins with data (especially plugins with Active Objects data) and tells how backward-compatible they are.

      If at least one plugin isn't compatible, the importer silently doesn't import any data.

      What is a compatible version?

      The data is exported as-is in XML and reimported in an earlier version. If the earlier version of the plugin is able to read the data without fault, then it is compatible. Note that there is no downgrade task, obviously.

      Specified by:
      getPluginExportCompatibility in interface UpgradeManager
      Parameters:
      isSpaceExport - true if the export is about a space, false for a global export.
      Returns:
      a matrix of plugin key and minimum versions of the plugins.