Package com.atlassian.confluence.upgrade
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 Summary
Fields Modifier and Type Field Description protected static 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.static Comparator<UpgradeTask>
UPGRADE_TASK_COMPARATOR
-
Fields inherited from interface com.atlassian.confluence.upgrade.UpgradeManager
MINIMUM_SUPPORTED_UPGRADE_BUILD_NUMBER, MINIMUM_SUPPORTED_UPGRADE_VERSION
-
-
Constructor Summary
Constructors Constructor Description AbstractUpgradeManager()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
afterPropertiesSet()
static void
assertNoDuplicateBuildNumbers(Iterable<UpgradeTask> upgradeTasks)
protected void
beforeUpgrade()
boolean
configuredBuildNumberNewerThan(String buildNumber)
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.void
entireUpgradeFinished()
Called when all immediate and deferred upgrade actions have been performed *if* an upgrade was needed.protected abstract void
finalizeIfNeeded()
protected List<UpgradeTask>
getAllUpgradeTasks()
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.protected String
getConfiguredBuildNumber()
protected abstract String
getDatabaseBuildNumber()
List<UpgradeError>
getErrors()
String
getExportBuildNumber(boolean isSpaceExport)
Tells the earliest version the exports will be compatible with.String
getOldestSpaceImportAllowed()
Calculates the oldest build number from which a space can be imported.List<DeferredUpgradeTask>
getPluginDependentUpgradeTasks()
Map<String,PluginExportCompatibility>
getPluginExportCompatibility(boolean isSpaceExport)
Returns the list of plugins with data (especially plugins with Active Objects data) and tells how backward-compatible they are.List<UpgradeTask>
getPreSchemaUpgradeTasks()
protected abstract String
getRealBuildNumber()
List<UpgradeTask>
getSchemaUpgradeTasks()
List<UpgradeTask>
getUpgradeTasks()
protected List<UpgradeTask>
getUpgradeTasksToRun()
protected void
initialUpgradeFinished()
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.boolean
isUpgraded()
protected boolean
neededSchemaUpgrade()
boolean
needUpgrade()
protected boolean
permitDatabaseUpgrades()
This is used to guard against database upgrades being performed multiple times on the same database.protected void
postUpgrade()
protected abstract void
releaseSchemaReferences()
protected abstract List<UpgradeError>
runUpgradePrerequisites()
Runs all upgrade prerequisites.protected void
runUpgradeTasks(List<UpgradeTask> upgradeTasks)
void
setApplicationConfig(com.atlassian.config.ApplicationConfiguration applicationConfig)
void
setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
protected void
setConfiguredBuildNumber(String buildNumber)
protected abstract void
setDatabaseBuildNumber(String databaseBuildNumber)
Once the upgrade is complete, we'll need to set the new database build number in the database.void
setPluginAccessor(com.atlassian.plugin.PluginAccessor pluginAccessor)
void
setPluginDependentUpgradeTaskNames(List<String> upgradeTaskNames)
void
setPluginDependentUpgradeTasks(List<DeferredUpgradeTask> upgradeTasks)
void
setPreSchemaUpgradeTaskNames(List<String> preSchemaUpgradeTaskNames)
void
setPreSchemaUpgradeTasks(List<UpgradeTask> preSchemaUpgradeTasks)
void
setSchemaUpgradeTaskNames(List<String> upgradeTaskNames)
void
setSchemaUpgradeTasks(List<UpgradeTask> upgradeTasks)
void
setUpgradedFlag(com.atlassian.confluence.upgrade.MutableUpgradedFlag upgradedFlag)
void
setUpgradeTaskNames(List<String> upgradeTaskNames)
void
setUpgradeTasks(List<UpgradeTask> upgradeTasks)
boolean
taskNewerThan(String buildNumber, UpgradeTask upgradeTask)
Returns true if the build number for the task is greater than the passed build number.protected abstract void
updateSchemaIfNeeded()
void
upgrade(com.atlassian.johnson.JohnsonEventContainer agentJohnson)
protected void
upgradeStarted()
protected void
upgradeTaskSucceeded(UpgradeTask upgradeTask)
protected abstract void
validateSchemaUpdateIfNeeded()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.atlassian.confluence.upgrade.UpgradeManager
setDatabaseBuildNumber
-
-
-
-
Field Detail
-
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:
- Constant Field Values
-
UPGRADE_TASK_COMPARATOR
public static final Comparator<UpgradeTask> UPGRADE_TASK_COMPARATOR
-
-
Method Detail
-
setBeanFactory
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
- Specified by:
setBeanFactory
in interfaceorg.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 interfaceorg.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 interfaceUpgradeManager
- 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 interfaceUpgradeTaskInfoService
- Returns:
- a Collection of
UpgradeTaskInfo
objects, one for eachUpgradeTask
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)
-
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 interfaceUpgradeManager
-
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 interfaceUpgradeManager
-
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 interfaceUpgradeManager
-
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 interfaceUpgradeManager
-
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 interfaceUpgradeManager
-
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 interfaceUpgradeManager
- 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 interfaceUpgradeManager
- 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 interfaceUpgradeManager
- 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 interfaceUpgradeManager
- 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.
-
-