This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new c60dbfd  engine/schema: enhance and cleanup DatabaseUpgradeChecker 
(#2584)
c60dbfd is described below

commit c60dbfd2c884593cc49d3c157ad14e900288dcac
Author: Khosrow Moossavi <[email protected]>
AuthorDate: Wed May 9 12:21:06 2018 -0400

    engine/schema: enhance and cleanup DatabaseUpgradeChecker (#2584)
    
    Using a hierarchy of database version rather than a flat
    list of them. Adding a new schema upgrade path was really
    cumbersome and error-prone, because we needed to maintain
    a flat map of versions and their corresponding list of
    upgrade paths (`DbUpgrade`). Instead we're using a logical
    hierarchy structure of versions:
    
    ```
    DatabaseVersionHierarchy.builder()
        .next("4.0.0"   , new Upgrade40to41())
        .next("4.0.1"   , new Upgrade40to41())
        .next("4.0.2"   , new Upgrade40to41())
        .next("4.1.0"   , new Upgrade410to420())
        .next("4.1.1"   , new Upgrade410to420())
        .next("4.2.0"   , new Upgrade420to421())
        ...
        .next("4.2.1"   , new Upgrade421to430())
        .next("4.9.3.0" , new Upgrade4930to41000())
        .next("4.10.0.0", new Upgrade41000to41100())
        .next("4.11.0.0", new Upgrade41100to41110())
        .build();
    ```
    
    With this change, when we need to add a new version upgrade
    path, we only need to add it in correct place in the hierarchy
    rather than add that in dozens of places in `_upgradeMap`.
---
 .../com/cloud/upgrade/DatabaseUpgradeChecker.java  | 507 ++++-----------------
 .../cloud/upgrade/DatabaseVersionHierarchy.java    | 186 ++++++++
 .../cloud/upgrade/DatabaseUpgradeCheckerTest.java  |  69 ++-
 3 files changed, 332 insertions(+), 430 deletions(-)

diff --git 
a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java 
b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
index ef90db6..a69590a 100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
@@ -16,6 +16,26 @@
 // under the License.
 package com.cloud.upgrade;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.ObjectArrays.concat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Date;
+
+import javax.inject.Inject;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
 import com.cloud.upgrade.dao.DbUpgrade;
 import com.cloud.upgrade.dao.Upgrade217to218;
 import com.cloud.upgrade.dao.Upgrade218to22;
@@ -42,7 +62,9 @@ import com.cloud.upgrade.dao.Upgrade306to307;
 import com.cloud.upgrade.dao.Upgrade307to410;
 import com.cloud.upgrade.dao.Upgrade30to301;
 import com.cloud.upgrade.dao.Upgrade40to41;
+import com.cloud.upgrade.dao.Upgrade41000to41100;
 import com.cloud.upgrade.dao.Upgrade410to420;
+import com.cloud.upgrade.dao.Upgrade41100to41110;
 import com.cloud.upgrade.dao.Upgrade41110to41200;
 import com.cloud.upgrade.dao.Upgrade420to421;
 import com.cloud.upgrade.dao.Upgrade421to430;
@@ -52,11 +74,11 @@ import com.cloud.upgrade.dao.Upgrade432to440;
 import com.cloud.upgrade.dao.Upgrade440to441;
 import com.cloud.upgrade.dao.Upgrade441to442;
 import com.cloud.upgrade.dao.Upgrade442to450;
-import com.cloud.upgrade.dao.Upgrade443to450;
+import com.cloud.upgrade.dao.Upgrade443to444;
 import com.cloud.upgrade.dao.Upgrade444to450;
 import com.cloud.upgrade.dao.Upgrade450to451;
 import com.cloud.upgrade.dao.Upgrade451to452;
-import com.cloud.upgrade.dao.Upgrade452to460;
+import com.cloud.upgrade.dao.Upgrade452to453;
 import com.cloud.upgrade.dao.Upgrade453to460;
 import com.cloud.upgrade.dao.Upgrade460to461;
 import com.cloud.upgrade.dao.Upgrade461to470;
@@ -68,8 +90,6 @@ import com.cloud.upgrade.dao.Upgrade490to4910;
 import com.cloud.upgrade.dao.Upgrade4910to4920;
 import com.cloud.upgrade.dao.Upgrade4920to4930;
 import com.cloud.upgrade.dao.Upgrade4930to41000;
-import com.cloud.upgrade.dao.Upgrade41000to41100;
-import com.cloud.upgrade.dao.Upgrade41100to41110;
 import com.cloud.upgrade.dao.UpgradeSnapshot217to224;
 import com.cloud.upgrade.dao.UpgradeSnapshot223to224;
 import com.cloud.upgrade.dao.VersionDao;
@@ -81,33 +101,10 @@ import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.db.ScriptRunner;
 import com.cloud.utils.db.TransactionLegacy;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.google.common.collect.ImmutableList;
-import org.apache.cloudstack.utils.CloudStackVersion;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.reverse;
-import static com.google.common.collect.ObjectArrays.concat;
-import static java.util.Collections.sort;
 
 public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
     private static final Logger s_logger = 
Logger.getLogger(DatabaseUpgradeChecker.class);
-    private final ImmutableList<CloudStackVersion> availableVersions;
-    protected Map<CloudStackVersion, DbUpgrade[]> _upgradeMap = new 
HashMap<>();
+    private final DatabaseVersionHierarchy hierarchy;
 
     @Inject
     VersionDao _dao;
@@ -115,353 +112,78 @@ public class DatabaseUpgradeChecker implements 
SystemIntegrityChecker {
     public DatabaseUpgradeChecker() {
         _dao = new VersionDaoImpl();
 
-        _upgradeMap.put(CloudStackVersion.parse("2.1.7"),
-            new DbUpgrade[] {new Upgrade217to218(), new Upgrade218to22(), new 
Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new 
Upgrade224to225(),
-                new Upgrade225to226(), new Upgrade227to228(), new 
Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new 
Upgrade2211to2212(),
-                new Upgrade2212to2213(), new Upgrade2213to2214(), new 
Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.1.8"),
-            new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new 
UpgradeSnapshot217to224(), new Upgrade222to224(), new 
Upgrade218to224DomainVlans(),
-                new Upgrade224to225(), new Upgrade225to226(), new 
Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new 
Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new 
Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.1.9"),
-            new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new 
UpgradeSnapshot217to224(), new Upgrade222to224(), new 
Upgrade218to224DomainVlans(),
-                new Upgrade224to225(), new Upgrade225to226(), new 
Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new 
Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new 
Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.1"),
-            new DbUpgrade[] {new Upgrade221to222(), new 
UpgradeSnapshot223to224(), new Upgrade222to224(), new Upgrade224to225(), new 
Upgrade225to226(), new Upgrade227to228(),
-                new Upgrade228to229(), new Upgrade229to2210(), new 
Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new 
Upgrade2213to2214(),
-                new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new 
Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(),
-                new Upgrade41100to41110(),  new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.2"),
-            new DbUpgrade[] {new Upgrade222to224(), new 
UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new 
Upgrade227to228(), new Upgrade228to229(),
-                new Upgrade229to2210(), new Upgrade2210to2211(), new 
Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new 
Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.3"),
-            new DbUpgrade[] {new Upgrade222to224(), new 
UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new 
Upgrade227to228(), new Upgrade228to229(),
-                new Upgrade229to2210(), new Upgrade2210to2211(), new 
Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new 
Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-               new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.4"),
-            new DbUpgrade[] {new Upgrade224to225(), new Upgrade225to226(), new 
Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new 
Upgrade2210to2211(),
-                new Upgrade2211to2212(), new Upgrade2212to2213(), new 
Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.5"),
-            new DbUpgrade[] {new Upgrade225to226(), new Upgrade227to228(), new 
Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new 
Upgrade2211to2212(),
-                new Upgrade2212to2213(), new Upgrade2213to2214(), new 
Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.6"),
-            new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new 
Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new 
Upgrade2212to2213(),
-                new Upgrade2213to2214(), new Upgrade2214to30(), new 
Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new 
Upgrade40to41(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.7"),
-            new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new 
Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new 
Upgrade2212to2213(),
-                new Upgrade2213to2214(), new Upgrade2214to30(), new 
Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new 
Upgrade40to41(), new Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.8"),
-            new DbUpgrade[] {new Upgrade228to229(), new Upgrade229to2210(), 
new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new 
Upgrade2213to2214(),
-                new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new 
Upgrade410to420(), new Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.9"),
-            new DbUpgrade[] {new Upgrade229to2210(), new Upgrade2210to2211(), 
new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new 
Upgrade2214to30(),
-                new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.10"),
-            new DbUpgrade[] {new Upgrade2210to2211(), new Upgrade2211to2212(), 
new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new 
Upgrade30to301(),
-                new Upgrade301to302(), new Upgrade302to40(), new 
Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.12"),
-            new DbUpgrade[] {new Upgrade2212to2213(), new Upgrade2213to2214(), 
new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(),
-                new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.13"),
-            new DbUpgrade[] {new Upgrade2213to2214(), new Upgrade2214to30(), 
new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new 
Upgrade40to41(),
-                new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.14"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new 
Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.0"),
-            new DbUpgrade[] {new Upgrade30to301(), new Upgrade301to302(), new 
Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.1"),
-            new DbUpgrade[] {new Upgrade301to302(), new Upgrade302to40(), new 
Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.2"),
-            new DbUpgrade[] {new Upgrade302to40(), new Upgrade40to41(), new 
Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.0"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.1"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.0.2"),
-            new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.1.0"),
-            new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.1.1"),
-            new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(),
-                new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.2.0"),
-            new DbUpgrade[] {new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(),
-                new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.2.1"),
-            new DbUpgrade[] {new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.0"),
-            new DbUpgrade[] {new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.1"),
-            new DbUpgrade[] {new Upgrade431to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.3.2"),
-            new DbUpgrade[] {new Upgrade432to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.0"),
-            new DbUpgrade[] {new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.1"),
-            new DbUpgrade[] {new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.2"),
-            new DbUpgrade[] {new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.3"),
-            new DbUpgrade[] {new Upgrade443to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.4.4"),
-            new DbUpgrade[] {new Upgrade444to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.0"),
-            new DbUpgrade[] {new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(),
-                new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.1"),
-            new DbUpgrade[] {new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(),
-                new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.2"),
-            new DbUpgrade[] {new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.5.3"),
-            new DbUpgrade[] {new Upgrade453to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.0"),
-            new DbUpgrade[] {new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.1"),
-            new DbUpgrade[] {new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.6.2"),
-            new DbUpgrade[] {new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.0"),
-            new DbUpgrade[] {new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.1"),
-            new DbUpgrade[] {new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.7.2"),
-            new DbUpgrade[] {new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(),
-                new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.0"),
-            new DbUpgrade[] {new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(),
-                new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.1"),
-            new DbUpgrade[] {new Upgrade481to490(), new Upgrade490to4910(), 
new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.8.2.0"),
-            new DbUpgrade[] {new Upgrade481to490(), new Upgrade490to4910(), 
new Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.0"),
-            new DbUpgrade[] {new Upgrade490to4910(), new Upgrade4910to4920(), 
new Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), 
new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.1.0"),
-            new DbUpgrade[] {new Upgrade4910to4920(), new Upgrade4920to4930(), 
new Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), 
new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.2.0"),
-            new DbUpgrade[] {new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.3.0"),
-            new DbUpgrade[] {new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.9.3.1"),
-            new DbUpgrade[] {new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.10.0.0"),
-            new DbUpgrade[] {new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.11.0.0"),
-                new DbUpgrade[] {new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("4.11.1.0"),
-                new DbUpgrade[] {new Upgrade41110to41200()});
-
-        //CP Upgrades
-        _upgradeMap.put(CloudStackVersion.parse("3.0.3"),
-            new DbUpgrade[] {new Upgrade303to304(), new Upgrade304to305(), new 
Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new 
Upgrade410to420(),
-                new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(),
-                new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(),
-                new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(), new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.4"),
-            new DbUpgrade[] {new Upgrade304to305(), new Upgrade305to306(), new 
Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new 
Upgrade420to421(),
-                new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(),
-                new Upgrade452to460(), new Upgrade460to461(), new 
Upgrade461to470(), new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(),
-                new Upgrade490to4910(), new Upgrade4910to4920(), new 
Upgrade4920to4930(), new Upgrade4930to41000(), new Upgrade41000to41100(), new 
Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.5"),
-            new DbUpgrade[] {new Upgrade305to306(), new Upgrade306to307(), new 
Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(),
-                new Upgrade430to440(), new Upgrade440to441(), new 
Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new 
Upgrade451to452(), new Upgrade452to460(),
-                new Upgrade460to461(), new Upgrade461to470(), new 
Upgrade470to471(), new Upgrade471to480(), new Upgrade480to481(), new 
Upgrade481to490(), new Upgrade490to4910(),
-                new Upgrade4910to4920(), new Upgrade4920to4930(), new 
Upgrade4930to41000(), new Upgrade41000to41100(), new Upgrade41100to41110(), new 
Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.6"),
-            new DbUpgrade[] {new Upgrade306to307(), new Upgrade307to410(), new 
Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new 
Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("3.0.7"),
-            new DbUpgrade[] {new Upgrade307to410(), new Upgrade410to420(), new 
Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new 
Upgrade440to441(),
-                new Upgrade441to442(), new Upgrade442to450(), new 
Upgrade450to451(), new Upgrade451to452(), new Upgrade452to460(), new 
Upgrade460to461(), new Upgrade461to470(),
-                new Upgrade470to471(), new Upgrade471to480(), new 
Upgrade480to481(), new Upgrade481to490(), new Upgrade490to4910(), new 
Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.15"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new 
Upgrade304to305(),
-                new Upgrade305to306(), new Upgrade306to307(), new 
Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        _upgradeMap.put(CloudStackVersion.parse("2.2.16"),
-            new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new 
Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new 
Upgrade304to305(),
-                new Upgrade305to306(), new Upgrade306to307(), new 
Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new 
Upgrade421to430(), new Upgrade430to440(),
-                new Upgrade440to441(), new Upgrade441to442(), new 
Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new 
Upgrade452to460(), new Upgrade460to461(),
-                new Upgrade461to470(), new Upgrade470to471(), new 
Upgrade471to480(), new Upgrade480to481(), new Upgrade481to490(), new 
Upgrade490to4910(), new Upgrade4910to4920(),
-                new Upgrade4920to4930(), new Upgrade4930to41000(), new 
Upgrade41000to41100(), new Upgrade41100to41110(), new Upgrade41110to41200()});
-
-        final List<CloudStackVersion> sortedVersions = 
newArrayList(_upgradeMap.keySet());
-        sort(sortedVersions);
-
-        availableVersions = ImmutableList.copyOf(sortedVersions);
+        hierarchy = DatabaseVersionHierarchy.builder()
+                // legacy
+                .next("2.1.7"   , new Upgrade217to218())
+                .next("2.1.7.1" , new UpgradeSnapshot217to224())
+                .next("2.1.8"   , new Upgrade218to22())
+                .next("2.1.8.1" , new Upgrade218to224DomainVlans())
+                .next("2.1.9"   , new Upgrade218to22())
+                .next("2.2.1"   , new Upgrade221to222())
+                .next("2.2.2"   , new Upgrade222to224())
+                .next("2.2.3"   , new Upgrade222to224())
+                .next("2.2.3.1" , new UpgradeSnapshot223to224())
+                .next("2.2.4"   , new Upgrade224to225())
+                .next("2.2.5"   , new Upgrade225to226())
+                .next("2.2.6"   , new Upgrade227to228())
+                .next("2.2.7"   , new Upgrade227to228())
+                .next("2.2.8"   , new Upgrade228to229())
+                .next("2.2.9"   , new Upgrade229to2210())
+                .next("2.2.10"  , new Upgrade2210to2211())
+                .next("2.2.11"  , new Upgrade2211to2212())
+                .next("2.2.12"  , new Upgrade2212to2213())
+                .next("2.2.13"  , new Upgrade2213to2214())
+                .next("2.2.14"  , new Upgrade2214to30())
+                .next("2.2.15"  , new Upgrade2214to30())
+                .next("2.2.16"  , new Upgrade2214to30())
+                .next("3.0.0"   , new Upgrade30to301())
+                .next("3.0.1"   , new Upgrade301to302())
+                .next("3.0.2"   , new Upgrade302to303())
+                .next("3.0.2.1" , new Upgrade302to40())
+                .next("3.0.3"   , new Upgrade303to304())
+                .next("3.0.4"   , new Upgrade304to305())
+                .next("3.0.5"   , new Upgrade305to306())
+                .next("3.0.6"   , new Upgrade306to307())
+                .next("3.0.7"   , new Upgrade307to410())
+
+                // recent
+                .next("4.0.0"   , new Upgrade40to41())
+                .next("4.0.1"   , new Upgrade40to41())
+                .next("4.0.2"   , new Upgrade40to41())
+                .next("4.1.0"   , new Upgrade410to420())
+                .next("4.1.1"   , new Upgrade410to420())
+                .next("4.2.0"   , new Upgrade420to421())
+                .next("4.2.1"   , new Upgrade421to430())
+                .next("4.3.0"   , new Upgrade430to440())
+                .next("4.3.1"   , new Upgrade431to440())
+                .next("4.3.2"   , new Upgrade432to440())
+                .next("4.4.0"   , new Upgrade440to441())
+                .next("4.4.1"   , new Upgrade441to442())
+                .next("4.4.2"   , new Upgrade442to450())
+                .next("4.4.3"   , new Upgrade443to444())
+                .next("4.4.4"   , new Upgrade444to450())
+                .next("4.5.0"   , new Upgrade450to451())
+                .next("4.5.1"   , new Upgrade451to452())
+                .next("4.5.2"   , new Upgrade452to453())
+                .next("4.5.3"   , new Upgrade453to460())
+                .next("4.6.0"   , new Upgrade460to461())
+                .next("4.6.1"   , new Upgrade461to470())
+                .next("4.6.2"   , new Upgrade461to470())
+                .next("4.7.0"   , new Upgrade470to471())
+                .next("4.7.1"   , new Upgrade471to480())
+                .next("4.7.2"   , new Upgrade471to480())
+                .next("4.8.0"   , new Upgrade480to481())
+                .next("4.8.1"   , new Upgrade481to490())
+                .next("4.8.2.0" , new Upgrade481to490())
+                .next("4.9.0"   , new Upgrade490to4910())
+                .next("4.9.1.0" , new Upgrade4910to4920())
+                .next("4.9.2.0" , new Upgrade4920to4930())
+                .next("4.9.3.0" , new Upgrade4930to41000())
+                .next("4.9.3.1" , new Upgrade4930to41000())
+                .next("4.10.0.0", new Upgrade41000to41100())
+                .next("4.11.0.0", new Upgrade41100to41110())
+                .next("4.11.1.0", new Upgrade41110to41200())
+                .build();
     }
 
     protected void runScript(Connection conn, InputStream file) {
@@ -479,42 +201,14 @@ public class DatabaseUpgradeChecker implements 
SystemIntegrityChecker {
 
     }
 
-    /**
-     *
-     * Calculates an upgrade path for the passed <code>dbVersion</code>.  The 
calculation assumes that the
-     * <code>dbVersion</code> required no schema migrations or data 
conversions and no upgrade path was defined
-     * for it.  Therefore, we find the most recent version with database 
migrations before the <code>dbVersion</code>
-     * and adopt that list.
-     *
-     * @param dbVersion The version from which the upgrade will occur
-     *
-     * @return The upgrade path from <code>dbVersion</code> to 
<code>currentVersion</code>
-     *
-     * @since 4.8.2.0
-     *
-     */
-    private DbUpgrade[] findMostRecentUpgradePath(final CloudStackVersion 
dbVersion) {
-
-        // Find the most recent version before dbVersion
-        for (CloudStackVersion version : reverse(availableVersions)) {
-            if (dbVersion.compareTo(version) < 0) {
-                return _upgradeMap.get(version);
-            }
-        }
-
-        // The current version was the latest and didn't have any migrations 
...
-        return new DbUpgrade[0];
-
-    }
-
-    // Default visibility to support unit testing ...
+    @VisibleForTesting
     DbUpgrade[] calculateUpgradePath(final CloudStackVersion dbVersion, final 
CloudStackVersion currentVersion) {
 
         checkArgument(dbVersion != null);
         checkArgument(currentVersion != null);
         checkArgument(currentVersion.compareTo(dbVersion) > 0);
 
-        final DbUpgrade[] upgrades = _upgradeMap.containsKey(dbVersion) ? 
_upgradeMap.get(dbVersion) : findMostRecentUpgradePath(dbVersion);
+        final DbUpgrade[] upgrades = hierarchy.getPath(dbVersion, 
currentVersion);
 
         // When there is no upgrade defined for the target version, we assume 
that there were no schema changes or
         // data migrations required.  Based on that assumption, we add a noop 
DbUpgrade to the end of the list ...
@@ -644,7 +338,8 @@ public class DatabaseUpgradeChecker implements 
SystemIntegrityChecker {
         }
     }
 
-    private static final class NoopDbUpgrade implements DbUpgrade {
+    @VisibleForTesting
+    protected static final class NoopDbUpgrade implements DbUpgrade {
 
         private final String upgradedVersion;
         private final String[] upgradeRange;
diff --git 
a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java 
b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
new file mode 100644
index 0000000..35b2faa
--- /dev/null
+++ 
b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
@@ -0,0 +1,186 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.upgrade;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import com.google.common.collect.ImmutableList;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
+import com.cloud.upgrade.dao.DbUpgrade;
+
+/**
+ * @since 4.12.0.0
+ */
+public final class DatabaseVersionHierarchy {
+    private final ImmutableList<VersionNode> hierarchy;
+
+    private DatabaseVersionHierarchy(ImmutableList<VersionNode> hierarchy) {
+        this.hierarchy = hierarchy;
+    }
+
+    public static DatabaseVersionHierarchyBuilder builder() {
+        return new DatabaseVersionHierarchyBuilder();
+    }
+
+    /**
+     * Check if current hierarchy of Database Versions contains 
<code>version</code>.
+     *
+     * @param version The version to check if hierarchy contains it
+     *
+     * @return true if hierarchy contains the version, false if not
+     */
+    public boolean contains(final CloudStackVersion version) {
+        return toList().contains(version);
+    }
+
+    /**
+     * Calculates an  upgrade path for the  passed <code>fromVersion</code>.  
If the  <code>fromVersion</code>
+     * doesn't exist in list  of  available <code>VersionNode</code> 
hierarchy,  then calculation assumes that
+     * the <code>fromVersion</code> required no schema migrations or data 
conversions and no  upgrade path was
+     * defined  for it.  Therefore,  we  find  the most  recent  version  with 
 database migrations before the
+     * <code>fromVersion</code> and adopt that upgrade path list.
+     *
+     * @param fromVersion The version from which the upgrade will occur
+     *
+     * @return The upgrade path from <code>fromVersion</code> to 
<code>LATEST</code> version.
+     */
+    public DbUpgrade[] getPath(final CloudStackVersion fromVersion) {
+        return getPath(fromVersion, null);
+    }
+
+    /**
+     * Calculates an  upgrade path for the  passed <code>fromVersion</code> 
and <code>toVersion</code>. If the
+     * <code>fromVersion</code> doesn't exist in list  of available 
<code>VersionNode</code> hierarchy,   then
+     * calculation assumes that the <code>fromVersion</code> required no 
schema migrations or data conversions
+     * and no  upgrade path was defined  for it.  Therefore, we find  the most 
recent  version  with  database
+     * migrations before the <code>fromVersion</code> and adopt that upgrade 
path list up to <code>toVersion</code>.
+     * If <code>toVersion</code> is null, we're going to find the upgrade path 
up to the latest available version.
+     *
+     * @param fromVersion The version from which the upgrade will occur
+     * @param toVersion The version up to which the upgrade will occur (can be 
null)
+     *
+     * @return The upgrade path from <code>fromVersion</code> to 
<code>toVersion</code>
+     */
+    public DbUpgrade[] getPath(final CloudStackVersion fromVersion, final 
CloudStackVersion toVersion) {
+        if (fromVersion == null) {
+            return new DbUpgrade[0];
+        }
+
+        // we cannot find the version specified, so get the
+        // most recent one immediately before this version
+        if (!contains(fromVersion)) {
+            return getPath(getRecentVersion(fromVersion), toVersion);
+        }
+
+        final Predicate<? super VersionNode> predicate;
+
+        if (toVersion == null) {
+            // all the available versions greater than or equal to fromVersion
+            predicate = node -> node.version.compareTo(fromVersion) > -1;
+        } else {
+            // all the available versions greater than or equal to fromVersion 
AND less than toVersion
+            predicate = node -> node.version.compareTo(fromVersion) > -1 && 
node.version.compareTo(toVersion) < 0;
+        }
+
+        // get upgrade path from version forward (include version itself in 
the path)
+        return hierarchy
+                    .stream()
+                    .filter(predicate)
+                    .filter(distinct(node -> 
node.upgrader.getUpgradedVersion()))
+                    .map(node -> node.upgrader)
+                    .toArray(DbUpgrade[]::new);
+    }
+
+    /**
+     * Find the most recent <code>CloudStackVersion</code> immediately before 
<code>fromVersion</code>
+     *
+     * @param fromVersion The version to look up its immediate previous 
available version
+     *
+     * @return The <code>CloudStackVersion</code> or null
+     *
+     * @since 4.8.2.0 (refactored in 4.11.1.0)
+     */
+    private CloudStackVersion getRecentVersion(final CloudStackVersion 
fromVersion) {
+        if (fromVersion == null) {
+            return null;
+        }
+
+        // find the most recent version immediately before fromVersion
+        return toList()
+                 .reverse()
+                 .stream()
+                 .filter(version -> fromVersion.compareTo(version) < 0)
+                 .findFirst()
+                 .orElse(null);
+    }
+
+    /**
+     * Generate immutable list of available <code>CloudstackVersion</code> in 
the hierarchy
+     *
+     * @return list of available versions
+     */
+    public ImmutableList<CloudStackVersion> toList() {
+        List<CloudStackVersion> versions = hierarchy
+                                                .stream()
+                                                .map(node -> node.version)
+                                                .collect(Collectors.toList());
+
+        return ImmutableList.copyOf(versions);
+    }
+
+    /**
+     * Find the distinct <code>VersionNode</code> based on the provided 
<code>getUpgradedVersion()</code>
+     */
+    private Predicate<VersionNode> distinct(Function<VersionNode, String> 
keyExtractor) {
+        Map<String, Boolean> seen = new ConcurrentHashMap<>();
+        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == 
null;
+    }
+
+    private static class VersionNode {
+        final CloudStackVersion version;
+        final DbUpgrade upgrader;
+
+        private VersionNode(final CloudStackVersion version, final DbUpgrade 
upgrader) {
+            this.version = version;
+            this.upgrader = upgrader;
+        }
+    }
+
+    public static final class DatabaseVersionHierarchyBuilder {
+        private final List<VersionNode> hierarchyBuilder = new LinkedList<>();
+
+        private DatabaseVersionHierarchyBuilder() {
+        }
+
+        public DatabaseVersionHierarchyBuilder next(final String version, 
final DbUpgrade upgrader) {
+            hierarchyBuilder.add(new 
VersionNode(CloudStackVersion.parse(version), upgrader));
+            return this;
+        }
+
+        public DatabaseVersionHierarchy build() {
+            return new 
DatabaseVersionHierarchy(ImmutableList.copyOf(hierarchyBuilder));
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java 
b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
index bd06de1..3e2995d 100644
--- 
a/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
+++ 
b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
@@ -16,25 +16,29 @@
 // under the License.
 package com.cloud.upgrade;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import org.apache.cloudstack.utils.CloudStackVersion;
+
+import com.cloud.upgrade.DatabaseUpgradeChecker.NoopDbUpgrade;
 import com.cloud.upgrade.dao.DbUpgrade;
-import com.cloud.upgrade.dao.Upgrade452to460;
+import com.cloud.upgrade.dao.Upgrade41000to41100;
+import com.cloud.upgrade.dao.Upgrade41100to41110;
+import com.cloud.upgrade.dao.Upgrade41110to41200;
+import com.cloud.upgrade.dao.Upgrade452to453;
+import com.cloud.upgrade.dao.Upgrade453to460;
 import com.cloud.upgrade.dao.Upgrade460to461;
 import com.cloud.upgrade.dao.Upgrade461to470;
 import com.cloud.upgrade.dao.Upgrade470to471;
 import com.cloud.upgrade.dao.Upgrade471to480;
 import com.cloud.upgrade.dao.Upgrade480to481;
 import com.cloud.upgrade.dao.Upgrade490to4910;
-import com.cloud.upgrade.dao.Upgrade41000to41100;
-import com.cloud.upgrade.dao.Upgrade41100to41110;
-import com.cloud.upgrade.dao.Upgrade41110to41200;
-import org.apache.cloudstack.utils.CloudStackVersion;
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
 public class DatabaseUpgradeCheckerTest {
 
@@ -72,7 +76,7 @@ public class DatabaseUpgradeCheckerTest {
         assertTrue(upgrades.length >= 1);
         assertTrue(upgrades[0] instanceof Upgrade490to4910);
 
-        assertTrue(Arrays.equals(new String[] { "4.9.0", 
currentVersion.toString()}, upgrades[0].getUpgradableVersionRange()));
+        assertTrue(Arrays.equals(new String[] {"4.9.0", 
currentVersion.toString()}, upgrades[0].getUpgradableVersionRange()));
         assertEquals(currentVersion.toString(), 
upgrades[0].getUpgradedVersion());
 
     }
@@ -95,8 +99,7 @@ public class DatabaseUpgradeCheckerTest {
         assertTrue(upgrades[1] instanceof Upgrade41100to41110);
         assertTrue(upgrades[2] instanceof Upgrade41110to41200);
 
-        assertTrue(Arrays.equals(new String[] { "4.11.0.0", "4.11.1.0"},
-                upgrades[1].getUpgradableVersionRange()));
+        assertTrue(Arrays.equals(new String[] {"4.11.0.0", "4.11.1.0"}, 
upgrades[1].getUpgradableVersionRange()));
         assertEquals(currentVersion.toString(), 
upgrades[2].getUpgradedVersion());
 
     }
@@ -135,15 +138,33 @@ public class DatabaseUpgradeCheckerTest {
 
         assertNotNull(upgrades);
 
-        assertTrue(upgrades[0] instanceof Upgrade452to460);
-        assertTrue(upgrades[1] instanceof Upgrade460to461);
-        assertTrue(upgrades[2] instanceof Upgrade461to470);
-        assertTrue(upgrades[3] instanceof Upgrade470to471);
-        assertTrue(upgrades[4] instanceof Upgrade471to480);
-        assertTrue(upgrades[5] instanceof Upgrade480to481);
-
-        assertTrue(Arrays.equals(new String[] { "4.8.1", 
currentVersion.toString()}, upgrades[6].getUpgradableVersionRange()));
-        assertEquals(currentVersion.toString(), 
upgrades[6].getUpgradedVersion());
+        assertTrue(upgrades[0] instanceof Upgrade452to453);
+        assertTrue(upgrades[1] instanceof Upgrade453to460);
+        assertTrue(upgrades[2] instanceof Upgrade460to461);
+        assertTrue(upgrades[3] instanceof Upgrade461to470);
+        assertTrue(upgrades[4] instanceof Upgrade470to471);
+        assertTrue(upgrades[5] instanceof Upgrade471to480);
+        assertTrue(upgrades[6] instanceof Upgrade480to481);
 
+        assertTrue(Arrays.equals(new String[] {"4.8.1", 
currentVersion.toString()}, upgrades[upgrades.length - 
1].getUpgradableVersionRange()));
+        assertEquals(currentVersion.toString(), upgrades[upgrades.length - 
1].getUpgradedVersion());
     }
+
+    @Test
+    public void testCalculateUpgradePathUnkownDbVersion() {
+
+        final CloudStackVersion dbVersion = 
CloudStackVersion.parse("4.99.0.0");
+        assertNotNull(dbVersion);
+
+        final CloudStackVersion currentVersion = 
CloudStackVersion.parse("4.99.1.0");
+        assertNotNull(currentVersion);
+
+        final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
+        final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, 
currentVersion);
+        assertNotNull(upgrades);
+        assertTrue(upgrades.length == 1);
+        assertTrue(upgrades[0] instanceof NoopDbUpgrade);
+
+     }
+
 }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to