You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2018/05/08 04:03:23 UTC

[cloudstack] branch master updated (883b313 -> d91e20e)

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

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


    from 883b313  [migrateVolume API method] Filter disk offerings based on storage pool selected (#2612)
     add 7361649  schema: create upgrade path from 4.9.3.1 to 4.11.1.0 (#2628)
     new d91e20e  Merge branch '4.11' (#2628)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java | 3 +++
 1 file changed, 3 insertions(+)

-- 
To stop receiving notification emails like this one, please contact
rohit@apache.org.

[cloudstack] 01/01: Merge branch '4.11' (#2628)

Posted by ro...@apache.org.
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

commit d91e20ecdc581b7639021b73d2bd65e3a53463a0
Merge: 883b313 7361649
Author: Rohit Yadav <ro...@shapeblue.com>
AuthorDate: Tue May 8 09:30:41 2018 +0530

    Merge branch '4.11' (#2628)
    
    Signed-off-by: Rohit Yadav <ro...@shapeblue.com>

 .../schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java | 3 +++
 1 file changed, 3 insertions(+)

diff --cc engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
index 4a031dd,0000000..ef90db6
mode 100644,000000..100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java
@@@ -1,689 -1,0 +1,692 @@@
 +// 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 com.cloud.upgrade.dao.DbUpgrade;
 +import com.cloud.upgrade.dao.Upgrade217to218;
 +import com.cloud.upgrade.dao.Upgrade218to22;
 +import com.cloud.upgrade.dao.Upgrade218to224DomainVlans;
 +import com.cloud.upgrade.dao.Upgrade2210to2211;
 +import com.cloud.upgrade.dao.Upgrade2211to2212;
 +import com.cloud.upgrade.dao.Upgrade2212to2213;
 +import com.cloud.upgrade.dao.Upgrade2213to2214;
 +import com.cloud.upgrade.dao.Upgrade2214to30;
 +import com.cloud.upgrade.dao.Upgrade221to222;
 +import com.cloud.upgrade.dao.Upgrade222to224;
 +import com.cloud.upgrade.dao.Upgrade224to225;
 +import com.cloud.upgrade.dao.Upgrade225to226;
 +import com.cloud.upgrade.dao.Upgrade227to228;
 +import com.cloud.upgrade.dao.Upgrade228to229;
 +import com.cloud.upgrade.dao.Upgrade229to2210;
 +import com.cloud.upgrade.dao.Upgrade301to302;
 +import com.cloud.upgrade.dao.Upgrade302to303;
 +import com.cloud.upgrade.dao.Upgrade302to40;
 +import com.cloud.upgrade.dao.Upgrade303to304;
 +import com.cloud.upgrade.dao.Upgrade304to305;
 +import com.cloud.upgrade.dao.Upgrade305to306;
 +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.Upgrade410to420;
 +import com.cloud.upgrade.dao.Upgrade41110to41200;
 +import com.cloud.upgrade.dao.Upgrade420to421;
 +import com.cloud.upgrade.dao.Upgrade421to430;
 +import com.cloud.upgrade.dao.Upgrade430to440;
 +import com.cloud.upgrade.dao.Upgrade431to440;
 +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.Upgrade444to450;
 +import com.cloud.upgrade.dao.Upgrade450to451;
 +import com.cloud.upgrade.dao.Upgrade451to452;
 +import com.cloud.upgrade.dao.Upgrade452to460;
 +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.Upgrade481to490;
 +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;
 +import com.cloud.upgrade.dao.VersionDaoImpl;
 +import com.cloud.upgrade.dao.VersionVO;
 +import com.cloud.upgrade.dao.VersionVO.Step;
 +import com.cloud.utils.component.SystemIntegrityChecker;
 +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<>();
 +
 +    @Inject
 +    VersionDao _dao;
 +
 +    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);
 +    }
 +
 +    protected void runScript(Connection conn, InputStream file) {
 +
 +        try (InputStreamReader reader = new InputStreamReader(file)) {
 +            ScriptRunner runner = new ScriptRunner(conn, false, true);
 +            runner.runScript(reader);
 +        } catch (IOException e) {
 +            s_logger.error("Unable to read upgrade script", e);
 +            throw new CloudRuntimeException("Unable to read upgrade script", e);
 +        } catch (SQLException e) {
 +            s_logger.error("Unable to execute upgrade script", e);
 +            throw new CloudRuntimeException("Unable to execute upgrade script", e);
 +        }
 +
 +    }
 +
 +    /**
 +     *
 +     * 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 ...
 +    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);
 +
 +        // 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 ...
 +        final CloudStackVersion tailVersion = upgrades.length > 0 ? CloudStackVersion.parse(upgrades[upgrades.length - 1].getUpgradedVersion()) : dbVersion;
 +
 +        if (currentVersion.compareTo(tailVersion) != 0) {
 +            return concat(upgrades, new NoopDbUpgrade(tailVersion, currentVersion));
 +        }
 +
 +        return upgrades;
 +
 +    }
 +
 +    protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVersion) {
 +        s_logger.info("Database upgrade must be performed from " + dbVersion + " to " + currentVersion);
 +
 +        final DbUpgrade[] upgrades = calculateUpgradePath(dbVersion, currentVersion);
 +
 +        for (DbUpgrade upgrade : upgrades) {
 +            VersionVO version;
 +            s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
 +                .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
 +            TransactionLegacy txn = TransactionLegacy.open("Upgrade");
 +            txn.start();
 +            try {
 +                Connection conn;
 +                try {
 +                    conn = txn.getConnection();
 +                } catch (SQLException e) {
 +                    String errorMessage = "Unable to upgrade the database";
 +                    s_logger.error(errorMessage, e);
 +                    throw new CloudRuntimeException(errorMessage, e);
 +                }
 +                InputStream[] scripts = upgrade.getPrepareScripts();
 +                if (scripts != null) {
 +                    for (InputStream script : scripts) {
 +                        runScript(conn, script);
 +                    }
 +                }
 +
 +                upgrade.performDataMigration(conn);
 +
 +                version = new VersionVO(upgrade.getUpgradedVersion());
 +                version = _dao.persist(version);
 +
 +                txn.commit();
 +            } catch (CloudRuntimeException e) {
 +                String errorMessage = "Unable to upgrade the database";
 +                s_logger.error(errorMessage, e);
 +                throw new CloudRuntimeException(errorMessage, e);
 +            } finally {
 +                txn.close();
 +            }
 +
 +            // Run the corresponding '-cleanup.sql' script
 +            txn = TransactionLegacy.open("Cleanup");
 +            try {
 +                s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade
 +                    .getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
 +
 +                txn.start();
 +                Connection conn;
 +                try {
 +                    conn = txn.getConnection();
 +                } catch (SQLException e) {
 +                    s_logger.error("Unable to cleanup the database", e);
 +                    throw new CloudRuntimeException("Unable to cleanup the database", e);
 +                }
 +
 +                InputStream[] scripts = upgrade.getCleanupScripts();
 +                if (scripts != null) {
 +                    for (InputStream script : scripts) {
 +                        runScript(conn, script);
 +                        s_logger.debug("Cleanup script " + upgrade.getClass().getSimpleName() + " is executed successfully");
 +                    }
 +                }
 +                txn.commit();
 +
 +                txn.start();
 +                version.setStep(Step.Complete);
 +                version.setUpdated(new Date());
 +                _dao.update(version.getId(), version);
 +                txn.commit();
 +                s_logger.debug("Upgrade completed for version " + version.getVersion());
 +            } finally {
 +                txn.close();
 +            }
 +        }
 +    }
 +
 +    @Override
 +    public void check() {
 +        GlobalLock lock = GlobalLock.getInternLock("DatabaseUpgrade");
 +        try {
 +            s_logger.info("Grabbing lock to check for database upgrade.");
 +            if (!lock.lock(20 * 60)) {
 +                throw new CloudRuntimeException("Unable to acquire lock to check for database integrity.");
 +            }
 +
 +            try {
 +
 +                final CloudStackVersion dbVersion = CloudStackVersion.parse(_dao.getCurrentVersion());
 +                final String currentVersionValue = this.getClass().getPackage().getImplementationVersion();
 +
 +                if (StringUtils.isBlank(currentVersionValue)) {
 +                    return;
 +                }
 +
 +                final CloudStackVersion currentVersion = CloudStackVersion.parse(currentVersionValue);
 +                s_logger.info("DB version = " + dbVersion + " Code Version = " + currentVersion);
 +
 +                if (dbVersion.compareTo(currentVersion) > 0) {
 +                    throw new CloudRuntimeException("Database version " + dbVersion + " is higher than management software version " + currentVersionValue);
 +                }
 +
 +                if (dbVersion.compareTo(currentVersion) == 0) {
 +                    s_logger.info("DB version and code version matches so no upgrade needed.");
 +                    return;
 +                }
 +
 +                upgrade(dbVersion, currentVersion);
 +            } finally {
 +                lock.unlock();
 +            }
 +        } finally {
 +            lock.releaseRef();
 +        }
 +    }
 +
 +    private static final class NoopDbUpgrade implements DbUpgrade {
 +
 +        private final String upgradedVersion;
 +        private final String[] upgradeRange;
 +
 +        private NoopDbUpgrade(final CloudStackVersion fromVersion, final CloudStackVersion toVersion) {
 +
 +            super();
 +
 +            upgradedVersion = toVersion.toString();
 +            upgradeRange = new String[] {fromVersion.toString(), toVersion.toString()};
 +
 +        }
 +
 +        @Override
 +        public String[] getUpgradableVersionRange() {
 +            return Arrays.copyOf(upgradeRange, upgradeRange.length);
 +        }
 +
 +        @Override
 +        public String getUpgradedVersion() {
 +            return upgradedVersion;
 +        }
 +
 +        @Override
 +        public boolean supportsRollingUpgrade() {
 +            return false;
 +        }
 +
 +        @Override
 +        public InputStream[] getPrepareScripts() {
 +            return new InputStream[0];
 +        }
 +
 +        @Override
 +        public void performDataMigration(Connection conn) {
 +
 +        }
 +
 +        @Override
 +        public InputStream[] getCleanupScripts() {
 +            return new InputStream[0];
 +        }
 +
 +    }
 +}

-- 
To stop receiving notification emails like this one, please contact
rohit@apache.org.