Repository: ambari Updated Branches: refs/heads/trunk b19cee169 -> 3c4e9111e
AMBARI-11219. Create Default Upgrade Catalog to upgrade the schema version to the current Ambari Server Versions. (mpapirkovskyy) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3c4e9111 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3c4e9111 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3c4e9111 Branch: refs/heads/trunk Commit: 3c4e9111ef95015ab4a365b08008ee5e6ec08b72 Parents: efbc665 Author: Myroslav Papirkovskyy <[email protected]> Authored: Mon May 18 19:19:43 2015 +0300 Committer: Myroslav Papirkovskyy <[email protected]> Committed: Mon May 18 20:21:29 2015 +0300 ---------------------------------------------------------------------- .../server/configuration/Configuration.java | 13 ++++ .../server/upgrade/AbstractUpgradeCatalog.java | 11 ++++ .../server/upgrade/FinalUpgradeCatalog.java | 66 ++++++++++++++++++++ .../server/upgrade/SchemaUpgradeHelper.java | 9 +-- .../ambari/server/upgrade/UpgradeCatalog.java | 6 ++ .../ambari/server/upgrade/UpgradeTest.java | 5 ++ 6 files changed, 103 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index 3ceb05b..d8f89b2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -843,6 +843,19 @@ public class Configuration { } /** + * Gets ambari server version + * @return version String + */ + public String getServerVersion() { + try { + return FileUtils.readFileToString(new File(getServerVersionFilePath())).trim(); + } catch (IOException e) { + LOG.error("Unable to read server version file", e); + } + return null; + } + + /** * Check to see if the API should be authenticated or not * @return false if not, true if the authentication is enabled. */ http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java index ec63512..c16c664 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java @@ -76,6 +76,7 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog { @Inject public AbstractUpgradeCatalog(Injector injector) { this.injector = injector; + injector.injectMembers(this); registerCatalog(this); } @@ -100,6 +101,11 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog { @Override public int compare(UpgradeCatalog upgradeCatalog1, UpgradeCatalog upgradeCatalog2) { + //make sure FinalUpgradeCatalog runs last + if (upgradeCatalog1.isFinal() ^ upgradeCatalog2.isFinal()) { + return Boolean.compare(upgradeCatalog1.isFinal(), upgradeCatalog2.isFinal()); + } + return VersionUtils.compareVersions(upgradeCatalog1.getTargetVersion(), upgradeCatalog2.getTargetVersion(), 3); } @@ -382,6 +388,11 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog { updateMetaInfoVersion(getTargetVersion()); } + @Override + public boolean isFinal() { + return false; + } + protected abstract void executeDDLUpdates() throws AmbariException, SQLException; /** http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java new file mode 100644 index 0000000..334afaf --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/FinalUpgradeCatalog.java @@ -0,0 +1,66 @@ +/** + * 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 org.apache.ambari.server.upgrade; + +import com.google.inject.Inject; +import com.google.inject.Injector; +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.utils.VersionUtils; + +import java.sql.SQLException; + +/** + * Final upgrade catalog which simply updates database version (in case if no db changes between releases) + */ +public class FinalUpgradeCatalog extends AbstractUpgradeCatalog { + + @Inject + public FinalUpgradeCatalog(Injector injector) { + super(injector); + } + + @Override + protected void executeDDLUpdates() throws AmbariException, SQLException { + //noop + } + + @Override + protected void executePreDMLUpdates() throws AmbariException, SQLException { + //noop + } + + @Override + protected void executeDMLUpdates() throws AmbariException, SQLException { + //noop + } + + @Override + public String getTargetVersion() { + return getFinalVersion(); + } + + @Override + public boolean isFinal() { + return true; + } + + private String getFinalVersion() { + return VersionUtils.getVersionSubstring(configuration.getServerVersion()); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java index a8f719a..f1ff33f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java @@ -108,13 +108,7 @@ public class SchemaUpgradeHelper { * @return */ protected String getAmbariServerVersion() { - String versionFilePath = configuration.getServerVersionFilePath(); - try { - return FileUtils.readFileToString(new File(versionFilePath)).trim(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; + return configuration.getServerVersion(); } /** @@ -175,6 +169,7 @@ public class SchemaUpgradeHelper { catalogBinder.addBinding().to(UpgradeCatalog170.class); catalogBinder.addBinding().to(UpgradeCatalog200.class); catalogBinder.addBinding().to(UpgradeCatalog210.class); + catalogBinder.addBinding().to(FinalUpgradeCatalog.class); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog.java index 2b96a57..976cc99 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog.java @@ -47,6 +47,12 @@ public interface UpgradeCatalog { void upgradeData() throws AmbariException, SQLException; /** + * Defines if Upgrade Catalog should be executed last + * @return + */ + boolean isFinal(); + + /** * Called after {@link #upgradeSchema()} and {@link #upgradeData()}, this * method is used to perform any operations after the catalog has finished. * Usually, this is cleanup work that does not directly affect the upgrade. http://git-wip-us.apache.org/repos/asf/ambari/blob/3c4e9111/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java index 0ca5bb0..3af417f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java @@ -74,6 +74,8 @@ import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.google.inject.persist.PersistService; +import static org.junit.Assert.assertTrue; + @RunWith(Parameterized.class) public class UpgradeTest { private static final Logger LOG = LoggerFactory.getLogger(UpgradeTest.class); @@ -199,6 +201,9 @@ public class UpgradeTest { List<UpgradeCatalog> upgradeCatalogs = schemaUpgradeHelper.getUpgradePath(sourceVersion, targetVersion); + assertTrue("Final Upgrade Catalog should be run last", + !upgradeCatalogs.isEmpty() && upgradeCatalogs.get(upgradeCatalogs.size() - 1).isFinal()); + try { schemaUpgradeHelper.executeUpgrade(upgradeCatalogs); } catch (Exception e) {
