You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2017/06/12 17:19:18 UTC

[01/10] ambari git commit: AMBARI-21170. Upgrade Dialog Is Missing the Version Information (alexantonenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk 8d129d414 -> acc12fb72


AMBARI-21170. Upgrade Dialog Is Missing the Version Information (alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4767389b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4767389b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4767389b

Branch: refs/heads/trunk
Commit: 4767389b655cba8e6062f06d8390a1a22bf60e41
Parents: 9a42d40
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu Jun 1 17:04:36 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu Jun 1 17:04:36 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/messages.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4767389b/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 02a54f7..2f915ec 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1776,8 +1776,8 @@ Em.I18n.translations = {
   'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed.msg':'All checks passed',
   'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip':'Option not available',
   'admin.stackVersions.version.upgrade.upgradeOptions.notAllowed':'Not allowed by the current version',
-  'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> to <b>{1}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
-  'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> to <b>{1}</b>. Are you sure you want to proceed?',
+  'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> to <b>{0}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
+  'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> to <b>{0}</b>. Are you sure you want to proceed?',
   'admin.stackVersions.version.upgrade.upgradeOptions.error': 'Could not proceed with upgrade:',
   'admin.stackVersions.version.upgrade.upgradeOptions.loading': 'Checking for supported upgrade types...',
 


[08/10] ambari git commit: AMBARI-21091. HDP deploy from public repo failed (dlysnichenko)

Posted by nc...@apache.org.
AMBARI-21091. HDP deploy from public repo failed (dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/871f85b3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/871f85b3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/871f85b3

Branch: refs/heads/trunk
Commit: 871f85b34e5d0586dd21ed332a16abd012a72eef
Parents: 7750c9a
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon Jun 12 19:38:34 2017 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon Jun 12 19:38:34 2017 +0300

----------------------------------------------------------------------
 .../test/python/ambari_agent/TestHostInfo.py    | 107 ++++++++++
 .../libraries/functions/packages_analyzer.py    |  53 ++++-
 .../libraries/script/script.py                  |  25 ++-
 .../server/orm/entities/UpgradeEntity.java      |   3 +-
 .../orm/entities/UpgradeHistoryEntity.java      |   3 +-
 .../custom_actions/scripts/install_packages.py  |   8 +-
 .../upgrades/UpgradeActionTest.java             |   2 +-
 .../custom_actions/TestInstallPackages.py       | 202 +++++++------------
 .../configs/install_packages_config.json        |  19 +-
 .../stacks/2.0.6/HBASE/test_hbase_master.py     |  11 +-
 .../stacks/2.0.6/configs/hbase_with_phx.json    |  12 ++
 utility/pom.xml                                 |  21 ++
 12 files changed, 322 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
index a00771d..027a0a8 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
@@ -538,5 +538,112 @@ class TestHostInfo(TestCase):
     os_path_isfile_mock.return_value = False
     self.assertEqual("", hostInfo.getTransparentHugePage())
 
+  @staticmethod
+  def _add_packages_available(command, arg):
+    arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+  @staticmethod
+  def _add_packages_lookUpYum(command, key, arg):
+    TestHostInfo._add_packages_available(command, arg)
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
+  def test_get_available_packages_in_repos_suse(self, lookUpZypperPackages, is_redhat_family, is_ubuntu_family,
+                                                is_suse_family_mock):
+    is_suse_family_mock.return_value = True
+    is_redhat_family.return_value = False
+    is_ubuntu_family.return_value = False
+    lookUpZypperPackages.side_effect = TestHostInfo._add_packages_available
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+  def test_get_available_packages_in_repos_rhel(self, lookUpYumPackages, is_redhat_family, is_ubuntu_family,
+                                                is_suse_family_mock):
+    is_suse_family_mock.return_value = False
+    is_redhat_family.return_value = True
+    is_ubuntu_family.return_value = False
+    lookUpYumPackages.side_effect = TestHostInfo._add_packages_lookUpYum
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs", "hadoop_2_2_0_1_885",
+                      "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpAptPackages")
+  def test_get_available_packages_in_repos_ubuntu(self, lookUpAptPackages, is_redhat_family, is_ubuntu_family,
+                                                  is_suse_family_mock):
+    is_suse_family_mock.return_value = False
+    is_redhat_family.return_value = False
+    is_ubuntu_family.return_value = True
+    lookUpAptPackages.side_effect = TestHostInfo._add_packages_available
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
 if __name__ == "__main__":
   unittest.main()

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
index 8a15ee5..f4db3d2 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
@@ -34,8 +34,8 @@ __all__ = ["installedPkgsByName", "allInstalledPackages", "allAvailablePackages"
            "getInstalledRepos", "getInstalledPkgsByRepo", "getInstalledPkgsByNames", "getPackageDetails"]
 
 LIST_INSTALLED_PACKAGES_UBUNTU = "COLUMNS=9999 ; for i in $(dpkg -l |grep ^ii |awk -F' ' '{print $2}'); do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
-LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for  i in $(ls -1 /var/lib/apt/lists  | grep -v \"ubuntu.com\") ; do grep ^Package: /var/lib/apt/lists/$i |  awk '{print $2}' ; done` ; for i in $packages; do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
-
+LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for  i in $(ls -1 /var/lib/apt/lists  | grep %s ) ; do grep ^Package: /var/lib/apt/lists/$i |  awk '{print $2}' ; done` ; for i in $packages; do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
+GREP_REPO_EXCLUDE_SYSTEM = "-v \"ubuntu.com\""
 logger = logging.getLogger()
 
 # default timeout for async invoked processes
@@ -91,8 +91,6 @@ def allInstalledPackages(allInstalledPackages):
   """
   All installed packages in system
   """
-  osType = OSCheck.get_os_family()
-
   if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["sudo", "zypper", "--no-gpg-checks", "search", "--installed-only", "--details"],
@@ -108,9 +106,47 @@ def allInstalledPackages(allInstalledPackages):
       allInstalledPackages)
 
 
-def allAvailablePackages(allAvailablePackages):
-  osType = OSCheck.get_os_family()
+def get_available_packages_in_repos(repositories):
+  """
+  Gets all (both installed and available) packages that are available at given repositories.
+  :param repositories: from command configs like config['repositoryFile']['repositories']
+  :return: installed and available packages from these repositories
+  """
 
+  available_packages = []
+  installed_packages = []
+  available_packages_in_repos = []
+  repo_ids = [repository['repoId'] for repository in repositories]
+  if OSCheck.is_ubuntu_family():
+    allInstalledPackages(installed_packages)
+    repo_urls = [repository['baseUrl'] for repository in repositories]
+    repo_urls = [repo_url.replace("http://","") for repo_url in repo_urls]
+    repo_urls = [repo_url.replace("/","_") for repo_url in repo_urls]
+    for url in repo_urls:
+      _lookUpAptPackages(
+        LIST_AVAILABLE_PACKAGES_UBUNTU % url,
+        available_packages)
+      for package in installed_packages:
+        if url in package[2]:
+          available_packages_in_repos.append(package[0])
+    for package in available_packages:
+      available_packages_in_repos.append(package[0])
+  elif OSCheck.is_suse_family():
+    for repo in repo_ids:
+      _lookUpZypperPackages(["sudo", "zypper", "--no-gpg-checks", "search", "--details", "--repo", repo],
+                            available_packages)
+    available_packages_in_repos += [package[0] for package in available_packages]
+  elif OSCheck.is_redhat_family():
+    for repo in repo_ids:
+      _lookUpYumPackages(["sudo", "yum", "list", "available", "--disablerepo=*", "--enablerepo=" + repo],
+                         'Available Packages', available_packages)
+      _lookUpYumPackages(["sudo", "yum", "list", "installed", "--disablerepo=*", "--enablerepo=" + repo],
+                         'Installed Packages', installed_packages)
+    available_packages_in_repos += [package[0] for package in available_packages + installed_packages]
+  return available_packages_in_repos
+
+
+def allAvailablePackages(allAvailablePackages):
   if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["sudo", "zypper", "--no-gpg-checks", "search", "--uninstalled-only", "--details"],
@@ -122,7 +158,7 @@ def allAvailablePackages(allAvailablePackages):
       allAvailablePackages)
   elif OSCheck.is_ubuntu_family():
      return _lookUpAptPackages(
-      LIST_AVAILABLE_PACKAGES_UBUNTU,
+       LIST_AVAILABLE_PACKAGES_UBUNTU % GREP_REPO_EXCLUDE_SYSTEM,
       allAvailablePackages)
 
 # ToDo: add execution via sudo for ubuntu (currently Ubuntu is not supported)
@@ -170,7 +206,6 @@ def _lookUpZypperPackages(command, allPackages):
     if 0 == result['retCode']:
       lines = result['out'].split('\n')
       lines = [line.strip() for line in lines]
-      items = []
       for index in range(len(lines)):
         if "--+--" in lines[index]:
           skipIndex = index + 1
@@ -281,7 +316,7 @@ def getInstalledPackageVersion(package_name):
     code, out, err = rmf_shell.checked_call("dpkg -s {0} | grep Version | awk '{{print $2}}'".format(package_name), stderr=subprocess.PIPE)
   else:
     code, out, err = rmf_shell.checked_call("rpm -q --queryformat '%{{version}}-%{{release}}' {0} | sed -e 's/\.el[0-9]//g'".format(package_name), stderr=subprocess.PIPE)
-    
+
   return out
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 054490b..2c56a13 100644
--- a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -463,10 +463,26 @@ class Script(object):
 
     return Script.stack_version_from_distro_select
 
+
+  def get_package_from_available(self, name, available_packages_in_repos):
+    """
+    This function matches package names with ${stack_version} placeholder to actual package names from
+    Ambari-managed repository.
+    Package names without ${stack_version} placeholder are returned as is.
+    """
+    if STACK_VERSION_PLACEHOLDER not in name:
+      return name
+    package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_'
+    package_regex = name.replace(STACK_VERSION_PLACEHOLDER, '(\d|{0})+'.format(package_delimiter))
+    for package in available_packages_in_repos:
+      if re.match(package_regex, package):
+        return package
+
+
   def format_package_name(self, name):
     from resource_management.libraries.functions.default import default
     """
-    This function replaces ${stack_version} placeholder into actual version.  If the package
+    This function replaces ${stack_version} placeholder with actual version.  If the package
     version is passed from the server, use that as an absolute truth.
     """
 
@@ -703,12 +719,15 @@ class Script(object):
       package_list_str = config['hostLevelParams']['package_list']
       agent_stack_retry_on_unavailability = bool(config['hostLevelParams']['agent_stack_retry_on_unavailability'])
       agent_stack_retry_count = int(config['hostLevelParams']['agent_stack_retry_count'])
-
+      try:
+        available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+      except Exception as err:
+        available_packages_in_repos = []
       if isinstance(package_list_str, basestring) and len(package_list_str) > 0:
         package_list = json.loads(package_list_str)
         for package in package_list:
           if self.check_package_condition(package):
-            name = self.format_package_name(package['name'])
+            name = self.get_package_from_available(package['name'], available_packages_in_repos)
             # HACK: On Windows, only install ambari-metrics packages using Choco Package Installer
             # TODO: Update this once choco packages for hadoop are created. This is because, service metainfo.xml support
             # <osFamily>any<osFamily> which would cause installation failure on Windows.

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index 975d6a6..43b2e08 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -41,7 +41,8 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
 
 /**
  * Models the data representation of an upgrade

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
index 8bfafd3..0f7ac72 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
@@ -31,7 +31,8 @@ import javax.persistence.TableGenerator;
 import javax.persistence.UniqueConstraint;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
 
 /**
  * The {@link UpgradeHistoryEntity} represents the version history of components

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index d6da0fc..a4a7a8c 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -22,6 +22,7 @@ import signal
 import re
 
 import ambari_simplejson as json
+import sys, traceback
 
 from ambari_commons.os_check import OSCheck
 from ambari_commons.str_utils import cbool, cint
@@ -36,6 +37,7 @@ from resource_management.libraries.functions.version import format_stack_version
 from resource_management.libraries.functions.repo_version_history \
     import read_actual_version_from_history_file, write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE
 from resource_management.libraries.functions import StackFeature
+from resource_management.libraries.functions import packages_analyzer
 from resource_management.libraries.functions.repository_util import create_repo_files, CommandRepository
 from resource_management.libraries.functions.stack_features import check_stack_feature
 from resource_management.libraries.resources.repository import Repository
@@ -352,8 +354,12 @@ class InstallPackages(Script):
       packages_installed_before = [package[0] for package in packages_installed_before]
       packages_were_checked = True
       filtered_package_list = self.filter_package_list(package_list)
+      try:
+        available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+      except Exception:
+        available_packages_in_repos = []
       for package in filtered_package_list:
-        name = self.format_package_name(package['name'])
+        name = self.get_package_from_available(package['name'], available_packages_in_repos)
         Package(name,
           action="upgrade", # this enables upgrading non-versioned packages, despite the fact they exist. Needed by 'mahout' which is non-version but have to be updated     
           retry_on_repo_unavailability=agent_stack_retry_on_unavailability,

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index e3ffae0..50d219c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -79,7 +79,7 @@ import org.apache.ambari.server.state.UpgradeState;
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
 import org.apache.ambari.server.utils.EventBusSynchronizer;
-import org.apache.hadoop.metrics2.sink.relocated.commons.lang.StringUtils;
+import org.apache.commons.lang.StringUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
index 5f5576e..3e90c64 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -61,8 +61,18 @@ class TestInstallPackages(RMFTestCase):
     arg.append(["pkg1", "1.0", "repo"])
     arg.append(["pkg2", "2.0", "repo2"])
 
+  @staticmethod
+  def _add_packages_available(command, arg):
+    arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+  @staticmethod
+  def _add_packages_lookUpYum(command, key, arg):
+    TestInstallPackages._add_packages_available(command, arg)
+
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@@ -71,12 +81,13 @@ class TestInstallPackages(RMFTestCase):
                             write_actual_version_to_history_file_mock,
                             read_actual_version_from_history_file_mock,
                             stack_versions_mock,
-                            put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+                            put_structured_out_mock,
+                            lookUpYumPackages, list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -91,21 +102,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
     )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
     )
@@ -140,6 +151,7 @@ class TestInstallPackages(RMFTestCase):
       command_json = json.load(f)
 
     command_json['roleParams']['base_urls'] = "[]"
+    del command_json['repositoryFile']
 
 
     allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
@@ -159,32 +171,33 @@ class TestInstallPackages(RMFTestCase):
                        'actual_version': VERSION_STUB})
     
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_normal_flow_sles(self, write_actual_version_to_history_file_mock,
                             read_actual_version_from_history_file_mock,
-                            stack_versions_mock, put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock, is_suse_family_mock):
+                            stack_versions_mock, put_structured_out_mock,
+                            lookUpZypperPackages, list_ambari_managed_repos_mock, is_suse_family_mock):
     is_suse_family_mock = True
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -199,21 +212,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -231,21 +244,21 @@ class TestInstallPackages(RMFTestCase):
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
   @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_exclude_existing_repo(self,  write_actual_version_to_history_file_mock,
+  def test_exclude_existing_repo(self, write_actual_version_to_history_file_mock,
                                  read_actual_version_from_history_file_mock,
                                  stack_versions_mock,
-                                 allInstalledPackages_mock, put_structured_out_mock,
+                                 lookUpYumPackages, put_structured_out_mock,
                                  is_redhat_family_mock, list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
     Script.stack_version_from_distro_select = VERSION_STUB
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=["HDP-UTILS-2.2.0.1-885"]
     is_redhat_family_mock.return_value = True
     self.executeScript("scripts/install_packages.py",
@@ -261,21 +274,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name='HDP-2.2.0.1-885',
+                              repo_file_name='ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
     )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url='http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
     )
@@ -337,21 +350,21 @@ class TestInstallPackages(RMFTestCase):
                       {'stack_id': 'HDP-2.2',
                       'installed_repository_version': VERSION_STUB,
                       'package_installation_result': 'FAIL'})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -363,14 +376,14 @@ class TestInstallPackages(RMFTestCase):
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.core.resources.packaging.Package")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_format_package_name(self,                                                                                    write_actual_version_to_history_file_mock,
+  def test_format_package_name(self, write_actual_version_to_history_file_mock,
                                read_actual_version_from_history_file_mock,
                                stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
+                               lookUpZypperPackages, put_structured_out_mock,
                                package_mock, is_suse_family_mock):
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
@@ -378,7 +391,7 @@ class TestInstallPackages(RMFTestCase):
       [VERSION_STUB]
     ]
     read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     is_suse_family_mock.return_value = True
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -393,21 +406,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -421,99 +434,30 @@ class TestInstallPackages(RMFTestCase):
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
-  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
-  @patch("resource_management.core.resources.packaging.Package")
-  @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
-  @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
-  @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
-  @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_format_package_name_specific(self, write_actual_version_to_history_file_mock,
-                               read_actual_version_from_history_file_mock,
-                               stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
-                               package_mock, is_suse_family_mock):
-    Script.stack_version_from_distro_select = VERSION_STUB
-    stack_versions_mock.side_effect = [
-      [],  # before installation attempt
-      [VERSION_STUB]
-    ]
-    read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
-    is_suse_family_mock.return_value = True
-
-    
-    config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_config.json"
-    with open(config_file, "r") as f:
-      command_json = json.load(f)
-
-    command_json['roleParams']['package_version'] = "2_2_0_1_889"
-
-
-    self.executeScript("scripts/install_packages.py",
-                       classname="InstallPackages",
-                       command="actionexecute",
-                       config_dict=command_json,
-                       target=RMFTestCase.TARGET_CUSTOM_ACTIONS,
-                       os_type=('Suse', '11', 'Final'),
-                       )
-    self.assertTrue(put_structured_out_mock.called)
-    self.assertEquals(put_structured_out_mock.call_args[0][0],
-                      {'package_installation_result': 'SUCCESS',
-                       'installed_repository_version': VERSION_STUB,
-                       'stack_id': 'HDP-2.2',
-                       'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
-                              base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
-                              action=['create'],
-                              components=[u'HDP-UTILS', 'main'],
-                              repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
-                              mirror_list=None,
-                              append_to_file=False,
-                              )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
-                              base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
-                              action=['create'],
-                              components=[u'HDP', 'main'],
-                              repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
-                              mirror_list=None,
-                              append_to_file=True,
-                              )
-    self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertNoMoreResources()
 
 
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.core.resources.packaging.Package")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_format_package_name_via_repositoryFile(self, write_actual_version_to_history_file_mock,
-                               read_actual_version_from_history_file_mock,
-                               stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
-                               package_mock, is_suse_family_mock):
+                                                  read_actual_version_from_history_file_mock,
+                                                  stack_versions_mock,
+                                                  lookUpZypperPackages, put_structured_out_mock,
+                                                  package_mock, is_suse_family_mock):
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
     read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     is_suse_family_mock.return_value = True
 
-    
+
     config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_repository_file.json"
     with open(config_file, "r") as f:
       command_json = json.load(f)
@@ -552,12 +496,15 @@ class TestInstallPackages(RMFTestCase):
                               append_to_file=True,
                               )
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
@@ -1106,21 +1053,23 @@ class TestInstallPackages(RMFTestCase):
     self.assertFalse(write_actual_version_to_history_file_mock.called)
 
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_normal_flow_rhel_with_command_repo(self,
-                            write_actual_version_to_history_file_mock,
-                            read_actual_version_from_history_file_mock,
-                            stack_versions_mock,
-                            put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+                                              write_actual_version_to_history_file_mock,
+                                              read_actual_version_from_history_file_mock,
+                                              stack_versions_mock,
+                                              put_structured_out_mock,
+                                              lookUpYumPackages,
+                                              list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -1155,11 +1104,14 @@ class TestInstallPackages(RMFTestCase):
                               append_to_file=True,
     )
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
index c6575b5..be010b3 100644
--- a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
+++ b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
@@ -49,7 +49,24 @@
         "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]",
         "script": "install_packages.py"
     }, 
-    "commandId": "14-1", 
+    "commandId": "14-1",
+    "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+            {
+                "repoName": "HDP-UTILS",
+                "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+                "repoId": "HDP-UTILS-1.1.0.20"
+            },
+            {
+                "repoName": "HDP",
+                "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+                "repoId": "HDP-2.2"
+            }
+        ]
+    },
     "clusterHostInfo": {
         "snamenode_host": [
             "0b3.vm"

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
index fda63e0..05fa204 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
@@ -69,11 +69,17 @@ class TestHBaseMaster(RMFTestCase):
 
     self.assertNoMoreResources()
 
-  def test_install_hbase_master_with_version(self):
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+  def test_install_hbase_master_with_version(self, lookUpYumPackages):
+    def _add_packages_available(command, key, arg):
+      arg.append(["hbase_2_3_0_1_1234", "1.0", "testrepo"])
+
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/hbase_with_phx.json"
     with open(config_file, "r") as f:
       json_content = json.load(f)
     version = '2.3.0.1-1234'
+
+    lookUpYumPackages.side_effect = _add_packages_available
     # the json file is not a "well formed" install command
     json_content['roleCommand'] = 'INSTALL'
     json_content['commandParams']['version'] = version
@@ -86,8 +92,9 @@ class TestHBaseMaster(RMFTestCase):
                        stack_version = self.STACK_VERSION,
                        target = RMFTestCase.TARGET_COMMON_SERVICES,
                        try_install=True,
+                       os_type=('Redhat', '6.4', 'Final'),
                        checked_call_mocks = [(0, "OK.", "")],
-    )
+                       )
 
     # only assert that the correct package is trying to be installed
     self.assertResourceCalled('Package', 'hbase_2_3_0_1_1234',

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
index 5147603..9979e9d 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
@@ -28,6 +28,18 @@
     "roleParams": {}, 
     "serviceName": "HIVE",
     "role": "HIVE_SERVER",
+    "repositoryFile": {
+      "stackName": "HDP",
+      "repoVersionId": 1,
+      "repoVersion": "2",
+      "repositories": [
+        {
+          "repoName": "HDP",
+          "baseUrl": "testurl",
+          "repoId": "testrepo"
+        }
+      ]
+    },
     "commandParams": {
         "command_timeout": "300", 
         "service_package_folder": "OOZIE",

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/utility/pom.xml
----------------------------------------------------------------------
diff --git a/utility/pom.xml b/utility/pom.xml
index 7d5eb93..918080e 100644
--- a/utility/pom.xml
+++ b/utility/pom.xml
@@ -67,6 +67,27 @@
         </configuration>
       </plugin>
       <plugin>
+        <groupId>org.vafer</groupId>
+        <artifactId>jdeb</artifactId>
+        <version>1.0.1</version>
+        <executions>
+          <execution>
+            <!--Stub execution on direct plugin call - workaround for ambari deb build process-->
+            <id>stub-execution</id>
+            <phase>none</phase>
+            <goals>
+              <goal>jdeb</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <skip>true</skip>
+          <attach>false</attach>
+          <submodules>false</submodules>
+          <controlDir>${project.basedir}/../src/main/package/deb/control</controlDir>
+        </configuration>
+      </plugin>
+      <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
         <configuration>
           <descriptors>


[05/10] ambari git commit: AMBARI-21183. Removal of INIT Repository State from Web Client (alexantonenko)

Posted by nc...@apache.org.
AMBARI-21183. Removal of INIT Repository State from Web Client (alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/12202a2f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/12202a2f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/12202a2f

Branch: refs/heads/trunk
Commit: 12202a2fd303e0d557a987f77f33387e17c9fb81
Parents: 64e3ad7
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue Jun 6 17:12:42 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Jun 6 17:12:42 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/app.js                           |  8 +++---
 .../main/admin/stack_and_upgrade_controller.js  |  6 ++---
 ambari-web/app/data/controller_route.js         |  2 +-
 .../models/stack_version/repository_version.js  |  2 +-
 .../stack_upgrade/upgrade_version_box_view.js   |  8 +++---
 .../upgrade_version_column_view.js              |  2 +-
 .../admin/stack_upgrade/upgrade_wizard_view.js  |  2 +-
 .../main/admin/stack_upgrade/versions_view.js   |  2 +-
 ambari-web/test/app_test.js                     | 10 +++----
 .../admin/stack_and_upgrade_controller_test.js  | 18 ++++++-------
 .../upgrade_version_box_view_test.js            | 28 ++++++++++----------
 .../stack_upgrade/upgrade_wizard_view_test.js   |  2 +-
 .../admin/stack_upgrade/version_view_test.js    |  6 ++---
 13 files changed, 48 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index c22d71c..2c638e4 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -56,7 +56,7 @@ module.exports = Em.Application.create({
   /**
    * state of stack upgrade process
    * states:
-   *  - INIT
+   *  - NOT_REQUIRED
    *  - PENDING
    *  - IN_PROGRESS
    *  - HOLDING
@@ -66,14 +66,14 @@ module.exports = Em.Application.create({
    *  - HOLDING_TIMEDOUT
    * @type {String}
    */
-  upgradeState: 'INIT',
+  upgradeState: 'NOT_REQUIRED',
 
   /**
    * Check if upgrade is in INIT state
    * 'INIT' is set on upgrade start and when it's finished
    * @type {boolean}
    */
-  upgradeInit: Em.computed.equal('upgradeState', 'INIT'),
+  upgradeInit: Em.computed.equal('upgradeState', 'NOT_REQUIRED'),
 
   /**
    * flag is true when upgrade process is running
@@ -146,7 +146,7 @@ module.exports = Em.Application.create({
     // When Upgrade running(not suspended) only operations related to upgrade should be allowed
     if ((!this.get('upgradeSuspended') && !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK')) &&
         !App.get('supports.opsDuringRollingUpgrade') &&
-        !['INIT', 'COMPLETED'].contains(this.get('upgradeState')) ||
+        !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
         !App.auth){
       return false;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index a676f7429..91b5ecd 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -1705,7 +1705,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
   },
 
   /**
-   * reset upgradeState to INIT when upgrade is COMPLETED
+   * reset upgradeState to NOT_REQUIRED when upgrade is COMPLETED
    * and clean auxiliary data
    */
   finish: function () {
@@ -1713,7 +1713,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     this.setDBProperties({
       fromVersion: undefined,
       upgradeId: undefined,
-      upgradeState: 'INIT',
+      upgradeState: 'NOT_REQUIRED',
       upgradeVersion: undefined,
       currentVersion: undefined,
       upgradeTypeDisplayName: undefined,
@@ -1730,7 +1730,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     if (upgradeVersion && upgradeVersion[0]) {
       App.set('currentStackVersion', upgradeVersion[0]);
     }
-    App.set('upgradeState', 'INIT');
+    App.set('upgradeState', 'NOT_REQUIRED');
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/data/controller_route.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/controller_route.js b/ambari-web/app/data/controller_route.js
index 5f7c499..13d0380 100644
--- a/ambari-web/app/data/controller_route.js
+++ b/ambari-web/app/data/controller_route.js
@@ -71,7 +71,7 @@ module.exports = [
   },
   {
     wizardControllerName: App.router.get('mainAdminStackAndUpgradeController.name'),
-    route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') == 'INIT' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
+    route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') === 'NOT_REQUIRED' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
   },
   {
     wizardControllerName: App.router.get('widgetWizardController.name'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/models/stack_version/repository_version.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/repository_version.js b/ambari-web/app/models/stack_version/repository_version.js
index d5bc64d..5ecfdd1 100644
--- a/ambari-web/app/models/stack_version/repository_version.js
+++ b/ambari-web/app/models/stack_version/repository_version.js
@@ -38,7 +38,7 @@ App.RepositoryVersion = DS.Model.extend({
    * status used until corresponding stack version get created
    * @type {string}
    */
-  defaultStatus: 'INIT',
+  defaultStatus: 'NOT_REQUIRED',
 
   /**
    * @type {boolean}

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
index bb0cc81..1af7d5c 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
@@ -57,7 +57,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
   isUpgrading: function () {
     return (this.get('controller.upgradeVersion') === this.get('content.displayName') ||
             this.get('controller.fromVersion') === this.get('content.repositoryVersion'))
-            && App.get('upgradeState') !== 'INIT';
+            && App.get('upgradeState') !== 'NOT_REQUIRED';
   }.property('App.upgradeState', 'content.displayName', 'controller.upgradeVersion'),
 
   isRepoUrlsEditDisabled: function () {
@@ -119,7 +119,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
       text: Em.I18n.t('common.current'),
       class: 'label label-success'
     },
-    'INIT': {
+    'NOT_REQUIRED': {
       isButton: true,
       text: Em.I18n.t('admin.stackVersions.version.installNow'),
       action: 'installRepoVersionConfirmation'
@@ -170,7 +170,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
     if (['INSTALLING', 'CURRENT'].contains(status)) {
       element.setProperties(statePropertiesMap[status]);
     }
-    else if (status === 'INIT') {
+    else if (status === 'NOT_REQUIRED') {
       requestInProgressRepoId && requestInProgressRepoId == this.get('content.id') ? element.setProperties(statePropertiesMap['LOADING']) : element.setProperties(statePropertiesMap[status]);
       element.set('isDisabled', this.isDisabledOnInit());
     }
@@ -245,7 +245,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
   ),
 
   /**
-   * check if actions of INIT stack version disabled
+   * check if actions of NOT_REQUIRED stack version disabled
    * @returns {boolean}
    */
   isDisabledOnInit: function() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
index 4ce07f2..91381e7 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
@@ -73,7 +73,7 @@ App.UpgradeVersionColumnView = App.UpgradeVersionBoxView.extend({
       text: Em.I18n.t('common.current'),
       class: 'label label-success'
     },
-    'INIT': {
+    'NOT_REQUIRED': {
       isButton: true,
       text: Em.I18n.t('common.install'),
       action: 'installRepoVersionConfirmation'

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
index bcb1ad7..3b269a0 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
@@ -123,7 +123,7 @@ App.upgradeWizardView = Em.View.extend({
    */
   noActiveItem: function () {
     return (Em.isNone(this.get('failedItem')) && Em.isNone(this.get('runningItem')) && Em.isNone(this.get('manualItem'))) &&
-      !['INIT', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
+      !['NOT_REQUIRED', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
   }.property('failedItem', 'runningItem', 'manualItem', 'App.upgradeState'),
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
index c317465..6077344 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
@@ -160,7 +160,7 @@ App.MainAdminStackVersionsView = Em.View.extend({
             return stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) < 1;
           }
         } else if (filter.get('value') === 'NOT_INSTALLED') {
-          return ['INIT', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
+          return ['NOT_REQUIRED', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
         } else {
           return status === filter.get('value');
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/app_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js
index c87215f..2812b7d 100644
--- a/ambari-web/test/app_test.js
+++ b/ambari-web/test/app_test.js
@@ -443,7 +443,7 @@ describe('App', function () {
   describe('#upgradeSuspended', function () {
     var cases = [
       {
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         isSuspended: false,
         upgradeSuspended: false
       },
@@ -480,7 +480,7 @@ describe('App', function () {
 
     var cases = [
       {
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         isSuspended: false,
         upgradeAborted: false
       },
@@ -516,7 +516,7 @@ describe('App', function () {
   describe('#wizardIsNotFinished', function () {
     var cases = [
       {
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         wizardIsNotFinished: false
       },
       {
@@ -549,7 +549,7 @@ describe('App', function () {
   describe("#upgradeHolding", function () {
     var cases = [
       {
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         upgradeAborted: false,
         upgradeHolding: false
       },
@@ -564,7 +564,7 @@ describe('App', function () {
         upgradeHolding: true
       },
       {
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         upgradeAborted: true,
         upgradeHolding: true
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 4585991..b87714e 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -98,9 +98,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
 
     it("state not ABORTED", function() {
       this.mock.returns(false);
-      controller.set('upgradeData', { Upgrade: {request_status: 'INIT'}});
+      controller.set('upgradeData', { Upgrade: {request_status: 'NOT_REQUIRED'}});
       controller.propertyDidChange('requestStatus');
-      expect(controller.get('requestStatus')).to.equal('INIT');
+      expect(controller.get('requestStatus')).to.equal('NOT_REQUIRED');
     });
 
     it("upgradeData is null", function() {
@@ -235,7 +235,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       controller.updateUpgradeData.restore();
       controller.setDBProperty.restore();
       controller.finish.restore();
-      App.set('upgradeState', 'INIT');
+      App.set('upgradeState', 'NOT_REQUIRED');
     });
 
     it("correct data", function() {
@@ -1197,7 +1197,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
   describe("#installRepoVersionSuccess()", function() {
     var mock = Em.Object.create({
       id: 1,
-      defaultStatus: 'INIT',
+      defaultStatus: 'NOT_REQUIRED',
       stackVersion: {}
     });
     beforeEach(function () {
@@ -3133,7 +3133,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       expect(controller.setDBProperties.calledWith({
         fromVersion: undefined,
         upgradeId: undefined,
-        upgradeState: 'INIT',
+        upgradeState: 'NOT_REQUIRED',
         upgradeVersion: undefined,
         currentVersion: undefined,
         upgradeTypeDisplayName: undefined,
@@ -3155,9 +3155,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
     });
 
-    it("upgradeState should be INIT", function() {
+    it("upgradeState should be NOT_REQUIRED", function() {
       controller.finish();
-      expect(App.get('upgradeState')).to.be.equal('INIT');
+      expect(App.get('upgradeState')).to.be.equal('NOT_REQUIRED');
     });
 
     it("currentStackVersion should be set", function() {
@@ -3265,7 +3265,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
               ClusterStackVersions: {
                 version: '2.3',
                 stack: 'HDP',
-                state: 'INIT'
+                state: 'NOT_REQUIRED'
               },
               repository_versions: [
                 {
@@ -3281,7 +3281,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
               ClusterStackVersions: {
                 version: '2.2',
                 stack: 'HDP',
-                state: 'INIT'
+                state: 'NOT_REQUIRED'
               },
               repository_versions: [
                 {

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
index 31aa796..b5738a0 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
@@ -50,7 +50,7 @@ describe('App.UpgradeVersionBoxView', function () {
       view.set('controller.fromVersion', 'HDP-1');
     });
     afterEach(function () {
-      App.set('upgradeState', 'INIT');
+      App.set('upgradeState', 'NOT_REQUIRED');
     });
     it("wrong version", function () {
       App.set('upgradeState', 'IN_PROGRESS');
@@ -74,15 +74,15 @@ describe('App.UpgradeVersionBoxView', function () {
       view.propertyDidChange('isUpgrading');
       expect(view.get('isUpgrading')).to.be.true;
     });
-    it("upgradeState INIT", function () {
-      App.set('upgradeState', 'INIT');
+    it("upgradeState NOT_REQUIRED", function () {
+      App.set('upgradeState', 'NOT_REQUIRED');
       view.set('controller.upgradeVersion', 'HDP-2.2.2');
       view.set('content.displayName', 'HDP-2.2.2');
       view.propertyDidChange('isUpgrading');
       expect(view.get('isUpgrading')).to.be.false;
     });
-    it("upgradeState INIT and wrong version", function () {
-      App.set('upgradeState', 'INIT');
+    it("upgradeState NOT_REQUIRED and wrong version", function () {
+      App.set('upgradeState', 'NOT_REQUIRED');
       view.set('controller.upgradeVersion', 'HDP-2.2.2');
       view.set('content.displayName', 'HDP-2.2.1');
       view.propertyDidChange('isUpgrading');
@@ -449,11 +449,11 @@ describe('App.UpgradeVersionBoxView', function () {
       },
       {
         inputData: {
-          'content.status': 'INIT',
+          'content.status': 'NOT_REQUIRED',
           'controller.requestInProgress': false,
           'parentView.repoVersions': [
             Em.Object.create({
-              status: 'INIT'
+              status: 'NOT_REQUIRED'
             })
           ]
         },
@@ -462,20 +462,20 @@ describe('App.UpgradeVersionBoxView', function () {
           this.initMock.returns(false);
         },
         expected: {
-          status: 'INIT',
+          status: 'NOT_REQUIRED',
           isButton: true,
           buttons: [],
           isDisabled: true
         },
-        title: 'INIT state, no admin access, no requests in progress'
+        title: 'NOT_REQUIRED state, no admin access, no requests in progress'
       },
       {
         inputData: {
-          'content.status': 'INIT',
+          'content.status': 'NOT_REQUIRED',
           'controller.requestInProgress': true,
           'parentView.repoVersions': [
             Em.Object.create({
-              status: 'INIT'
+              status: 'NOT_REQUIRED'
             })
           ]
         },
@@ -484,12 +484,12 @@ describe('App.UpgradeVersionBoxView', function () {
           this.initMock.returns(true);
         },
         expected: {
-          status: 'INIT',
+          status: 'NOT_REQUIRED',
           isButton: true,
           buttons: [],
           isDisabled: true
         },
-        title: 'INIT state, no admin access, request in progress, not installation'
+        title: 'NOT_REQUIRED state, no admin access, request in progress, not installation'
       },
       {
         inputData: {
@@ -1039,7 +1039,7 @@ describe('App.UpgradeVersionBoxView', function () {
         title: 'upgrading just started'
       },
       {
-        status: 'INIT',
+        status: 'NOT_REQUIRED',
         isUpgrading: false,
         isRepoUrlsEditDisabled: false,
         title: 'neither upgrading nor installing packages'

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index 075bcc8..7ae785c 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -322,7 +322,7 @@ describe('App.upgradeWizardView', function () {
           failedItem: null,
           runningItem: null,
           manualItem: null,
-          upgradeState: 'INIT'
+          upgradeState: 'NOT_REQUIRED'
         },
         result: false
       },

http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
index 651c361..cf66165 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
@@ -44,7 +44,7 @@ describe('App.mainAdminStackVersionsView', function () {
   describe("#filterBy()", function () {
     var versions = [
         Em.Object.create({
-          status: "INIT",
+          status: "NOT_REQUIRED",
           repositoryVersion: "2.2.1.1"
         }),
         Em.Object.create({
@@ -88,7 +88,7 @@ describe('App.mainAdminStackVersionsView', function () {
           }),
           filteredVersions: [
             Em.Object.create({
-              status: "INIT",
+              status: "NOT_REQUIRED",
               repositoryVersion: "2.2.1.1"
             }),
             Em.Object.create({
@@ -128,7 +128,7 @@ describe('App.mainAdminStackVersionsView', function () {
           }),
           filteredVersions: [
             Em.Object.create({
-              status: "INIT",
+              status: "NOT_REQUIRED",
               repositoryVersion: "2.2.1.1"
             }),
             Em.Object.create({


[10/10] ambari git commit: Merge branch 'branch-feature-AMBARI-12556' into trunk

Posted by nc...@apache.org.
Merge branch 'branch-feature-AMBARI-12556' into trunk


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/acc12fb7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/acc12fb7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/acc12fb7

Branch: refs/heads/trunk
Commit: acc12fb7232c8bcd007fe38a942209b853ce3618
Parents: 8d129d4 382da97
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 12 12:48:52 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Jun 12 12:48:52 2017 -0400

----------------------------------------------------------------------
 .../test/python/ambari_agent/TestHostInfo.py    | 107 ++++++++++
 .../libraries/functions/conf_select.py          |   1 -
 .../libraries/functions/packages_analyzer.py    |  53 ++++-
 .../libraries/script/script.py                  |  25 ++-
 .../actionmanager/ExecutionCommandWrapper.java  |  65 +++---
 .../ambari/server/agent/ExecutionCommand.java   |  57 ++++--
 .../AmbariCustomCommandExecutionHelper.java     |   4 +-
 .../AmbariManagementControllerImpl.java         |   2 -
 .../ambari/server/orm/dao/HostVersionDAO.java   |  16 ++
 .../server/orm/entities/HostVersionEntity.java  |   5 +
 .../ServiceComponentDesiredStateEntity.java     |   2 +-
 .../upgrades/FinalizeUpgradeAction.java         |  57 +++++-
 .../server/state/RepositoryVersionState.java    |  31 ++-
 .../apache/ambari/server/state/ServiceImpl.java |   2 +-
 .../server/upgrade/UpgradeCatalog300.java       |  13 +-
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  |   2 +-
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |   2 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |   2 +-
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |   2 +-
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql |   2 +-
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |   2 +-
 .../STORM/0.9.1/package/scripts/params_linux.py |   2 -
 .../1.0.1.3.0/package/scripts/params_linux.py   |   2 -
 .../custom_actions/scripts/install_packages.py  |  25 ++-
 .../AmbariCustomCommandExecutionHelperTest.java |  11 +-
 .../upgrades/UpgradeActionTest.java             | 109 ++++++++--
 .../custom_actions/TestInstallPackages.py       | 202 +++++++------------
 .../configs/install_packages_config.json        |  19 +-
 .../stacks/2.0.6/HBASE/test_hbase_master.py     |  11 +-
 .../stacks/2.0.6/configs/hbase_with_phx.json    |  12 ++
 ambari-web/app/app.js                           |   8 +-
 .../main/admin/stack_and_upgrade_controller.js  |   6 +-
 ambari-web/app/data/controller_route.js         |   2 +-
 ambari-web/app/messages.js                      |   4 +-
 .../models/stack_version/repository_version.js  |   2 +-
 .../stack_upgrade/upgrade_version_box_view.js   |   8 +-
 .../upgrade_version_column_view.js              |   2 +-
 .../admin/stack_upgrade/upgrade_wizard_view.js  |   2 +-
 .../main/admin/stack_upgrade/versions_view.js   |   2 +-
 ambari-web/test/app_test.js                     |  10 +-
 .../admin/stack_and_upgrade_controller_test.js  |  18 +-
 .../upgrade_version_box_view_test.js            |  28 +--
 .../stack_upgrade/upgrade_wizard_view_test.js   |   2 +-
 .../admin/stack_upgrade/version_view_test.js    |   6 +-
 utility/pom.xml                                 |  21 ++
 45 files changed, 650 insertions(+), 316 deletions(-)
----------------------------------------------------------------------



[04/10] ambari git commit: Merge branch 'trunk' into branch-feature-AMBARI-12556

Posted by nc...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/64e3ad77
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/64e3ad77
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/64e3ad77

Branch: refs/heads/trunk
Commit: 64e3ad77685dd934324947225889e76429ad5813
Parents: cd3fb85 601a7cd
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Jun 5 15:43:28 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Jun 5 15:43:28 2017 -0400

----------------------------------------------------------------------
 .../scripts/controllers/users/UsersShowCtrl.js  |  13 ++
 .../ui/admin-web/app/views/users/show.html      |   5 +-
 .../src/main/python/ambari_agent/Controller.py  |   6 +-
 ambari-server/conf/unix/ambari.properties       |   4 +
 ambari-server/docs/configuration/index.md       |   5 +-
 .../ambari/server/agent/HeartBeatHandler.java   |  18 ++-
 .../server/configuration/Configuration.java     |  31 ++++-
 .../AmbariManagementControllerImpl.java         | 126 ++++++++++++++++++-
 .../server/controller/KerberosHelperImpl.java   |   6 +
 .../internal/ConfigGroupResourceProvider.java   |  41 ++++--
 .../internal/HostResourceProvider.java          |   2 +-
 .../listeners/tasks/TaskStatusListener.java     |   2 +-
 .../scheduler/ExecutionSchedulerImpl.java       |   2 +
 .../security/InternalSSLSocketFactory.java      | 112 +++++++++++++++++
 .../InternalSSLSocketFactoryNonTrusting.java    |  49 ++++++++
 .../InternalSSLSocketFactoryTrusting.java       |  48 +++++++
 .../kerberos/ADKerberosOperationHandler.java    |  34 +++--
 .../KerberosKDCSSLConnectionException.java      |  45 +++++++
 .../kerberos/TrustingSSLSocketFactory.java      | 101 ---------------
 .../server/state/cluster/ClusterImpl.java       |  13 +-
 .../svccomphost/ServiceComponentHostImpl.java   |   2 +-
 .../server/upgrade/UpgradeCatalog251.java       |  45 ++++++-
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |   9 +-
 .../OOZIE/4.2.0.3.0/package/scripts/oozie.py    |   9 +-
 .../internal/UpgradeResourceProviderTest.java   |   1 -
 .../ADKerberosOperationHandlerTest.java         |  96 +++++++++++++-
 .../server/upgrade/UpgradeCatalog251Test.java   |  13 +-
 .../main/service/reassign/step3_controller.js   |   1 +
 .../app/controllers/wizard/step8_controller.js  |   3 +-
 .../app/styles/theme/bootstrap-ambari.css       |  18 +--
 .../stack_upgrade/upgrade_version_box_view.js   |   4 +-
 .../upgrade_version_box_view_test.js            |   4 +-
 .../view/filebrowser/DownloadService.java       |   9 +-
 .../ambari/view/hive2/actor/DeathWatch.java     |   5 +-
 .../view/hive2/client/NonPersistentCursor.java  |   4 +-
 .../ambari/view/hive20/actor/DeathWatch.java    |   7 +-
 .../view/hive20/client/NonPersistentCursor.java |   4 +-
 docs/src/site/site.xml                          |   2 +-
 38 files changed, 690 insertions(+), 209 deletions(-)
----------------------------------------------------------------------



[09/10] ambari git commit: Merge branch 'trunk' into branch-feature-AMBARI-12556

Posted by nc...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/382da979
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/382da979
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/382da979

Branch: refs/heads/trunk
Commit: 382da97990dfe673bb6d4d69590444ddbbb455eb
Parents: 871f85b 8d129d4
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 12 12:44:40 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Jun 12 12:44:40 2017 -0400

----------------------------------------------------------------------
 .../org/apache/ambari/tools/zk/ZkMigrator.java  |  44 +-
 .../apache/ambari/tools/zk/ZkMigratorTest.java  |  60 +-
 .../main/python/ambari_commons/inet_utils.py    |  32 ++
 .../src/main/python/ambari_commons/os_check.py  |   6 +
 .../ambari_commons/resources/os_family.json     |  10 +
 .../core/providers/__init__.py                  |  19 +-
 .../core/resources/zkmigrator.py                |  17 +-
 .../libraries/providers/__init__.py             |   3 -
 .../InfraKerberosHostValidator.java             |  54 --
 .../InfraRuleBasedAuthorizationPlugin.java      | 542 -------------------
 .../InfraUserRolesLookupStrategy.java           |  49 --
 .../security/InfraKerberosHostValidator.java    |  54 ++
 .../InfraRuleBasedAuthorizationPlugin.java      | 542 +++++++++++++++++++
 .../security/InfraUserRolesLookupStrategy.java  |  49 ++
 ambari-logsearch/docker/Dockerfile              |   6 +-
 ambari-metrics/ambari-metrics-common/pom.xml    |   5 +
 .../timeline/AbstractTimelineMetricsSink.java   |  64 ++-
 .../sink/timeline/AppCookieManager.java         | 219 ++++++++
 .../sink/timeline/AppCookieManagerTest.java     |  52 ++
 .../ambari-metrics-host-aggregator/pom.xml      |  30 +-
 .../AbstractMetricPublisherThread.java          | 134 -----
 .../aggregator/AggregatedMetricsPublisher.java  | 101 ----
 .../host/aggregator/AggregatorApplication.java  |  98 ++--
 .../host/aggregator/AggregatorWebService.java   |   2 +-
 .../host/aggregator/RawMetricsPublisher.java    |  60 --
 .../host/aggregator/TimelineMetricsHolder.java  |  26 +-
 .../sink/timeline/AbstractMetricPublisher.java  | 169 ++++++
 .../timeline/AggregatedMetricsPublisher.java    | 103 ++++
 .../sink/timeline/RawMetricsPublisher.java      |  65 +++
 .../aggregator/AggregatorApplicationTest.java   |  55 ++
 .../aggregator/AggregatorWebServiceTest.java    | 135 +++++
 .../aggregator/TimelineMetricsHolderTest.java   | 107 ++++
 .../timeline/AbstractMetricPublisherTest.java   |  82 +++
 .../AggregatedMetricsPublisherTest.java         | 154 ++++++
 .../sink/timeline/RawMetricsPublisherTest.java  | 151 ++++++
 .../src/main/python/core/aggregator.py          |   6 +-
 .../src/main/python/core/controller.py          |   2 +-
 ambari-project/pom.xml                          |   5 +
 .../security/kerberos/kerberos_descriptor.md    |   5 +-
 ambari-server/pom.xml                           |  24 +-
 .../server/KdcServerConnectionVerification.java |   2 +-
 .../ambari/server/StateRecoveryManager.java     |   2 +-
 .../actionmanager/ActionDBAccessorImpl.java     |   6 +-
 .../server/actionmanager/ActionManager.java     |   8 +-
 .../server/actionmanager/ActionScheduler.java   |  18 +-
 .../ambari/server/actionmanager/Stage.java      |   6 +-
 .../apache/ambari/server/agent/ActionQueue.java |   2 +-
 .../ambari/server/agent/AgentRequests.java      |  10 +-
 .../ambari/server/agent/ExecutionCommand.java   |   6 +-
 .../ambari/server/agent/HeartBeatHandler.java   |  17 +-
 .../ambari/server/agent/HeartbeatMonitor.java   |  14 +-
 .../ambari/server/agent/HeartbeatProcessor.java |   4 +-
 .../apache/ambari/server/agent/HostInfo.java    |   2 +-
 .../apache/ambari/server/agent/Register.java    |   2 +-
 .../ambari/server/agent/rest/AgentResource.java |  18 +-
 .../ambari/server/api/query/QueryImpl.java      |   4 +-
 .../server/api/rest/BootStrapResource.java      |   6 +-
 .../server/api/services/AmbariMetaInfo.java     |  12 +-
 .../ambari/server/api/services/BaseRequest.java |   2 +-
 .../api/services/PersistKeyValueService.java    |  16 +-
 .../services/parsers/JsonRequestBodyParser.java |   2 +-
 .../StackAdvisorBlueprintProcessor.java         |   2 +-
 .../commands/StackAdvisorCommand.java           |  10 +-
 .../views/ViewDataMigrationService.java         |   6 +-
 .../server/bootstrap/BSHostStatusCollector.java |  12 +-
 .../ambari/server/bootstrap/BSRunner.java       |  14 +-
 .../ambari/server/bootstrap/BootStrapImpl.java  |   6 +-
 .../server/checks/AbstractCheckDescriptor.java  |   7 -
 .../checks/ServiceCheckValidityCheck.java       |   9 +-
 .../server/checks/UpgradeCheckRegistry.java     |   4 +-
 .../server/configuration/Configuration.java     |  17 +
 .../controller/AmbariActionExecutionHelper.java |   9 +-
 .../AmbariCustomCommandExecutionHelper.java     |  17 +-
 .../server/controller/AmbariHandlerList.java    |   2 +-
 .../AmbariManagementControllerImpl.java         |  96 ++--
 .../ambari/server/controller/AmbariServer.java  |   2 +-
 .../server/controller/ControllerModule.java     |   2 +-
 .../server/controller/KerberosHelperImpl.java   |  21 +-
 .../internal/AbstractPropertyProvider.java      |   4 +-
 .../internal/AbstractProviderModule.java        |  15 +-
 .../internal/ActionResourceProvider.java        |   3 +-
 .../controller/internal/AppCookieManager.java   |   8 +-
 .../controller/internal/BaseProvider.java       |  10 +-
 .../BlueprintConfigurationProcessor.java        |  28 +-
 .../internal/ClientConfigResourceProvider.java  |   2 +-
 .../internal/ClusterControllerImpl.java         |   4 +-
 .../internal/ClusterResourceProvider.java       |   6 +-
 ...atibleRepositoryVersionResourceProvider.java |   2 +-
 .../internal/ComponentResourceProvider.java     |   6 +-
 .../internal/ConfigGroupResourceProvider.java   |  15 +-
 .../internal/GroupResourceProvider.java         |   4 +-
 .../internal/HostComponentResourceProvider.java |   2 +-
 .../internal/HostResourceProvider.java          |  12 +-
 .../controller/internal/HostStatusHelper.java   |   2 +-
 .../internal/JobResourceProvider.java           |  12 +-
 .../internal/MemberResourceProvider.java        |   4 +-
 .../PreUpgradeCheckResourceProvider.java        |   8 +-
 .../internal/RequestResourceProvider.java       |   6 +-
 .../internal/RequestStageContainer.java         |   2 +-
 .../internal/ServiceResourceProvider.java       |  53 +-
 .../internal/TaskAttemptResourceProvider.java   |   6 +-
 .../controller/internal/URLStreamProvider.java  |  10 +-
 .../internal/UpgradeResourceProvider.java       |   5 -
 .../internal/UserResourceProvider.java          |   4 +-
 .../internal/WidgetLayoutResourceProvider.java  |   4 +-
 .../internal/WorkflowResourceProvider.java      |   6 +-
 .../server/controller/jmx/JMXMetricHolder.java  |   2 +-
 .../logging/LogSearchDataRetrievalService.java  |   4 +-
 .../logging/LoggingRequestHelperImpl.java       |  15 +-
 .../logging/LoggingSearchPropertyProvider.java  |   4 +-
 .../metrics/MetricsCollectorHAManager.java      |   2 +-
 .../metrics/MetricsDownsamplingMethod.java      |   5 +-
 .../metrics/timeline/AMSPropertyProvider.java   |   2 +-
 .../metrics/timeline/MetricsRequestHelper.java  |  20 +-
 .../timeline/cache/TimelineMetricCache.java     |  28 +-
 .../cache/TimelineMetricCacheEntryFactory.java  |  46 +-
 .../cache/TimelineMetricsCacheSizeOfEngine.java |   6 +-
 .../controller/utilities/KerberosChecker.java   |   2 +-
 .../ServiceCalculatedStateFactory.java          |   2 +-
 .../server/credentialapi/CredentialUtil.java    |   2 +-
 .../customactions/ActionDefinitionManager.java  |   6 +-
 .../alerts/AlertHashInvalidationListener.java   |   2 +-
 .../alerts/AlertLifecycleListener.java          |   2 +-
 .../alerts/AlertMaintenanceModeListener.java    |   2 +-
 .../AlertServiceComponentHostListener.java      |   2 +-
 .../alerts/AlertServiceStateListener.java       |   2 +-
 .../alerts/AlertStateChangedListener.java       |   2 +-
 .../upgrade/HostVersionOutOfSyncListener.java   |   2 -
 .../CachedRoleCommandOrderProvider.java         |   2 +-
 .../server/metadata/RoleCommandOrder.java       |   7 +-
 .../system/impl/AmbariPerformanceMonitor.java   |   4 +-
 .../system/impl/DatabaseMetricsSource.java      |   2 +-
 .../metrics/system/impl/JvmMetricsSource.java   |   2 +-
 .../system/impl/MetricsConfiguration.java       |   2 +-
 .../metrics/system/impl/MetricsServiceImpl.java |   2 +-
 .../dispatchers/AlertScriptDispatcher.java      |  45 +-
 .../ambari/server/orm/DBAccessorImpl.java       |   2 +-
 .../server/orm/dao/AlertDefinitionDAO.java      |   2 +-
 .../ambari/server/orm/dao/HostVersionDAO.java   |   6 +-
 .../ambari/server/orm/dao/ServiceConfigDAO.java |   1 -
 .../orm/entities/RepositoryVersionEntity.java   |   2 +-
 .../orm/helpers/dbms/GenericDbmsHelper.java     |   4 +-
 .../server/resources/ResourceManager.java       |  11 +-
 .../server/resources/api/rest/GetResource.java  |   9 +-
 .../scheduler/AbstractLinearExecutionJob.java   |   6 +-
 .../scheduler/ExecutionScheduleManager.java     |  12 +-
 .../scheduler/ExecutionSchedulerImpl.java       |   4 +-
 .../server/security/CertificateManager.java     |   6 +-
 .../ambari/server/security/SecurityFilter.java  |  12 +-
 .../AmbariLdapBindAuthenticator.java            |   2 +-
 .../AmbariPamAuthenticationProvider.java        |   2 +-
 .../jwt/JwtAuthenticationFilter.java            |   2 +-
 .../encryption/MasterKeyServiceImpl.java        |   8 +-
 .../unsecured/rest/CertificateDownload.java     |   6 +-
 .../unsecured/rest/CertificateSign.java         |   6 +-
 .../security/unsecured/rest/ConnectionInfo.java |   6 +-
 .../kerberos/ADKerberosOperationHandler.java    |   6 +-
 .../kerberos/CreateKeytabFilesServerAction.java |   6 +-
 .../kerberos/DestroyPrincipalsServerAction.java |   2 +-
 .../kerberos/IPAKerberosOperationHandler.java   |  18 +-
 .../kerberos/MITKerberosOperationHandler.java   |   2 +-
 .../serveraction/upgrades/ConfigureAction.java  |   2 +-
 .../upgrades/FinalizeUpgradeAction.java         |   4 +-
 .../upgrades/UpdateDesiredStackAction.java      |   2 +-
 .../ambari/server/stack/ExtensionDirectory.java |   2 +-
 .../ambari/server/stack/ExtensionModule.java    |   4 +-
 .../ambari/server/stack/MasterHostResolver.java |   2 +-
 .../ambari/server/stack/ServiceDirectory.java   |   2 +-
 .../ambari/server/stack/ServiceModule.java      |   4 +-
 .../ambari/server/stack/StackDirectory.java     |   7 +-
 .../ambari/server/stack/StackManager.java       |   9 +-
 .../apache/ambari/server/stack/StackModule.java |  20 +-
 .../ambari/server/stageplanner/RoleGraph.java   |  51 +-
 .../apache/ambari/server/state/CheckHelper.java |  39 +-
 .../org/apache/ambari/server/state/Cluster.java |   6 +-
 .../ambari/server/state/ConfigFactory.java      |   8 -
 .../server/state/ServiceComponentImpl.java      |  21 +-
 .../apache/ambari/server/state/ServiceImpl.java |  21 +-
 .../apache/ambari/server/state/StackInfo.java   |   2 +-
 .../ambari/server/state/UpgradeContext.java     |   2 -
 .../ambari/server/state/action/ActionImpl.java  |  23 +-
 .../ambari/server/state/alert/AlertUri.java     |   2 +-
 .../server/state/cluster/ClusterImpl.java       |  45 +-
 .../server/state/cluster/ClustersImpl.java      |   6 +-
 .../ambari/server/state/host/HostImpl.java      |  32 +-
 .../state/kerberos/KerberosDescriptor.java      |  51 ++
 .../kerberos/VariableReplacementHelper.java     |  23 +-
 .../server/state/stack/ConfigUpgradePack.java   |   2 +-
 .../ambari/server/state/stack/OsFamily.java     |  12 +
 .../state/stack/StackRoleCommandOrder.java      |   2 +-
 .../ambari/server/state/stack/UpgradePack.java  |   2 +-
 .../state/stack/upgrade/ColocatedGrouping.java  |   2 +-
 .../upgrade/ConfigUpgradeChangeDefinition.java  |   2 +-
 .../state/stack/upgrade/ConfigureTask.java      |   2 +-
 .../state/stack/upgrade/HostOrderGrouping.java  |   2 +-
 .../stack/upgrade/RepositoryVersionHelper.java  |   4 +-
 .../state/stack/upgrade/RestartGrouping.java    |   2 +-
 .../stack/upgrade/ServiceCheckGrouping.java     |   2 +-
 .../state/stack/upgrade/StartGrouping.java      |   2 +-
 .../state/stack/upgrade/StopGrouping.java       |   2 +-
 .../state/stack/upgrade/TaskWrapperBuilder.java |   2 +-
 .../svccomphost/ServiceComponentHostImpl.java   |  23 +-
 .../server/topology/BlueprintValidatorImpl.java |   2 +-
 .../topology/tasks/ConfigureClusterTask.java    |   2 +-
 .../server/topology/tasks/TopologyHostTask.java |   4 +-
 .../validators/ClusterConfigTypeValidator.java  |   2 +-
 .../server/upgrade/AbstractUpgradeCatalog.java  |   2 +-
 .../server/upgrade/SchemaUpgradeHelper.java     |   2 +-
 .../server/upgrade/UpgradeCatalog222.java       |   2 +-
 .../server/upgrade/UpgradeCatalog250.java       |  39 +-
 .../apache/ambari/server/utils/AmbariPath.java  |   2 +-
 .../ambari/server/utils/CommandUtils.java       |   2 +-
 .../ambari/server/utils/SecretReference.java    |   2 +-
 .../ambari/server/utils/ShellCommandUtil.java   |   6 +-
 .../apache/ambari/server/utils/StageUtils.java  |   6 +-
 .../server/view/HttpImpersonatorImpl.java       |   2 +-
 .../server/view/ViewAmbariStreamProvider.java   |   2 +-
 .../ambari/server/view/ViewContextImpl.java     |   6 +-
 .../view/ViewDataMigrationContextImpl.java      |   6 +-
 .../server/view/ViewDataMigrationUtility.java   |   4 +-
 .../server/view/ViewDirectoryWatcher.java       |   6 +-
 .../ambari/server/view/ViewExtractor.java       |   8 +-
 .../apache/ambari/server/view/ViewRegistry.java |  27 +-
 .../server/view/ViewURLStreamProvider.java      |  14 +-
 .../main/python/ambari_server/setupMpacks.py    |   4 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |  12 +-
 .../0.1.0/configuration/ams-hbase-env.xml       |   4 +-
 .../package/templates/hbase_master_jaas.conf.j2 |  10 +
 .../templates/hbase_regionserver_jaas.conf.j2   |  10 +
 .../DRUID/0.9.2/configuration/druid-env.xml     |   2 +-
 .../DRUID/0.9.2/package/scripts/druid.py        |   7 +
 .../DRUID/0.9.2/package/scripts/params.py       |   1 +
 .../package/templates/hbase_master_jaas.conf.j2 |  10 +
 .../templates/hbase_regionserver_jaas.conf.j2   |  10 +
 .../HBASE/2.0.0.3.0/configuration/hbase-env.xml |   4 +-
 .../package/templates/hbase_master_jaas.conf.j2 |  10 +
 .../templates/hbase_regionserver_jaas.conf.j2   |  10 +
 .../HDFS/2.1.0.2.0/package/scripts/hdfs.py      |  17 +
 .../package/templates/hdfs_dn_jaas.conf.j2      |  27 +
 .../package/templates/hdfs_jn_jaas.conf.j2      |  27 +
 .../package/templates/hdfs_nn_jaas.conf.j2      |  27 +
 .../HDFS/3.0.0.3.0/package/scripts/hdfs.py      |  17 +
 .../package/templates/hdfs_dn_jaas.conf.j2      |  27 +
 .../package/templates/hdfs_jn_jaas.conf.j2      |  27 +
 .../package/templates/hdfs_nn_jaas.conf.j2      |  27 +
 .../HIVE/0.12.0.2.0/configuration/hive-site.xml |   2 +-
 .../KAFKA/0.8.1/configuration/kafka-env.xml     |   4 +
 .../0.8.1/configuration/kafka_jaas_conf.xml     |  11 +
 .../0.8.1/package/templates/kafka_jaas.conf.j2  |  11 +
 .../package/templates/krb5JAASLogin.conf.j2     |   9 +-
 .../package/templates/krb5JAASLogin.conf.j2     |   9 +-
 .../0.9.1/package/scripts/storm_yaml_utils.py   |   5 +-
 .../0.9.1/package/templates/storm_jaas.conf.j2  |  10 +
 .../2.1.0.2.0/package/scripts/params_linux.py   |  32 +-
 .../package/scripts/resourcemanager.py          |   2 +-
 .../YARN/2.1.0.2.0/package/scripts/yarn.py      |  17 +
 .../package/templates/mapred_jaas.conf.j2       |  28 +
 .../package/templates/yarn_ats_jaas.conf.j2     |  27 +
 .../package/templates/yarn_jaas.conf.j2         |  12 +-
 .../package/templates/yarn_nm_jaas.conf.j2      |  27 +
 .../configuration-mapred/mapred-env.xml         |   4 +-
 .../YARN/3.0.0.3.0/configuration/yarn-env.xml   |  15 +-
 .../YARN/3.0.0.3.0/kerberos.json                |   4 +-
 .../3.0.0.3.0/package/scripts/params_linux.py   |  32 +-
 .../package/scripts/resourcemanager.py          |   2 +-
 .../YARN/3.0.0.3.0/package/scripts/yarn.py      |  19 +-
 .../package/templates/mapred_jaas.conf.j2       |  28 +
 .../package/templates/yarn_ats_jaas.conf.j2     |  27 +
 .../package/templates/yarn_jaas.conf.j2         |  12 +-
 .../package/templates/yarn_nm_jaas.conf.j2      |  27 +
 .../YARN/3.0.0.3.0/service_advisor.py           |   4 +-
 .../0.6.0.2.5/package/scripts/master.py         |   4 +-
 .../resources/host_scripts/alert_disk_space.py  |  22 +-
 .../services/HIVE/configuration/hive-site.xml   |   2 +-
 .../YARN/configuration-mapred/mapred-env.xml    |   4 +-
 .../services/HBASE/configuration/hbase-env.xml  |   4 +-
 .../services/HDFS/configuration/hadoop-env.xml  |   7 +
 .../services/YARN/configuration/yarn-env.xml    |  16 +-
 .../services/HDFS/configuration/hadoop-env.xml  |   7 +
 .../resources/stacks/HDP/2.6/repos/repoinfo.xml |  14 +
 .../services/SPARK2/configuration/livy2-env.xml |   4 +-
 .../stacks/HDP/2.6/services/YARN/kerberos.json  |   4 +-
 .../services/HDFS/configuration/hadoop-env.xml  |   7 +
 .../YARN/configuration-mapred/mapred-env.xml    |   4 +-
 .../src/main/resources/stacks/stack_advisor.py  | 115 +++-
 .../ambari/server/agent/AgentResourceTest.java  |   6 +-
 .../server/agent/LocalAgentSimulator.java       |   6 +-
 .../ambari/server/agent/TestActionQueue.java    |   2 +-
 .../server/agent/TestHeartbeatHandler.java      |   4 +-
 .../server/api/services/AmbariMetaInfoTest.java |   4 +-
 .../server/api/services/PersistServiceTest.java |   6 +-
 .../server/bootstrap/BootStrapResourceTest.java |   6 +-
 .../ambari/server/bootstrap/BootStrapTest.java  |   6 +-
 .../checks/ServiceCheckValidityCheckTest.java   |  42 +-
 .../AmbariManagementControllerImplTest.java     |  13 +-
 .../AmbariManagementControllerTest.java         |  17 +-
 .../server/controller/KerberosHelperTest.java   | 129 ++---
 .../AbstractJDBCResourceProviderTest.java       |   2 +-
 .../BlueprintConfigurationProcessorTest.java    |   3 +
 .../CredentialResourceProviderTest.java         |  10 +-
 .../PreUpgradeCheckResourceProviderTest.java    |  15 +-
 .../StackUpgradeConfigurationMergeTest.java     |   3 +-
 .../internal/UpgradeResourceProviderTest.java   |   2 +-
 .../metrics/ganglia/GangliaMetricTest.java      |   2 +-
 .../dispatchers/AlertScriptDispatcherTest.java  |  67 +++
 .../apache/ambari/server/orm/OrmTestHelper.java |   4 +-
 .../orm/dao/RepositoryVersionDAOTest.java       |   2 +-
 .../sample/checks/SampleServiceCheck.java       |   4 -
 .../server/security/CertGenerationTest.java     |   6 +-
 .../server/security/SslExecutionTest.java       |   6 +-
 .../encryption/MasterKeyServiceTest.java        |   6 +-
 .../upgrades/ConfigureActionTest.java           |   5 -
 .../upgrades/UpgradeActionTest.java             |   5 -
 .../server/stageplanner/TestStagePlanner.java   | 197 ++++++-
 .../ambari/server/state/CheckHelperTest.java    |  36 +-
 .../server/state/cluster/ClusterTest.java       |   4 +-
 .../ambari/server/state/host/HostTest.java      |   6 +-
 .../state/kerberos/KerberosDescriptorTest.java  |   9 +
 .../kerberos/VariableReplacementHelperTest.java | 130 +++--
 .../svccomphost/ServiceComponentHostTest.java   |   5 +-
 .../server/testing/DBInconsistencyTests.java    |   2 +-
 .../server/upgrade/UpgradeCatalogHelper.java    |   7 -
 .../ambari/server/upgrade/UpgradeTest.java      |   2 +-
 .../python/host_scripts/TestAlertDiskSpace.py   |  12 +-
 .../python/stacks/2.0.6/HDFS/test_datanode.py   |  10 +
 .../stacks/2.0.6/HDFS/test_journalnode.py       |  11 +-
 .../python/stacks/2.0.6/HDFS/test_namenode.py   |  24 +-
 .../python/stacks/2.0.6/HDFS/test_nfsgateway.py |  10 +
 .../python/stacks/2.0.6/HDFS/test_snamenode.py  |  12 +-
 .../test/python/stacks/2.0.6/HDFS/test_zkfc.py  |  17 +-
 .../stacks/2.0.6/YARN/test_historyserver.py     |  10 +
 .../stacks/2.0.6/YARN/test_mapreduce2_client.py |  10 +
 .../stacks/2.0.6/YARN/test_nodemanager.py       |  10 +
 .../stacks/2.0.6/YARN/test_resourcemanager.py   |  10 +
 .../stacks/2.0.6/YARN/test_yarn_client.py       |  10 +
 .../stacks/2.0.6/common/test_stack_advisor.py   | 153 ++++++
 .../test/python/stacks/2.6/DRUID/test_druid.py  |  23 +-
 .../test/python/stacks/2.6/configs/default.json |   3 +-
 .../stacks/HDP/2.0.6.1/role_command_order.json  | 101 +---
 ambari-web/app/config.js                        |   9 +-
 .../progress_popup_controller.js                |   2 +-
 .../main/admin/stack_and_upgrade_controller.js  |   2 +-
 .../manage_alert_notifications_controller.js    |  35 +-
 ambari-web/app/messages.js                      |   9 +-
 ambari-web/app/routes/add_service_routes.js     |   2 +-
 ambari-web/app/routes/main.js                   |   2 +-
 ambari-web/app/styles/application.less          |  11 +
 ambari-web/app/styles/bootstrap_overrides.less  |  49 ++
 ambari-web/app/styles/dashboard.less            | 115 ++--
 .../templates/common/export_metrics_menu.hbs    |  16 +-
 ambari-web/app/templates/common/progress.hbs    |   4 +
 ambari-web/app/templates/main.hbs               |   2 +-
 .../app/templates/main/admin/kerberos.hbs       |  34 +-
 .../main/alerts/create_alert_notification.hbs   |  14 +
 ambari-web/app/templates/main/dashboard.hbs     |   2 +-
 .../main/dashboard/widgets/cluster_metrics.hbs  |  12 +-
 .../main/dashboard/widgets/hbase_links.hbs      |  15 +-
 .../main/dashboard/widgets/hdfs_links.hbs       |  17 +-
 .../main/dashboard/widgets/pie_chart.hbs        |  21 +-
 .../main/dashboard/widgets/simple_text.hbs      |  21 +-
 .../templates/main/dashboard/widgets/uptime.hbs |  16 +-
 .../main/dashboard/widgets/yarn_links.hbs       |  18 +-
 .../main/service/all_services_actions.hbs       |   6 +-
 ambari-web/app/utils/ajax/ajax.js               |   2 +-
 ambari-web/app/utils/config.js                  |   2 +-
 ambari-web/app/utils/validator.js               |   8 +
 ambari-web/app/views/common/chart/pie.js        |  10 +-
 .../configs/service_config_container_view.js    |   2 +-
 ambari-web/app/views/loading.js                 |   2 +-
 ambari-web/app/views/main/admin.js              |  14 +-
 .../views/main/admin/kerberos/disable_view.js   |   3 +-
 .../main/admin/stack_upgrade/services_view.js   |   2 +-
 .../main/alerts/definition_details_view.js      |   2 +-
 .../dashboard/widgets/cluster_metrics_widget.js |   3 -
 .../main/dashboard/widgets/pie_chart_widget.js  |  23 +-
 ambari-web/app/views/main/menu.js               |  16 +-
 ambari-web/app/views/main/service/item.js       |   2 +-
 ...anage_alert_notifications_controller_test.js |  38 +-
 ambari-web/test/utils/config_test.js            |   2 +-
 .../admin/stack_upgrade/services_view_test.js   |   1 +
 .../main/alerts/definition_details_view_test.js |   2 +-
 .../src/main/assemblies/odpi-ambari-mpack.xml   |   2 +-
 .../main/resources/ui/app/models/worksheet.js   |   1 +
 .../resources/ui/app/routes/queries/query.js    |  15 +-
 .../ui/app/routes/queries/query/results.js      |   6 +-
 .../templates/components/query-result-table.hbs |  92 ++--
 .../ui/app/templates/queries/query.hbs          |  10 +-
 .../ui/app/templates/queries/query/log.hbs      |  12 +-
 .../ui/app/templates/queries/query/results.hbs  |   9 +-
 .../src/main/resources/ui/ember-cli-build.js    |   1 +
 .../resources/ui/vendor/browser-pollyfills.js   | 213 ++++++++
 docs/pom.xml                                    |   2 +-
 392 files changed, 5474 insertions(+), 2497 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index bd4c9dd,3a650ef..60df8cf
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@@ -26,14 -26,11 +26,14 @@@ import java.util.Set
  
  import org.apache.ambari.annotations.Experimental;
  import org.apache.ambari.annotations.ExperimentalFeature;
 +import org.apache.ambari.server.AmbariException;
  import org.apache.ambari.server.RoleCommand;
 -import org.apache.ambari.server.state.ServiceInfo;
 +import org.apache.ambari.server.state.Cluster;
 +import org.apache.ambari.server.state.Service;
 +import org.apache.ambari.server.state.ServiceComponent;
  import org.apache.ambari.server.utils.StageUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
  
  import com.google.gson.annotations.SerializedName;
  

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-web/app/messages.js
----------------------------------------------------------------------


[06/10] ambari git commit: AMBARI-21180. Component command changes must include version numbers for all services (ncole)

Posted by nc...@apache.org.
AMBARI-21180. Component command changes must include version numbers for all services (ncole)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5a1bd715
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5a1bd715
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5a1bd715

Branch: refs/heads/trunk
Commit: 5a1bd715e11b2e3a79b139118a90b66eca32f025
Parents: 12202a2
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 5 17:39:42 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue Jun 6 10:33:14 2017 -0400

----------------------------------------------------------------------
 .../actionmanager/ExecutionCommandWrapper.java  | 65 +++++++++++---------
 .../ambari/server/agent/ExecutionCommand.java   | 57 ++++++++++++-----
 .../AmbariCustomCommandExecutionHelper.java     |  4 +-
 .../AmbariManagementControllerImpl.java         |  2 -
 .../STORM/0.9.1/package/scripts/params_linux.py |  2 -
 .../1.0.1.3.0/package/scripts/params_linux.py   |  2 -
 .../AmbariCustomCommandExecutionHelperTest.java | 11 ++--
 7 files changed, 84 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index 2ec09d9..efd609a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.DesiredConfig;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -143,7 +144,8 @@ public class ExecutionCommandWrapper {
       // now that the tags have been updated (if necessary), fetch the
       // configurations
       Map<String, Map<String, String>> configurationTags = executionCommand.getConfigurationTags();
-      if (null != configurationTags && !configurationTags.isEmpty()) {
+
+      if (MapUtils.isNotEmpty(configurationTags)) {
         Map<String, Map<String, String>> configProperties = configHelper
             .getEffectiveConfigProperties(cluster, configurationTags);
 
@@ -182,43 +184,46 @@ public class ExecutionCommandWrapper {
                 executionCommand.getConfigurationAttributes().get(type));
             }
         }
+      }
 
-        // set the repository version for the component this command is for -
-        // always use the current desired version
-        try {
-          RepositoryVersionEntity repositoryVersion = null;
-          String serviceName = executionCommand.getServiceName();
-          if (!StringUtils.isEmpty(serviceName)) {
-            Service service = cluster.getService(serviceName);
-            if (null != service) {
-              repositoryVersion = service.getDesiredRepositoryVersion();
-            }
+      // set the repository version for the component this command is for -
+      // always use the current desired version
+      try {
+        RepositoryVersionEntity repositoryVersion = null;
+        String serviceName = executionCommand.getServiceName();
+        if (!StringUtils.isEmpty(serviceName)) {
+          Service service = cluster.getService(serviceName);
+          if (null != service) {
+            repositoryVersion = service.getDesiredRepositoryVersion();
+          }
 
-            String componentName = executionCommand.getComponentName();
-            if (!StringUtils.isEmpty(componentName)) {
-              ServiceComponent serviceComponent = service.getServiceComponent(
-                  executionCommand.getComponentName());
+          String componentName = executionCommand.getComponentName();
+          if (!StringUtils.isEmpty(componentName)) {
+            ServiceComponent serviceComponent = service.getServiceComponent(
+                executionCommand.getComponentName());
 
-              if (null != serviceComponent) {
-                repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
-              }
+            if (null != serviceComponent) {
+              repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
             }
           }
+        }
 
-          if (null != repositoryVersion) {
-            executionCommand.getCommandParams().put(KeyNames.VERSION,
-                repositoryVersion.getVersion());
-            executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION,
-                repositoryVersion.getVersion());
-          }
-        } catch (ServiceNotFoundException serviceNotFoundException) {
-          // it's possible that there are commands specified for a service where
-          // the service doesn't exist yet
-          LOG.warn(
-              "The service {} is not installed in the cluster. No repository version will be sent for this command.",
-              executionCommand.getServiceName());
+        if (null != repositoryVersion) {
+          executionCommand.getCommandParams().put(KeyNames.VERSION, repositoryVersion.getVersion());
+          executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
         }
+      } catch (ServiceNotFoundException serviceNotFoundException) {
+        // it's possible that there are commands specified for a service where
+        // the service doesn't exist yet
+        LOG.warn(
+            "The service {} is not installed in the cluster. No repository version will be sent for this command.",
+            executionCommand.getServiceName());
       }
+
+      // set the desired versions of versionable components.  This is safe even during an upgrade because
+      // we are "loading-late": components that have not yet upgraded in an EU will have the correct versions.
+      executionCommand.setComponentVersions(cluster);
+
     } catch (ClusterNotFoundException cnfe) {
       // it's possible that there are commands without clusters; in such cases,
       // just return the de-serialized command and don't try to read configs

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index 17b89b7..bd4c9dd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -26,8 +26,11 @@ import java.util.Set;
 
 import org.apache.ambari.annotations.Experimental;
 import org.apache.ambari.annotations.ExperimentalFeature;
+import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.RoleCommand;
-import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.utils.StageUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -110,9 +113,6 @@ public class ExecutionCommand extends AgentCommand {
   @SerializedName("localComponents")
   private Set<String> localComponents = new HashSet<>();
 
-  @SerializedName("availableServices")
-  private Map<String, String> availableServices = new HashMap<>();
-
   /**
    * "true" or "false" indicating whether this
    * service is enabled for credential store use.
@@ -153,6 +153,9 @@ public class ExecutionCommand extends AgentCommand {
   @SerializedName("repositoryFile")
   private CommandRepository commandRepository;
 
+  @SerializedName("componentVersionMap")
+  private Map<String, Map<String, String>> componentVersionMap = new HashMap<>();
+
   public void setConfigurationCredentials(Map<String, Map<String, String>> configurationCredentials) {
     this.configurationCredentials = configurationCredentials;
   }
@@ -300,18 +303,6 @@ public class ExecutionCommand extends AgentCommand {
     this.localComponents = localComponents;
   }
 
-  public Map<String, String> getAvailableServices() {
-    return availableServices;
-  }
-
-  public void setAvailableServicesFromServiceInfoMap(Map<String, ServiceInfo> serviceInfoMap) {
-    Map<String, String> serviceVersionMap = new HashMap<>();
-    for (Map.Entry<String, ServiceInfo> entry : serviceInfoMap.entrySet()) {
-      serviceVersionMap.put(entry.getKey(), entry.getValue().getVersion());
-    }
-    availableServices = serviceVersionMap;
-  }
-
   public Map<String, Map<String, Map<String, String>>> getConfigurationAttributes() {
     return configurationAttributes;
   }
@@ -523,4 +514,38 @@ public class ExecutionCommand extends AgentCommand {
         comment = "This should be replaced by a map of all service component versions")
     String CURRENT_VERSION = "current_version";
   }
+
+  /**
+   * @return
+   */
+  public Map<String, Map<String, String>> getComponentVersionMap() {
+    return componentVersionMap;
+  }
+
+  /**
+   * Used to set a map of {service -> { component -> version}}.  This is necessary when performing
+   * an upgrade to correct build paths of required binaries.
+   * @param cluster the cluster from which to build the map
+   */
+  public void setComponentVersions(Cluster cluster) throws AmbariException {
+    Map<String, Map<String, String>> componentVersionMap = new HashMap<>();
+
+    for (Service service : cluster.getServices().values()) {
+      Map<String, String> componentMap = new HashMap<>();
+
+      boolean shouldSet = false;
+      for (ServiceComponent component : service.getServiceComponents().values()) {
+        if (component.isVersionAdvertised()) {
+          shouldSet = true;
+          componentMap.put(component.getName(), component.getDesiredVersion());
+        }
+      }
+
+      if (shouldSet) {
+        componentVersionMap.put(service.getName(), componentMap);
+      }
+    }
+
+    this.componentVersionMap = componentVersionMap;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index cabb9d6..1f3b4b0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -384,12 +384,12 @@ public class AmbariCustomCommandExecutionHelper {
         execCmd.setCommandType(AgentCommandType.BACKGROUND_EXECUTION_COMMAND);
       }
 
+      execCmd.setComponentVersions(cluster);
+
       execCmd.setConfigurations(configurations);
       execCmd.setConfigurationAttributes(configurationAttributes);
       execCmd.setConfigurationTags(configTags);
 
-      execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
-
       // Get the value of credential store enabled from the DB
       Service clusterService = cluster.getService(serviceName);
       execCmd.setCredentialStoreEnabled(String.valueOf(clusterService.isCredentialStoreEnabled()));

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 186a19e..329998b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -2555,11 +2555,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
       cluster.addSuspendedUpgradeParameters(commandParams, roleParams);
     }
 
-
     execCmd.setRoleParams(roleParams);
     execCmd.setCommandParams(commandParams);
 
-    execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
     execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
     hostParams.put(KeyNames.CURRENT_VERSION, repoVersion.getVersion());
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
index 78ec165..664c582 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
@@ -394,8 +394,6 @@ if enable_ranger_storm:
 namenode_hosts = default("/clusterHostInfo/namenode_host", [])
 has_namenode = not len(namenode_hosts) == 0
 
-availableServices = config['availableServices']
-
 hdfs_user = config['configurations']['hadoop-env']['hdfs_user'] if has_namenode else None
 hdfs_user_keytab = config['configurations']['hadoop-env']['hdfs_user_keytab'] if has_namenode else None
 hdfs_principal_name = config['configurations']['hadoop-env']['hdfs_principal_name'] if has_namenode else None

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
index 78ec165..664c582 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
@@ -394,8 +394,6 @@ if enable_ranger_storm:
 namenode_hosts = default("/clusterHostInfo/namenode_host", [])
 has_namenode = not len(namenode_hosts) == 0
 
-availableServices = config['availableServices']
-
 hdfs_user = config['configurations']['hadoop-env']['hdfs_user'] if has_namenode else None
 hdfs_user_keytab = config['configurations']['hadoop-env']['hdfs_user_keytab'] if has_namenode else None
 hdfs_principal_name = config['configurations']['hadoop-env']['hdfs_principal_name'] if has_namenode else None

http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index a6c0c32..240517f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -70,7 +70,6 @@ import org.apache.ambari.server.state.RepositoryInfo;
 import org.apache.ambari.server.state.SecurityType;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.State;
@@ -79,6 +78,7 @@ import org.apache.ambari.server.state.ValueAttributesInfo;
 import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
 import org.apache.ambari.server.topology.TopologyManager;
 import org.apache.ambari.server.utils.StageUtils;
+import org.apache.commons.collections.MapUtils;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.easymock.EasyMockRule;
@@ -553,14 +553,15 @@ public class AmbariCustomCommandExecutionHelperTest {
 
     ambariManagementController.createAction(actionRequest, requestProperties);
     StackId stackId = clusters.getCluster("c1").getDesiredStackVersion();
-    Map<String, ServiceInfo> services = ambariManagementController.getAmbariMetaInfo().getServices(stackId.getStackName(), stackId.getStackVersion());
     Request request = requestCapture.getValue();
     Stage stage = request.getStages().iterator().next();
     List<ExecutionCommandWrapper> commands = stage.getExecutionCommands("c1-c6401");
     ExecutionCommand command = commands.get(0).getExecutionCommand();
-    for (String service : services.keySet()) {
-      Assert.assertEquals(command.getAvailableServices().get(service), services.get(service).getVersion());
-    }
+
+    // ZK is the only service that is versionable
+    Assert.assertFalse(MapUtils.isEmpty(command.getComponentVersionMap()));
+    Assert.assertEquals(1, command.getComponentVersionMap().size());
+    Assert.assertTrue(command.getComponentVersionMap().containsKey("ZOOKEEPER"));
   }
 
   @Test


[03/10] ambari git commit: AMBARI-21179 - Remove RepositoryVersionState of INIT (jonathanhurley)

Posted by nc...@apache.org.
AMBARI-21179 - Remove RepositoryVersionState of INIT (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cd3fb859
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cd3fb859
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cd3fb859

Branch: refs/heads/trunk
Commit: cd3fb85953c01f8049950f140215de4e2257d139
Parents: 7847e4b
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Jun 5 14:31:43 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Jun 5 14:31:43 2017 -0400

----------------------------------------------------------------------
 .../ServiceComponentDesiredStateEntity.java     |  2 +-
 .../server/state/RepositoryVersionState.java    | 31 ++++++++++----------
 .../apache/ambari/server/state/ServiceImpl.java |  2 +-
 .../server/upgrade/UpgradeCatalog300.java       | 13 ++++----
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  |  2 +-
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |  2 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |  2 +-
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |  2 +-
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql |  2 +-
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |  2 +-
 10 files changed, 30 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
index 84e464e..e0f52c6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
@@ -89,7 +89,7 @@ public class ServiceComponentDesiredStateEntity {
 
   @Column(name = "repo_state", nullable = false, insertable = true, updatable = true)
   @Enumerated(EnumType.STRING)
-  private RepositoryVersionState repoState = RepositoryVersionState.INIT;
+  private RepositoryVersionState repoState = RepositoryVersionState.NOT_REQUIRED;
 
   /**
    * Unidirectional one-to-one association to {@link RepositoryVersionEntity}

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
index a2e220e..720f307 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
@@ -21,10 +21,13 @@ package org.apache.ambari.server.state;
 import java.util.List;
 
 /**
- * There must be exactly one repository version that is in a CURRENT state for a particular cluster or host.
- * There may be 0 or more repository versions in an INSTALLED or INSTALLING state.
- * The operation to transition a repository version state from INSTALLED into CURRENT must be atomic and change the existing
- * relation between repository version and cluster or host from CURRENT to INSTALLED.
+ * The {@link RepositoryVersionState} represents the state of a repository on a
+ * particular host. Because hosts can contain a mixture of components from
+ * different repositories, there can be any combination of
+ * {@link RepositoryVersionState#CURRENT}} entries for a single host. A host may
+ * not have multiple entries for the same repository.
+ * <p/>
+ *
  *
  * <pre>
  * Step 1: Initial Configuration
@@ -43,20 +46,23 @@ import java.util.List;
  * Version 1: CURRENT
  * Version 2: INSTALL_FAILED (a retry can set this back to INSTALLING)
  *
- * Step 4: Perform an upgrade from Version 1 to Version 2
+ * Step 4: Perform an upgrade of every component on the host from version 1 to version 2
  * Version 1: INSTALLED
  * Version 2: CURRENT
  *
- * Step 4: May revert to the original version via a downgrade, which is technically still an upgrade to a version
+ * Step 4a: Perform an upgrade of a single component, leaving other components on the prior version
+ * Version 1: CURRENT
+ * Version 2: CURRENT
+ *
+ * Step 4b: May revert to the original version via a downgrade, which is technically still an upgrade to a version
  * and eventually becomes
  *
  * Version 1: CURRENT
  * Version 2: INSTALLED
  *
  * *********************************************
- * Start states: CURRENT, INSTALLING
+ * Start states: NOT_REQUIRED, INSTALLING, CURRENT
  * Allowed Transitions:
- * INIT -> CURRENT
  * INSTALLED -> CURRENT
  * INSTALLING -> INSTALLED | INSTALL_FAILED | OUT_OF_SYNC
  * INSTALLED -> INSTALLED | INSTALLING | OUT_OF_SYNC
@@ -67,13 +73,6 @@ import java.util.List;
  */
 public enum RepositoryVersionState {
   /**
-   * Repository version is initialized, and will transition to current.  This is used
-   * when creating a cluster using a specific version.  Transition occurs naturally as
-   * hosts report CURRENT.
-   */
-  INIT(2),
-
-  /**
    * Repository version is not required
    */
   NOT_REQUIRED(0),
@@ -125,7 +124,7 @@ public enum RepositoryVersionState {
    */
   public static RepositoryVersionState getAggregateState(List<RepositoryVersionState> states) {
     if (null == states || states.isEmpty()) {
-      return INIT;
+      return NOT_REQUIRED;
     }
 
     RepositoryVersionState heaviestState = states.get(0);

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index fe37a93..ecf19d4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -348,7 +348,7 @@ public class ServiceImpl implements Service {
   @Override
   public RepositoryVersionState getRepositoryState() {
     if (components.isEmpty()) {
-      return RepositoryVersionState.INIT;
+      return RepositoryVersionState.NOT_REQUIRED;
     }
 
     List<RepositoryVersionState> states = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
index f068798..9b44c53 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
@@ -182,9 +182,10 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
    */
   protected void addServiceComponentColumn() throws SQLException {
     dbAccessor.addColumn(UpgradeCatalog250.COMPONENT_TABLE,
-        new DBColumnInfo("repo_state", String.class, 255, RepositoryVersionState.INIT.name(), false));
-
+        new DBColumnInfo("repo_state", String.class, 255,
+            RepositoryVersionState.NOT_REQUIRED.name(), false));
   }
+
   protected void setStatusOfStagesAndRequests() {
     executeInTransaction(new Runnable() {
       @Override
@@ -336,15 +337,15 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
 
             removeConfigurationPropertiesFromCluster(cluster, configType, removeProperties);
           }
-          
+
           Config logSearchProperties = cluster.getDesiredConfigByType("logsearch-properties");
           Config logFeederProperties = cluster.getDesiredConfigByType("logfeeder-properties");
           if (logSearchProperties != null && logFeederProperties != null) {
             String defaultLogLevels = logSearchProperties.getProperties().get("logsearch.logfeeder.include.default.level");
-            
+
             Set<String> removeProperties = Sets.newHashSet("logsearch.logfeeder.include.default.level");
             removeConfigurationPropertiesFromCluster(cluster, "logsearch-properties", removeProperties);
-            
+
             Map<String, String> newProperties = new HashMap<>();
             newProperties.put("logfeeder.include.default.level", defaultLogLevels);
             updateConfigurationPropertiesForCluster(cluster, "logfeeder-properties", newProperties, true, true);
@@ -358,7 +359,7 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
               updateConfigurationPropertiesForCluster(cluster, "logfeeder-log4j", Collections.singletonMap("content", content), true, true);
             }
           }
-          
+
           Config logsearchLog4jProperties = cluster.getDesiredConfigByType("logsearch-log4j");
           if (logsearchLog4jProperties != null) {
             String content = logsearchLog4jProperties.getProperties().get("content");

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index c5c83ab..e341405 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -172,7 +172,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR(255) NOT NULL,
   service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 230ae10..ce8736e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -192,7 +192,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR(255) NOT NULL,
   service_name VARCHAR(100) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 903fc9e..0edbb91 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -173,7 +173,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR2(255) NOT NULL,
   service_name VARCHAR2(255) NOT NULL,
   recovery_enabled SMALLINT DEFAULT 0 NOT NULL,
-  repo_state VARCHAR2(255) DEFAULT 'INIT' NOT NULL,
+  repo_state VARCHAR2(255) DEFAULT 'NOT_REQUIRED' NOT NULL,
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 86fbc04..5899179 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -171,7 +171,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR(255) NOT NULL,
   service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 47ea221..6164b2d 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -170,7 +170,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR(255) NOT NULL,
   service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),

http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index bbe9068..52d2b87 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -184,7 +184,7 @@ CREATE TABLE servicecomponentdesiredstate (
   desired_state VARCHAR(255) NOT NULL,
   service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
   CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),


[07/10] ambari git commit: AMBARI-21188 - Configuration Symlink Is Incorrect After Stack Distribution (jonathanhurley)

Posted by nc...@apache.org.
AMBARI-21188 - Configuration Symlink Is Incorrect After Stack Distribution (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7750c9a4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7750c9a4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7750c9a4

Branch: refs/heads/trunk
Commit: 7750c9a4672e692f6389698698335596d8bf4925
Parents: 5a1bd71
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Jun 6 14:42:20 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue Jun 6 14:42:20 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/conf_select.py             |  1 -
 .../custom_actions/scripts/install_packages.py     | 17 +++++------------
 2 files changed, 5 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7750c9a4/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
index facf186..3e01cf6 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
@@ -26,7 +26,6 @@ import os
 import subprocess
 
 # Local Imports
-import version
 import stack_select
 from resource_management.core import shell
 from resource_management.libraries.functions.format import format

http://git-wip-us.apache.org/repos/asf/ambari/blob/7750c9a4/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index c12dff1..d6da0fc 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -197,18 +197,11 @@ class InstallPackages(Script):
       return
 
     for package_name, directories in conf_select.get_package_dirs().iteritems():
-      # if already on HDP 2.3, then we should skip making conf.backup folders
-      if self.current_stack_version_formatted and check_stack_feature(StackFeature.CONFIG_VERSIONING, self.current_stack_version_formatted):
-        conf_selector_name = stack_tools.get_stack_tool_name(stack_tools.CONF_SELECTOR_NAME)
-        Logger.info("The current cluster stack of {0} does not require backing up configurations; "
-                    "only {1} versioned config directories will be created.".format(stack_version, conf_selector_name))
-        # only link configs for all known packages
-        conf_select.select(self.stack_name, package_name, stack_version, ignore_errors = True)
-      else:
-        # link configs and create conf.backup folders for all known packages
-        # this will also call conf-select select
-        conf_select.convert_conf_directories_to_symlinks(package_name, stack_version, directories,
-          skip_existing_links = False, link_to = "backup")
+      conf_selector_name = stack_tools.get_stack_tool_name(stack_tools.CONF_SELECTOR_NAME)
+      Logger.info("The current cluster stack of {0} does not require backing up configurations; "
+                  "only {1} versioned config directories will be created.".format(stack_version, conf_selector_name))
+      # only link configs for all known packages
+      conf_select.select(self.stack_name, package_name, stack_version, ignore_errors = True)
 
 
   def compute_actual_version(self):


[02/10] ambari git commit: AMBARI-21175 - Host Versions Remain on CURRENT During STANDARD (Full) Upgrades (jonathanhurley)

Posted by nc...@apache.org.
AMBARI-21175 - Host Versions Remain on CURRENT During STANDARD (Full) Upgrades (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7847e4b6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7847e4b6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7847e4b6

Branch: refs/heads/trunk
Commit: 7847e4b6cf65b777e516a4806cbf5f45cdd207ee
Parents: 4767389
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Jun 2 08:28:51 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Jun 2 10:30:06 2017 -0400

----------------------------------------------------------------------
 .../ambari/server/orm/dao/HostVersionDAO.java   |  16 +++
 .../server/orm/entities/HostVersionEntity.java  |   5 +
 .../upgrades/FinalizeUpgradeAction.java         |  57 ++++++++--
 .../upgrades/UpgradeActionTest.java             | 109 +++++++++++++++++--
 4 files changed, 164 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
index ad34ec7..7be7691 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
@@ -130,6 +130,22 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
   }
 
   /**
+   * Retrieve all of the host versions for the given cluster name, and state. <br/>
+   * @param clusterName Cluster name
+   * @param state repository version state
+   * @return Return all of the host versions that match the criteria.
+   */
+  @RequiresSession
+  public List<HostVersionEntity> findByClusterAndState(String clusterName, RepositoryVersionState state) {
+    final TypedQuery<HostVersionEntity> query = entityManagerProvider.get()
+        .createNamedQuery("findByClusterAndState", HostVersionEntity.class);
+    query.setParameter("clusterName", clusterName);
+    query.setParameter("state", state);
+
+    return daoUtils.selectList(query);  
+  }
+  
+  /**
    * Retrieve all of the host versions for the given cluster name, host name, and state. <br/>
    * @param clusterName Cluster name
    * @param hostName FQDN of host

http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
index dbe4fe0..4a030af 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
@@ -61,6 +61,11 @@ import org.apache.ambari.server.state.RepositoryVersionState;
         "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host " +
             "WHERE hostVersion.hostEntity.hostName=:hostName"),
 
+    @NamedQuery(
+        name = "findByClusterAndState",
+        query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters "
+            + "WHERE clusters.clusterName=:clusterName AND hostVersion.state=:state"),
+
     @NamedQuery(name = "hostVersionByClusterHostnameAndState", query =
         "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
             "WHERE clusters.clusterName=:clusterName AND hostVersion.hostEntity.hostName=:hostName AND hostVersion.state=:state"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index 475a8c9..8f206bf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -140,8 +140,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
         throw new AmbariException(messageBuff.toString());
       }
 
-      // for all hosts participating in this upgrade, update thei repository
-      // versions and upgrade state
+      // find every host version for this upgrade and ensure it has transitioned
+      // to CURRENT if required
       List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
           cluster.getClusterId(), repositoryVersion);
 
@@ -165,7 +165,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
         }
       }
 
-      // throw an exception if there are hosts which are not not fully upgraded
+      // throw an exception if there are hosts which did not transition the
+      // repository to CURRENT
       if (hostsWithoutCorrectVersionState.size() > 0) {
         message = String.format(
             "The following %d host(s) have not been upgraded to version %s. "
@@ -178,10 +179,11 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
       }
 
       outSB.append(
-          String.format("Finalizing the upgrade state of %d host(s).",
+          String.format("Finalizing the upgrade state and repository version for %d host(s).",
               hostVersionsAllowed.size())).append(System.lineSeparator());
 
-      // Reset the upgrade state
+      // at this point, all host versions are correct - do some cleanup like
+      // resetting the upgrade state
       for (HostVersionEntity hostVersion : hostVersionsAllowed) {
         Collection<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(hostVersion.getHostName());
         for (HostComponentStateEntity hostComponentStateEntity: hostComponentStates) {
@@ -190,16 +192,16 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
         }
       }
 
-      // Impacts all hosts that have a version
-      outSB.append(
-          String.format("Finalizing the version for %d host(s).",
-              hostVersionsAllowed.size())).append(System.lineSeparator());
-
-      versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
+      // move host versions from CURRENT to INSTALLED if their repos are no
+      // longer used
+      finalizeHostRepositoryVersions(cluster);
 
       // Reset upgrade state
       cluster.setUpgradeEntity(null);
 
+      // the upgrade is done!
+      versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
+
       message = String.format("The upgrade to %s has completed.", version);
       outSB.append(message).append(System.lineSeparator());
       return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
@@ -372,6 +374,39 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
     return errors;
   }
 
+  /**
+   * Moves any {@link HostVersionEntity}s which are
+   * {@link RepositoryVersionState#CURRENT} to either
+   * {@link RepositoryVersionState#INSTALLED} or
+   * {@link RepositoryVersionState#NOT_REQUIRED} if their assocaited
+   * repositories are no longer in use.
+   *
+   * @param cluster
+   * @throws AmbariException
+   */
+  private void finalizeHostRepositoryVersions(Cluster cluster) throws AmbariException {
+    // create a set of all of the repos that the services are on
+    Set<RepositoryVersionEntity> desiredRepoVersions = new HashSet<>();
+    Set<String> serviceNames = cluster.getServices().keySet();
+    for (String serviceName : serviceNames) {
+      Service service = cluster.getService(serviceName);
+      desiredRepoVersions.add(service.getDesiredRepositoryVersion());
+    }
+
+    // if any CURRENT host version is for a repo which is no longer desired by
+    // ANY service, move it to INSTALLED
+    List<HostVersionEntity> currentHostVersions = hostVersionDAO.findByClusterAndState(
+        cluster.getClusterName(), RepositoryVersionState.CURRENT);
+
+    for (HostVersionEntity hostVersion : currentHostVersions) {
+      RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+      if (!desiredRepoVersions.contains(hostRepoVersion)) {
+        hostVersion.setState(RepositoryVersionState.INSTALLED);
+        hostVersion = hostVersionDAO.merge(hostVersion);
+      }
+    }
+  }
+
   protected static class InfoTuple implements Comparable<InfoTuple> {
     protected final String serviceName;
     protected final String componentName;

http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 35fffda..e3ffae0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -100,7 +100,6 @@ public class UpgradeActionTest {
   private static final String HDP_2_1_1_1 = "2.1.1.1-2";
 
   private static final String HDP_2_2_0_1 = "2.2.0.1-3";
-  private static final String HDP_2_2_0_2 = "2.2.0.2-4";
 
   private static final StackId HDP_21_STACK = new StackId("HDP-2.1.1");
   private static final StackId HDP_22_STACK = new StackId("HDP-2.2.0");
@@ -147,7 +146,6 @@ public class UpgradeActionTest {
   private RepositoryVersionEntity repositoryVersion2110;
   private RepositoryVersionEntity repositoryVersion2111;
   private RepositoryVersionEntity repositoryVersion2201;
-  private RepositoryVersionEntity repositoryVersion2202;
 
   @Before
   public void setup() throws Exception {
@@ -167,7 +165,6 @@ public class UpgradeActionTest {
     repositoryVersion2110 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
     repositoryVersion2111 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_1);
     repositoryVersion2201 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_1);
-    repositoryVersion2202 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_2);
   }
 
   @After
@@ -199,11 +196,11 @@ public class UpgradeActionTest {
     hostVersionDAO.create(entity);
   }
 
-  private void createUpgradeCluster(
+  private Cluster createUpgradeCluster(
       RepositoryVersionEntity sourceRepoVersion, String hostName) throws Exception {
 
     clusters.addCluster(clusterName, sourceRepoVersion.getStackId());
-    Cluster c = clusters.getCluster(clusterName);
+    Cluster cluster = clusters.getCluster(clusterName);
 
     // add a host component
     clusters.addHost(hostName);
@@ -222,6 +219,8 @@ public class UpgradeActionTest {
         sourceRepoVersion, RepositoryVersionState.INSTALLED);
 
     hostVersionDAO.create(entity);
+
+    return cluster;
   }
 
   private void createHostVersions(RepositoryVersionEntity targetRepoVersion,
@@ -313,13 +312,13 @@ public class UpgradeActionTest {
     Cluster cluster = clusters.getCluster(clusterName);
 
     // Install ZK and HDFS with some components
-    Service zk = installService(cluster, "ZOOKEEPER");
+    Service zk = installService(cluster, "ZOOKEEPER", repositoryVersion2110);
     addServiceComponent(cluster, zk, "ZOOKEEPER_SERVER");
     addServiceComponent(cluster, zk, "ZOOKEEPER_CLIENT");
     createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_SERVER", "h1");
     createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_CLIENT", "h1");
 
-    Service hdfs = installService(cluster, "HDFS");
+    Service hdfs = installService(cluster, "HDFS", repositoryVersion2110);
     addServiceComponent(cluster, hdfs, "NAMENODE");
     addServiceComponent(cluster, hdfs, "DATANODE");
     createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
@@ -393,7 +392,7 @@ public class UpgradeActionTest {
     for (HostVersionEntity entity : hostVersionDAO.findByClusterAndHost(clusterName, "h1")) {
       if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2110.getVersion())) {
         assertEquals(RepositoryVersionState.CURRENT, entity.getState());
-      } else if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2111.getVersion())) {
+      } else {
         assertEquals(RepositoryVersionState.INSTALLED, entity.getState());
       }
     }
@@ -497,10 +496,95 @@ public class UpgradeActionTest {
     assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
   }
 
+  /**
+   * Tests that all host versions are correct after upgrade. This test will
+   * ensure that the prior CURRENT versions are moved to INSTALLED while not
+   * touching any others.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testHostVersionsAfterUpgrade() throws Exception {
+    String hostName = "h1";
+    Cluster cluster = createUpgradeCluster(repositoryVersion2110, hostName);
+    createHostVersions(repositoryVersion2111, hostName);
+    createHostVersions(repositoryVersion2201, hostName);
+
+    // Install ZK with some components
+    Service zk = installService(cluster, "ZOOKEEPER", repositoryVersion2110);
+    addServiceComponent(cluster, zk, "ZOOKEEPER_SERVER");
+    addServiceComponent(cluster, zk, "ZOOKEEPER_CLIENT");
+    createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_SERVER", hostName);
+    createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_CLIENT", hostName);
+
+    List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
+    assertEquals(3, hostVersions.size());
+
+    // repo 2110 - CURRENT (upgrading from)
+    // repo 2111 - CURRENT (all hosts reported in during upgrade)
+    // repo 2201 - NOT_REQUIRED (different stack)
+    for (HostVersionEntity hostVersion : hostVersions) {
+      RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+      if (repositoryVersion2110.equals(hostRepoVersion)) {
+        hostVersion.setState(RepositoryVersionState.CURRENT);
+      } else if (repositoryVersion2111.equals(hostRepoVersion)) {
+        hostVersion.setState(RepositoryVersionState.CURRENT);
+      } else {
+        hostVersion.setState(RepositoryVersionState.NOT_REQUIRED);
+      }
+
+      hostVersionDAO.merge(hostVersion);
+    }
+
+    // upgrade to 2111
+    createUpgrade(cluster, repositoryVersion2111);
+
+    // push all services to the correct repo version for finalize
+    Map<String, Service> services = cluster.getServices();
+    assertTrue(services.size() > 0);
+    for (Service service : services.values()) {
+      service.setDesiredRepositoryVersion(repositoryVersion2111);
+    }
+
+    // push all components to the correct version
+    List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(hostName);
+    for (HostComponentStateEntity hostComponentState : hostComponentStates) {
+      hostComponentState.setVersion(repositoryVersion2111.getVersion());
+      hostComponentStateDAO.merge(hostComponentState);
+    }
+
+    Map<String, String> commandParams = new HashMap<>();
+    ExecutionCommand executionCommand = new ExecutionCommand();
+    executionCommand.setCommandParams(commandParams);
+    executionCommand.setClusterName(clusterName);
+
+    HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
+    hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
+
+    finalizeUpgradeAction.setExecutionCommand(executionCommand);
+    finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
+
+    // finalize
+    CommandReport report = finalizeUpgradeAction.execute(null);
+    assertNotNull(report);
+    assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
+
+    for (HostVersionEntity hostVersion : hostVersions) {
+      RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+      if (repositoryVersion2110.equals(hostRepoVersion)) {
+        assertEquals(RepositoryVersionState.INSTALLED, hostVersion.getState());
+      } else if (repositoryVersion2111.equals(hostRepoVersion)) {
+        assertEquals(RepositoryVersionState.CURRENT, hostVersion.getState());
+      } else {
+        assertEquals(RepositoryVersionState.NOT_REQUIRED, hostVersion.getState());
+      }
+    }
+  }
+
   private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String svc,
                                                              String svcComponent, String hostName) throws AmbariException {
     Assert.assertNotNull(cluster.getConfigGroups());
-    Service s = installService(cluster, svc);
+    Service s = installService(cluster, svc, sourceRepositoryVersion);
     ServiceComponent sc = addServiceComponent(cluster, s, svcComponent);
 
     ServiceComponentHost sch = serviceComponentHostFactory.createNew(sc, hostName);
@@ -511,13 +595,14 @@ public class UpgradeActionTest {
     return sch;
   }
 
-  private Service installService(Cluster cluster, String serviceName) throws AmbariException {
+  private Service installService(Cluster cluster, String serviceName,
+      RepositoryVersionEntity repositoryVersionEntity) throws AmbariException {
     Service service = null;
 
     try {
       service = cluster.getService(serviceName);
     } catch (ServiceNotFoundException e) {
-      service = serviceFactory.createNew(cluster, serviceName, sourceRepositoryVersion);
+      service = serviceFactory.createNew(cluster, serviceName, repositoryVersionEntity);
       cluster.addService(service);
     }
 
@@ -525,7 +610,7 @@ public class UpgradeActionTest {
   }
 
   private ServiceComponent addServiceComponent(Cluster cluster, Service service,
-                                               String componentName) throws AmbariException {
+      String componentName) throws AmbariException {
     ServiceComponent serviceComponent = null;
     try {
       serviceComponent = service.getServiceComponent(componentName);