Repository: ambari Updated Branches: refs/heads/branch-2.6 41c362eb9 -> b5da60b5a
AMBARI-22723. Ambari Upgrade failed in case if database have no cluster_version table already. The issue with idempotence (dlysnichenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b5da60b5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b5da60b5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b5da60b5 Branch: refs/heads/branch-2.6 Commit: b5da60b5ac51637e0448c3df0662a58f477cefbf Parents: 41c362e Author: Lisnichenko Dmitro <[email protected]> Authored: Thu Jan 4 18:11:03 2018 +0200 Committer: Lisnichenko Dmitro <[email protected]> Committed: Thu Jan 4 18:11:03 2018 +0200 ---------------------------------------------------------------------- .../main/java/org/apache/ambari/server/orm/DBAccessorImpl.java | 3 +++ .../java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java | 3 +++ .../org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java | 1 + 3 files changed, 7 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b5da60b5/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java index 391a6f5..658af07 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java @@ -1532,6 +1532,9 @@ public class DBAccessorImpl implements DBAccessor { public List<Integer> getIntColumnValues(String tableName, String columnName, String[] conditionColumnNames, String[] values, boolean ignoreFailure) throws SQLException { + if (!tableExists(tableName)) { + throw new IllegalArgumentException(String.format("%s table does not exist", tableName)); + } if (!tableHasColumn(tableName, columnName)) { throw new IllegalArgumentException(String.format("%s table does not contain %s column", tableName, columnName)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/b5da60b5/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java index 6ba1671..0d4a4a3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java @@ -530,6 +530,9 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog { * @throws SQLException */ public Integer getCurrentVersionID() throws AmbariException, SQLException { + if (!dbAccessor.tableExists(CLUSTER_VERSION_TABLE)) { + return null; + } List<Integer> currentVersionList = dbAccessor.getIntColumnValues(CLUSTER_VERSION_TABLE, REPO_VERSION_ID_COLUMN, new String[]{STATE_COLUMN}, new String[]{CURRENT}, false); if (currentVersionList.isEmpty()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/b5da60b5/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java index e93cd13..0e2ecb2 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java @@ -516,6 +516,7 @@ public class UpgradeCatalog260Test { } public void expectGetCurrentVersionID(List<Integer> current, Capture<String[]> scdcaptureKey, Capture<String[]> scdcaptureValue) throws SQLException { + expect(dbAccessor.tableExists(eq("cluster_version"))).andReturn(true).once(); expect(dbAccessor.getIntColumnValues(eq("cluster_version"), eq("repo_version_id"), capture(scdcaptureKey), capture(scdcaptureValue), eq(false))).andReturn(current).once(); }
