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

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

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-20859 f09670d94 -> 5b9454ef4


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/branch-feature-AMBARI-20859
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...',
 


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

Posted by rl...@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/branch-feature-AMBARI-20859
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):


[19/26] ambari git commit: AMBARI-21233. ambari-web hits JS error in dev mode (alexantonenko)

Posted by rl...@apache.org.
AMBARI-21233. ambari-web hits JS error in dev mode (alexantonenko)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f80c6ee45b5c6708aa9db98b9afe7ebbeba2afe7
Parents: fc00b2c
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue Jun 13 15:33:14 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Jun 13 15:33:14 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/controllers/global/cluster_controller.js       | 2 +-
 ambari-web/app/controllers/global/user_settings_controller.js | 3 +++
 ambari-web/app/mappers/repository_version_mapper.js           | 2 +-
 ambari-web/app/utils/ajax/ajax.js                             | 2 +-
 ambari-web/app/views/main/dashboard/widgets.js                | 2 +-
 ambari-web/test/controllers/wizard/step8_test.js              | 4 ++--
 ambari-web/test/views/main/dashboard/widgets_test.js          | 4 ++--
 7 files changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 29c979e..e68f281 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -144,7 +144,7 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
 
   setServerClock: function (data) {
     var clientClock = new Date().getTime();
-    var serverClock = (data.RootServiceComponents.server_clock).toString();
+    var serverClock = (Em.getWithDefault(data, 'RootServiceComponents.server_clock', '')).toString();
     serverClock = serverClock.length < 13 ? serverClock + '000' : serverClock;
     App.set('clockDistance', serverClock - clientClock);
     App.set('currentServerTime', parseInt(serverClock));

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/controllers/global/user_settings_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/user_settings_controller.js b/ambari-web/app/controllers/global/user_settings_controller.js
index 68d7e65..f2542bd 100644
--- a/ambari-web/app/controllers/global/user_settings_controller.js
+++ b/ambari-web/app/controllers/global/user_settings_controller.js
@@ -119,6 +119,9 @@ App.UserSettingsController = Em.Controller.extend(App.Persist, {
     var userSettings = {};
     var self = this;
     this.dataLoading().done(function (json) {
+      if (!json) {
+        return;
+      }
       Object.keys(userSettingsKeys).forEach(function (k) {
         var value = userSettingsKeys[k].defaultValue;
         if (undefined === json[userSettingsKeys[k].name]) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/mappers/repository_version_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/repository_version_mapper.js b/ambari-web/app/mappers/repository_version_mapper.js
index 8ef50db..f4858ba 100644
--- a/ambari-web/app/mappers/repository_version_mapper.js
+++ b/ambari-web/app/mappers/repository_version_mapper.js
@@ -145,7 +145,7 @@ App.repoVersionMapper = App.QuickDataMapper.create({
               resultService.push(this.parseIt(serviceObj, this.get('modelService')));
             }, this);
           }
-          repo.use_redhat_satellite = item.operating_systems[0].OperatingSystems.ambari_managed_repositories === false;
+          repo.use_redhat_satellite = Em.get(item, 'operating_systems.0.OperatingSystems.ambari_managed_repositories') === false;
           repo.operating_systems = osArray;
           repo.stack_services = serviceArray;
           resultRepoVersion.push(this.parseIt(repo, this.modelRepoVersion(isCurrentStackOnly)));

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index c595181..5919091 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -3101,7 +3101,7 @@ var ajax = Em.Object.extend({
   MAX_GET_URL_LENGTH: 2048,
 
   consoleMsg: function(name, url) {
-    return Em.I18n.t('app.logger.ajax').format(name, url.substr(7, 100));
+    return Em.I18n.t('app.logger.ajax').format(name, url ? url.substr(7, 100) : '');
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/views/main/dashboard/widgets.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets.js b/ambari-web/app/views/main/dashboard/widgets.js
index 2850200..ec10eae 100644
--- a/ambari-web/app/views/main/dashboard/widgets.js
+++ b/ambari-web/app/views/main/dashboard/widgets.js
@@ -157,7 +157,7 @@ App.MainDashboardWidgetsView = Em.View.extend(App.Persist, App.LocalStorage, App
   },
 
   resolveConfigDependencies: function(widgetsDefinition) {
-    var clusterEnv = App.router.get('clusterController.clusterEnv').properties;
+    var clusterEnv = App.router.get('clusterController.clusterEnv.properties') || {};
     if (clusterEnv.hide_yarn_memory_widget === 'true') {
       widgetsDefinition.findProperty('id', 20).isHiddenByDefault = true;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index 92668ff..29e6ae4 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -2342,7 +2342,7 @@ describe('App.WizardStep8Controller', function () {
   describe('#generateBlueprint', function () {
 
      beforeEach(function () {
-       var configs = Em.A([
+       var configsForTest = Em.A([
          Em.Object.create({filename: 'cluster-env.xml', name: 'p0', value: 'v0'}),
          Em.Object.create({filename: 'site1.xml', name: 'p11', value: 'v11'}),
          Em.Object.create({filename: 'site1.xml', name: 'p12', value: 'v12'}),
@@ -2376,7 +2376,7 @@ describe('App.WizardStep8Controller', function () {
        ]);
 
        installerStep8Controller = getController();
-       installerStep8Controller.set('configs', configs);
+       installerStep8Controller.set('configs', configsForTest);
        installerStep8Controller.set('allHosts', hosts);
        installerStep8Controller.set('content.services', services.filterProperty('isSelected'));
        installerStep8Controller.set('content.hosts', hosts);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/test/views/main/dashboard/widgets_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets_test.js b/ambari-web/test/views/main/dashboard/widgets_test.js
index 6e8a6eb..08269b5 100644
--- a/ambari-web/test/views/main/dashboard/widgets_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets_test.js
@@ -211,14 +211,14 @@ describe('App.MainDashboardWidgetsView', function () {
 
     it('isHiddenByDefault should be undefined', function() {
       var widgets = [{id: 20}];
-      this.mock.returns({properties: {'hide_yarn_memory_widget': 'false'}});
+      this.mock.returns({'hide_yarn_memory_widget': 'false'});
       view.resolveConfigDependencies(widgets);
       expect(widgets[0].isHiddenByDefault).to.be.undefined;
     });
 
     it('isHiddenByDefault should be true', function() {
       var widgets = [{id: 20}];
-      this.mock.returns({properties: {'hide_yarn_memory_widget': 'true'}});
+      this.mock.returns({'hide_yarn_memory_widget': 'true'});
       view.resolveConfigDependencies(widgets);
       expect(widgets[0].isHiddenByDefault).to.be.true;
     });


[21/26] ambari git commit: Updated team page. (yusaku)

Posted by rl...@apache.org.
Updated team page. (yusaku)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: df685b92d9c99f55757dc36858653130eaddf30c
Parents: 31ac3c2
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Tue Jun 13 13:36:33 2017 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Tue Jun 13 13:36:33 2017 -0700

----------------------------------------------------------------------
 docs/pom.xml | 12 ++++++++++++
 1 file changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/df685b92/docs/pom.xml
----------------------------------------------------------------------
diff --git a/docs/pom.xml b/docs/pom.xml
index 95478e4..e936c0d 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -458,6 +458,18 @@
             </organization>
         </developer>
         <developer>
+            <id>hapylestat</id>
+            <name>Dmytro Grinenko</name>
+            <email>hapylestat@apache.org</email>
+            <timezone>+2</timezone>
+            <roles>
+                <role>Committer</role>
+            </roles>
+            <organization>
+                Hortonworks
+            </organization>
+        </developer>        
+        <developer>
             <id>hitesh</id>
             <name>Hitesh Shah</name>
             <email>hitesh@apache.org</email>


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

Posted by rl...@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/branch-feature-AMBARI-20859
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);


[22/26] ambari git commit: AMBARI-21226. Add two new Spark thrift server related configurations in Spark stack (Saisai Shao via smohanty)

Posted by rl...@apache.org.
AMBARI-21226. Add two new Spark thrift server related configurations in Spark stack (Saisai Shao via smohanty)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 24e2cacb8ede081824b9162ba124acdffa33e0ec
Parents: df685b9
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Tue Jun 13 19:57:06 2017 -0700
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Tue Jun 13 19:57:12 2017 -0700

----------------------------------------------------------------------
 .../configuration/spark-thrift-sparkconf.xml    | 40 ++++++++++++++++++++
 .../configuration/spark2-thrift-sparkconf.xml   | 40 ++++++++++++++++++++
 .../stacks/HDP/2.6/upgrades/config-upgrade.xml  | 24 ++++++++++++
 .../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 26 +++++++++----
 .../stacks/HDP/2.6/upgrades/upgrade-2.6.xml     | 32 ++++++++++------
 5 files changed, 142 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
new file mode 100644
index 0000000..001ef1e
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<configuration supports_final="true">
+  <property>
+    <name>spark.yarn.executor.failuresValidityInterval</name>
+    <value>2h</value>
+    <description>
+      Defines the validity interval for executor failure tracking.
+      Executor failures which are older than the validity interval will be ignored.
+    </description>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
+    <name>spark.yarn.maxAppAttempts</name>
+    <value>1</value>
+    <description>
+      The maximum number of attempts that will be made to submit the application.
+      It should be no larger than the global number of max attempts in the YARN configuration.
+    </description>
+    <on-ambari-upgrade add="false"/>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
new file mode 100644
index 0000000..001ef1e
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<configuration supports_final="true">
+  <property>
+    <name>spark.yarn.executor.failuresValidityInterval</name>
+    <value>2h</value>
+    <description>
+      Defines the validity interval for executor failure tracking.
+      Executor failures which are older than the validity interval will be ignored.
+    </description>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
+    <name>spark.yarn.maxAppAttempts</name>
+    <value>1</value>
+    <description>
+      The maximum number of attempts that will be made to submit the application.
+      It should be no larger than the global number of max attempts in the YARN configuration.
+    </description>
+    <on-ambari-upgrade add="false"/>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
index 1610bb5..564dead 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
@@ -168,5 +168,29 @@
       </component>
     </service>
 
+    <service name="SPARK">
+      <component name="SPARK_THRIFTSERVER">
+        <changes>
+          <definition xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver">
+            <type>spark-thrift-sparkconf</type>
+            <set key="spark.yarn.executor.failuresValidityInterval" value="2h"/>
+            <set key="spark.yarn.maxAppAttempts" value="1"/>
+          </definition>
+        </changes>
+      </component>
+    </service>
+
+    <service name="SPARK2">
+      <component name="SPARK2_THRIFTSERVER">
+        <changes>
+          <definition xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver">
+            <type>spark2-thrift-sparkconf</type>
+            <set key="spark.yarn.executor.failuresValidityInterval" value="2h"/>
+            <set key="spark.yarn.maxAppAttempts" value="1"/>
+          </definition>
+        </changes>
+      </component>
+    </service>
+
   </services>
 </upgrade-config-changes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
index 1cdd184..6b827c9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
@@ -75,7 +75,7 @@
       <service name="FLUME">
         <component>FLUME_HANDLER</component>
       </service>
-      
+
       <service name="ACCUMULO">
         <component>ACCUMULO_TRACER</component>
         <component>ACCUMULO_GC</component>
@@ -284,7 +284,7 @@
       </execute-stage>
     </group>
 
-    
+
     <group xsi:type="cluster" name="Upgrade service configs" title="Upgrade service configs">
       <direction>UPGRADE</direction> <!--  prevent config changes on downgrade -->
       <skippable>true</skippable> <!-- May fix configuration problems manually -->
@@ -322,7 +322,7 @@
       <execute-stage service="YARN" component="RESOURCEMANAGER" title="Apply config changes for Ranger Yarn plugin">
         <task xsi:type="configure" id="hdp_2_6_maint_ranger_yarn_plugin_cluster_name"/>
       </execute-stage>
-      
+
       <execute-stage service="YARN" component="RESOURCEMANAGER" title="Apply config changes for YARN Preemption">
         <task xsi:type="configure" id="hdp_2_6_yarn_preemption"/>
       </execute-stage>
@@ -353,8 +353,18 @@
         <task xsi:type="configure" id="hdp_2_6_maint_ranger_kms_plugin_cluster_name"/>
       </execute-stage>
 
+      <!--SPARK-->
+      <execute-stage service="SPARK" component="SPARK_THRIFTSERVER" title="Apply config changes for Spark ThriftServer">
+        <task xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver"/>
+      </execute-stage>
+
+      <!--SPARK2-->
+      <execute-stage service="SPARK2" component="SPARK2_THRIFTSERVER" title="Apply config changes for Spark2 ThriftServer">
+        <task xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver"/>
+      </execute-stage>
+
     </group>
-    
+
 
     <!--
     After processing this group, the user-specified Kerberos descriptor will be updated to work with
@@ -383,7 +393,7 @@
         </task>
       </execute-stage>
     </group>
-    
+
     <!-- Now, restart all of the services. -->
     <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper">
       <service-check>false</service-check>
@@ -747,7 +757,7 @@
         <component>FLUME_HANDLER</component>
       </service>
     </group>
-    
+
     <group xsi:type="restart" name="ACCUMULO" title="Accumulo">
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -790,7 +800,7 @@
 
     <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
       <direction>UPGRADE</direction>
-      
+
       <execute-stage title="Check Component Versions">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
       </execute-stage>
@@ -870,7 +880,7 @@
             <function>setup_ranger_java_patches</function>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
index 3e7e3d7..9227669 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
@@ -168,7 +168,7 @@
         <component>HBASE_MASTER</component>
       </service>
     </group>
-    
+
     <group name="SERVICE_CHECK_1" title="All Service Checks" xsi:type="service-check">
       <direction>UPGRADE</direction>
       <skippable>true</skippable>
@@ -184,7 +184,7 @@
         <service>LOGSEARCH</service>
       </exclude>
     </group>
-    
+
     <group name="CORE_SLAVES" title="Core Slaves" xsi:type="colocated">
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -192,7 +192,7 @@
         <component>DATANODE</component>
         <component>NFS_GATEWAY</component>
       </service>
-      
+
       <service name="HBASE">
         <component>HBASE_REGIONSERVER</component>
         <component>PHOENIX_QUERY_SERVER</component>
@@ -208,7 +208,7 @@
         <message>The initial batch of {{components}} hosts have been {{direction.past}}. You are advised to check the hosts and perform cluster/workload-specific tests against your cluster to ensure proper operation before proceeding with {{direction.text}} of the remaining services.</message>
       </batch>
     </group>
-    
+
     <group name="SERVICE_CHECK_2" title="All Service Checks" xsi:type="service-check">
       <direction>UPGRADE</direction>
       <skippable>true</skippable>
@@ -460,7 +460,7 @@
 
     <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
       <direction>UPGRADE</direction>
-      
+
       <execute-stage title="Check Component Versions">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
       </execute-stage>
@@ -469,7 +469,7 @@
     <group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}">
       <skippable>true</skippable>
       <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      
+
       <execute-stage title="Confirm Finalize">
         <direction>UPGRADE</direction>
         <task xsi:type="manual">
@@ -493,7 +493,7 @@
           <function>finalize_rolling_upgrade</function>
         </task>
       </execute-stage>
-      
+
       <execute-stage title="Save Cluster State">
         <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction">
         </task>
@@ -544,7 +544,7 @@
             <function>setup_ranger_java_patches</function>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>
@@ -645,7 +645,7 @@
         </upgrade>
       </component>
     </service>
-    
+
     <service name="SLIDER">
       <component name="SLIDER">
         <upgrade>
@@ -667,7 +667,7 @@
             <summary>Verifying LZO codec path for mapreduce</summary>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
 
         <upgrade>
@@ -748,9 +748,9 @@
             <summary>Verifying LZO codec path for Tez</summary>
           </task>
         </pre-upgrade>
-        
+
         <pre-downgrade copy-upgrade="true" />
-        
+
         <upgrade>
           <task xsi:type="restart-task" />
         </upgrade>
@@ -830,6 +830,10 @@
         </upgrade>
       </component>
       <component name="SPARK_THRIFTSERVER">
+        <pre-upgrade>
+          <task xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver"/>
+        </pre-upgrade>
+        <pre-downgrade />
         <upgrade>
           <task xsi:type="restart-task" />
         </upgrade>
@@ -853,6 +857,10 @@
         </upgrade>
       </component>
       <component name="SPARK2_THRIFTSERVER">
+        <pre-upgrade>
+          <task xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver"/>
+        </pre-upgrade>
+        <pre-downgrade />
         <upgrade>
           <task xsi:type="restart-task" />
         </upgrade>


[24/26] ambari git commit: AMBARI-21238. Kafka userprincipal to shortname is not using AUTH_TO_LOCAL rules for authorization (echekanskiy)

Posted by rl...@apache.org.
AMBARI-21238. Kafka userprincipal to shortname is not using AUTH_TO_LOCAL rules for authorization (echekanskiy)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f1e89e4d2cc81d8ba14d465fd5badfe77f329a69
Parents: 03812cb
Author: Eugene Chekanskiy <ec...@hortonworks.com>
Authored: Wed Jun 14 16:31:28 2017 +0300
Committer: Eugene Chekanskiy <ec...@hortonworks.com>
Committed: Wed Jun 14 16:31:28 2017 +0300

----------------------------------------------------------------------
 .../ambari/server/controller/AuthToLocalBuilder.java      | 10 ++++++++--
 .../common-services/KAFKA/0.10.0.3.0/kerberos.json        |  3 +++
 .../resources/common-services/KAFKA/0.10.0/kerberos.json  |  3 +++
 .../resources/common-services/KAFKA/0.9.0/kerberos.json   |  3 +++
 .../resources/stacks/HDF/2.0/services/KAFKA/kerberos.json |  3 +++
 5 files changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
index 33c8f3b..1d4abdd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
@@ -242,6 +242,9 @@ public class AuthToLocalBuilder implements Cloneable {
         case SPACES:
           stringBuilder.append(" ");
           break;
+        case COMMA:
+          stringBuilder.append(",");
+          break;
         default:
           throw new UnsupportedOperationException(String.format("The auth-to-local rule concatenation type is not supported: %s",
               concatenationType.name()));
@@ -661,8 +664,11 @@ public class AuthToLocalBuilder implements Cloneable {
     /**
      * Each rule is appended to the set of rules using a space - the ruleset exists on a single line
      */
-    SPACES;
-
+    SPACES,
+    /**
+     * Each rule is appended to the set of rules using comma - the ruleset exists on a single line.
+     */
+    COMMA;
     /**
      * Translate a string declaring a concatenation type to the enumerated value.
      * <p/>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
index eb31ad6..b4d0018 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
@@ -29,6 +29,9 @@
           }
         }
       ],
+      "auth_to_local_properties" : [
+        "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+      ],
       "components": [
         {
           "name": "KAFKA_BROKER",

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
index eb31ad6..b4d0018 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
@@ -29,6 +29,9 @@
           }
         }
       ],
+      "auth_to_local_properties" : [
+        "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+      ],
       "components": [
         {
           "name": "KAFKA_BROKER",

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
index 7500891..247a602 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
@@ -19,6 +19,9 @@
           }
         }
       ],
+      "auth_to_local_properties" : [
+        "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+      ],
       "components": [
         {
           "name": "KAFKA_BROKER",

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
index e1e6461..aa351d1 100644
--- a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
+++ b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
@@ -28,6 +28,9 @@
           }
         }
       ],
+      "auth_to_local_properties" : [
+        "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+      ],
       "components": [
         {
           "name": "KAFKA_BROKER",


[23/26] ambari git commit: AMBARI-21207. Extend Swagger Maven plugin to handle nested APIs (Balazs Bence Sari via adoroszlai)

Posted by rl...@apache.org.
AMBARI-21207. Extend Swagger Maven plugin to handle nested APIs (Balazs Bence Sari via adoroszlai)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 03812cba4fff24093cf10035667d1a99d71e9a80
Parents: 24e2cac
Author: Balazs Bence Sari <bs...@hortonworks.com>
Authored: Wed Jun 14 14:38:10 2017 +0200
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Wed Jun 14 14:38:24 2017 +0200

----------------------------------------------------------------------
 ambari-project/pom.xml                          |  47 +++-
 ambari-server/pom.xml                           |  28 +--
 .../server/api/services/ClusterService.java     |   2 +-
 .../server/api/services/ServiceService.java     |   3 +-
 utility/pom.xml                                 |  20 ++
 .../ambari/swagger/AmbariSwaggerReader.java     | 222 +++++++++++++++++++
 .../ambari/swagger/AmbariSwaggerReaderTest.java | 182 +++++++++++++++
 utility/src/test/resources/log4j.properties     |  19 ++
 8 files changed, 499 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 9bb2e26..b06bd18 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -32,6 +32,8 @@
     <powermock.version>1.6.3</powermock.version>
     <jetty.version>8.1.19.v20160209</jetty.version>
     <checkstyle.version>6.19</checkstyle.version> <!-- last version that does not require Java 8 -->
+    <swagger.version>1.5.10</swagger.version>
+    <slf4j.version>1.7.20</slf4j.version>
     <forkCount>4</forkCount>
     <reuseForks>false</reuseForks>
   </properties>
@@ -210,12 +212,22 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
-        <version>1.7.20</version>
+        <version>${slf4j.version}</version>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
-        <version>1.7.20</version>
+        <version>${slf4j.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>jul-to-slf4j</artifactId>
+        <version>${slf4j.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>jcl-over-slf4j</artifactId>
+        <version>${slf4j.version}</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
@@ -312,7 +324,6 @@
         <artifactId>ant-launcher</artifactId>
         <version>1.7.1</version>
       </dependency>
-
       <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
@@ -486,6 +497,36 @@
         <artifactId>checkstyle</artifactId>
         <version>${checkstyle.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.easymock</groupId>
+        <artifactId>easymock</artifactId>
+        <version>3.4</version>
+      </dependency>
+      <dependency>
+        <groupId>io.swagger</groupId>
+        <artifactId>swagger-annotations</artifactId>
+        <version>${swagger.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>io.swagger</groupId>
+        <artifactId>swagger-core</artifactId>
+        <version>${swagger.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>io.swagger</groupId>
+        <artifactId>swagger-jaxrs</artifactId>
+        <version>${swagger.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>io.swagger</groupId>
+        <artifactId>swagger-models</artifactId>
+        <version>${swagger.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.github.kongchen</groupId>
+        <artifactId>swagger-maven-plugin</artifactId>
+        <version>3.1.4</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
   <build>

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index a1cd239..ac78595 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -48,7 +48,6 @@
     <tarballResourcesFolder>src/main/resources</tarballResourcesFolder>
     <skipPythonTests>false</skipPythonTests>
     <hadoop.version>2.7.2</hadoop.version>
-    <swagger.version>1.5.10</swagger.version>
     <empty.dir>src/main/package</empty.dir> <!-- any directory in project with not very big amount of files (not to waste-load them) -->
     <el.log>ALL</el.log> <!-- log level for EclipseLink eclipselink-staticweave-maven-plugin -->
     <xlint>none</xlint> <!-- passed to Java compiler -Xlint: flag -->
@@ -413,10 +412,10 @@
       <plugin>
         <groupId>com.github.kongchen</groupId>
         <artifactId>swagger-maven-plugin</artifactId>
-        <version>3.1.4</version>
         <configuration>
           <apiSources>
             <apiSource>
+              <swaggerApiReader>org.apache.ambari.swagger.AmbariSwaggerReader</swaggerApiReader>
               <springmvc>false</springmvc>
               <locations>org.apache.ambari.server.api.services</locations>
               <schemes>http,https</schemes>
@@ -1291,12 +1290,18 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>1.7.20</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jul-to-slf4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>
@@ -1426,17 +1431,14 @@
     <dependency>
       <groupId>io.swagger</groupId>
       <artifactId>swagger-annotations</artifactId>
-      <version>${swagger.version}</version>
     </dependency>
     <dependency>
       <groupId>io.swagger</groupId>
       <artifactId>swagger-core</artifactId>
-      <version>${swagger.version}</version>
     </dependency>
     <dependency>
       <groupId>io.swagger</groupId>
       <artifactId>swagger-jaxrs</artifactId>
-      <version>${swagger.version}</version>
       <exclusions>
         <exclusion>
           <!-- Because it is already in the jersey one and causes the shade plugin to be confused -->
@@ -1448,7 +1450,6 @@
     <dependency>
       <groupId>io.swagger</groupId>
       <artifactId>swagger-models</artifactId>
-      <version>${swagger.version}</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.jackson</groupId>
@@ -1477,7 +1478,6 @@
     <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
-      <version>3.4</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -1651,16 +1651,6 @@
       <scope>compile</scope>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jul-to-slf4j</artifactId>
-      <version>1.7.20</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-      <version>1.7.20</version>
-    </dependency>
-    <dependency>
       <groupId>io.dropwizard.metrics</groupId>
       <artifactId>metrics-core</artifactId>
       <version>3.1.0</version>

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
index f61fb2a..44d50731 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
@@ -505,7 +505,7 @@ public class ClusterService extends BaseService {
    * @return the services service
    */
   @Path("{clusterName}/services")
-  public ServiceService getServiceHandler(@Context javax.ws.rs.core.Request request, @PathParam("clusterName") String clusterName) {
+  public ServiceService getServiceHandler(@Context javax.ws.rs.core.Request request, @ApiParam @PathParam("clusterName") String clusterName) {
     return new ServiceService(clusterName);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
index a28c4aa..6ab2704 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
@@ -51,7 +51,7 @@ import io.swagger.annotations.ApiResponses;
 /**
  * Service responsible for services resource requests.
  */
-@Api(value = "Services", description = "Endpoint for service specific operations")
+@Api(value = "Cluster Services", description = "Endpoint for service specific operations")
 public class ServiceService extends BaseService {
   private static final String SERVICE_REQUEST_TYPE = "org.apache.ambari.server.controller.ServiceRequestSwagger";
   private static final String ARTIFACT_REQUEST_TYPE = "org.apache.ambari.server.controller.ClusterServiceArtifactRequest";
@@ -112,6 +112,7 @@ public class ServiceService extends BaseService {
    * @return service collection resource representation
    */
   @GET
+  @Path("") // This is needed if class level path is not present otherwise no Swagger docs will be generated for this method
   @Produces(MediaType.TEXT_PLAIN)
   @ApiOperation(value = "Get all services",
       nickname = "ServiceService#getServices",

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/pom.xml
----------------------------------------------------------------------
diff --git a/utility/pom.xml b/utility/pom.xml
index 918080e..ac91474 100644
--- a/utility/pom.xml
+++ b/utility/pom.xml
@@ -33,6 +33,21 @@
 
   <dependencies>
     <dependency>
+      <groupId>com.github.kongchen</groupId>
+      <artifactId>swagger-maven-plugin</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>compile</scope>    <!-- has to be compile-time dependency on junit -->
@@ -53,6 +68,11 @@
       <artifactId>guava</artifactId>
       <version>19.0</version> <!-- required for checkstyle -->
     </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
----------------------------------------------------------------------
diff --git a/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java b/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
new file mode 100644
index 0000000..e258fc4
--- /dev/null
+++ b/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.swagger;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.ws.rs.Path;
+
+import org.apache.maven.plugin.logging.Log;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.AnnotationUtils;
+
+import com.github.kongchen.swagger.docgen.reader.JaxrsReader;
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import io.swagger.annotations.Api;
+import io.swagger.models.Operation;
+import io.swagger.models.Swagger;
+import io.swagger.models.Tag;
+import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.PathParameter;
+
+/**
+ * Customized {@link com.github.kongchen.swagger.docgen.reader.ClassSwaggerReader} implementation to
+ * treat nested API's.
+ */
+public class AmbariSwaggerReader extends JaxrsReader {
+
+  /**
+   * Logger instance.
+   */
+  protected final static Logger logger = LoggerFactory.getLogger(AmbariSwaggerReader.class);
+
+  public AmbariSwaggerReader(Swagger swagger, Log LOG) {
+    super(swagger, LOG);
+  }
+
+  private final Map<Class<?>, NestedApiRecord> nestedAPIs = Maps.newHashMap();
+
+  @Override
+  public Swagger getSwagger() {
+    if (null == this.swagger) {
+      this.swagger = new Swagger();
+    }
+    return this.swagger;
+  }
+
+  /**
+   * Original method is overwritten so that to gather information about top level api - nested api relations
+   */
+  @Override
+  public Swagger read(Set<Class<?>> classes) {
+    // scan for and register nested API classes
+    logger.debug("Looking for nested API's");
+    for (Class<?> cls: classes) {
+      logger.debug("Examining API {}", cls.getSimpleName());
+      for (Method method: cls.getMethods()) {
+        Path methodPath = AnnotationUtils.findAnnotation(method, Path.class);
+        if (null != methodPath) {
+          Class<?> returnType = method.getReturnType();
+          Api nestedApi = AnnotationUtils.findAnnotation(returnType, Api.class);
+          Path nestedApiPath = AnnotationUtils.findAnnotation(returnType, Path.class);
+          logger.debug("Examinig API method {}#{}, path={}, returnType={}", cls.getSimpleName(), method.getName(),
+              nestedApiPath != null ? nestedApiPath.value() : null, returnType.getSimpleName());
+          if (null != nestedApi) {
+            if (null != nestedApiPath) {
+              logger.info("This class exists both as top level and nested API: {}, treating it as top level API",
+                  returnType.getName());
+            }
+            else {
+              Path apiPath = AnnotationUtils.findAnnotation(cls, Path.class);
+              String apiPathValue;
+              if (null == apiPath) {
+                logger.warn("Parent api {} also seems to be a nested API. The current version does not support " +
+                    "multi-level nesting.");
+                apiPathValue = "";
+              }
+              else {
+                apiPathValue = apiPath.value();
+              }
+              NestedApiRecord nar = new NestedApiRecord(returnType, cls, apiPathValue, method, methodPath.value());
+              if (nestedAPIs.containsKey(returnType)) {
+                logger.warn("{} is a nested API of multiple top level API's. Ignoring top level API {}", returnType, cls);
+              }
+              else {
+                logger.info("Registering nested API: {}", returnType);
+                nestedAPIs.put(returnType, nar);
+              }
+            }
+          }
+        }
+      }
+    }
+    logger.info("Found {} nested API's", nestedAPIs.size());
+    // With all information gathered, call superclass implementation
+    return super.read(classes);
+  }
+
+  /**
+   * Original method is overwritten to handle nested api's properly
+   */
+  @Override
+  protected Swagger read(Class<?> cls, String parentPath,
+                         String parentMethod,
+                         boolean readHidden,
+                         String[] parentConsumes,
+                         String[] parentProduces,
+                         Map<String, Tag> parentTags,
+                         List<Parameter> parentParameters) {
+    NestedApiRecord nestedApiRecord = nestedAPIs.get(cls);
+    if (null != nestedApiRecord) {
+      logger.info("Processing nested API: {}", nestedApiRecord);
+      // Get the path parameters of the parent API method. All methods of the nested API class should include these
+      // parameters.
+      Operation operation = parseMethod(nestedApiRecord.parentMethod);
+      List<Parameter> pathParameters = ImmutableList.copyOf(
+          Collections2.filter(operation.getParameters(), Predicates.instanceOf(PathParameter.class)));
+      logger.info("Will copy path params from parent method: {}",
+          Lists.transform(pathParameters, new ParameterToName()));
+      return super.read(cls,
+          joinPaths(nestedApiRecord.parentApiPath, nestedApiRecord.parentMethodPath, parentPath),
+          parentMethod, readHidden,
+          parentConsumes, parentProduces, parentTags, pathParameters);
+    }
+    else {
+      logger.info("Processing top level API: {}", cls.getSimpleName());
+      return super.read(cls, parentPath, parentMethod, readHidden, parentConsumes, parentProduces, parentTags, parentParameters);
+    }
+  }
+
+  /**
+   * Joins path elements properly with slashes avoiding duplicate slashes.
+   *
+   * @param firstPath the first path element
+   * @param paths optionally other path elements
+   * @return the joined path
+   */
+  static String joinPaths(String firstPath, String... paths) {
+    StringBuilder joined = new StringBuilder(firstPath);
+    for(String path: paths) {
+      if (path.isEmpty()) { /* NOP */ }
+      else if (joined.length() == 0) {
+        joined.append(path);
+      }
+      else if (joined.charAt(joined.length() - 1) == '/') {
+        if (path.startsWith("/")) {
+          joined.append(path.substring(1, path.length()));
+        }
+        else {
+          joined.append(path);
+        }
+      }
+      else {
+        if (path.startsWith("/")) {
+          joined.append(path);
+        }
+        else {
+          joined.append('/').append(path);
+        }
+
+      }
+    }
+    return joined.toString();
+  }
+}
+
+class ParameterToName implements Function<Parameter, String> {
+  public String apply(Parameter input) {
+    return input.getName();
+  }
+}
+
+class NestedApiRecord {
+  final Class<?> nestedApi;
+  final Class<?> parentApi;
+  final String parentApiPath;
+  final Method parentMethod;
+  final String parentMethodPath;
+
+  public NestedApiRecord(Class<?> nestedApi, Class<?> parentApi, String parentApiPath, Method parentMethod, String parentMethodPath) {
+    this.nestedApi = nestedApi;
+    this.parentApi = parentApi;
+    this.parentApiPath = parentApiPath;
+    this.parentMethod = parentMethod;
+    this.parentMethodPath = parentMethodPath;
+  }
+
+  @Override
+  public String toString() {
+    return "NestedApiRecord {" +
+        "nestedApi=" + nestedApi +
+        ", parentApi=" + parentApi +
+        ", parentApiPath='" + parentApiPath + '\'' +
+        ", parentMethod=" + parentMethod +
+        ", parentMethodPath='" + parentMethodPath + '\'' +
+        '}';
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
----------------------------------------------------------------------
diff --git a/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java b/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
new file mode 100644
index 0000000..a102152
--- /dev/null
+++ b/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.swagger;
+
+import static org.easymock.EasyMock.createMock;
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import org.apache.commons.collections.set.ListOrderedSet;
+import org.apache.maven.plugin.logging.Log;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.models.Response;
+import io.swagger.models.Swagger;
+import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.PathParameter;
+
+public class AmbariSwaggerReaderTest {
+
+
+  /**
+   * Test the {@link AmbariSwaggerReader#joinPaths(String, String...)} method
+   */
+  @Test
+  public void testJoinPaths() {
+    assertEquals("/toplevel/nested/{param}/list",
+        AmbariSwaggerReader.joinPaths("", "/", "/", "", "toplevel", "/nested/", "/{param}", "list"));
+    assertEquals("/toplevel/nested/{param}/list",
+        AmbariSwaggerReader.joinPaths("/", "toplevel", "", "/nested/", "/", "/{param}", "list", ""));
+  }
+
+  /**
+   * Test the basic case: one top level API and one nested API, each with one operation
+   */
+  @Test
+  public void swaggerBasicCase() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    Swagger swagger = asr.read(ImmutableSet.of(TopLevelAPI.class, NestedAPI.class));
+    assertEquals(ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list"),
+        swagger.getPaths().keySet());
+    assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param");
+  }
+
+  /**
+   * Test conflicting nested API's (the same API's are returned from different top level API's).
+   * In this case the nested API should be associated to the first processed top level API.
+   */
+  @Test
+  public void swaggerConflictingNestedApis() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    ListOrderedSet classes = ListOrderedSet.decorate(
+        Lists.newArrayList(TopLevelAPI.class, AnotherTopLevelAPI.class, NestedAPI.class));
+    Swagger swagger = asr.read(classes);
+    assertEquals(
+        ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list", "/toplevel2/anotherTop"),
+        swagger.getPaths().keySet());
+    assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param");
+  }
+
+  /**
+   * If an API is both top level (the class has a @Path annotation) and nested (class is a return type of an
+   * API operation) then it should be treated as top level.
+   */
+  @Test
+  public void swaggerApiThatIsBothTopLevelAndNestedIsCountedAsTopLevel() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    Swagger swagger = asr.read(ImmutableSet.of(YetAnotherTopLevelAPI.class, NestedAndTopLevelAPI.class));
+    assertEquals(ImmutableSet.of("/toplevel3/yetAnotherTop", "/canBeReachedFromTopToo/list"),
+        swagger.getPaths().keySet());
+  }
+
+
+  /**
+   * Verify that the top level API's path parameters are transferred to the nested API.
+   */
+  private static void assertPathParamsExist(Swagger swagger, String path, String... expectedPathParams) {
+    List<Parameter> parameters = swagger.getPath(path).getGet().getParameters();
+    assertNotNull("No path parameters for path: " + path, parameters);
+    Set<String> pathParamNames = new HashSet<>();
+    for (Parameter param: parameters) {
+      if (param instanceof PathParameter) {
+        pathParamNames.add(param.getName());
+      }
+    }
+    Set<String> missingPathParams = Sets.difference(ImmutableSet.copyOf(expectedPathParams), pathParamNames);
+    assertTrue("Expected path params for [" + path + "] are missing: " + missingPathParams, missingPathParams.isEmpty());
+  }
+
+}
+
+@Path("/toplevel")
+@Api(value = "Top Level", description = "A top level API")
+abstract class TopLevelAPI {
+
+  @GET
+  @Path("/top")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+  @Path("{param}/nested")
+  public abstract NestedAPI getNested(@ApiParam @PathParam(value = "param") String param);
+}
+
+@Path("/toplevel2")
+@Api(value = "Top Level 2", description = "Another top level API")
+abstract class AnotherTopLevelAPI {
+
+  @GET
+  @Path("/anotherTop")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+  @Path("{param}/anotherNested")
+  public abstract NestedAPI getSecondNested(@ApiParam @PathParam(value = "param") String param);
+
+}
+
+@Path("/toplevel3")
+@Api(value = "Top Level 3", description = "Yet another top level API")
+abstract class YetAnotherTopLevelAPI {
+
+  @GET
+  @Path("/yetAnotherTop")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+  @Path("{param}/nested")
+  public abstract NestedAPI getFirstNested(@ApiParam @PathParam(value = "param") String param);
+
+}
+
+@Api(value = "Nested", description = "A nested API")
+abstract class NestedAPI {
+
+  @GET
+  @Path("/list")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+}
+
+@Path("/canBeReachedFromTopToo")
+@Api(value = "Nested and Top Level", description = "An API that is both nested and top level")
+abstract class NestedAndTopLevelAPI {
+
+  @GET
+  @Path("/list")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/utility/src/test/resources/log4j.properties b/utility/src/test/resources/log4j.properties
new file mode 100644
index 0000000..c088bb7
--- /dev/null
+++ b/utility/src/test/resources/log4j.properties
@@ -0,0 +1,19 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+
+# log4j configuration used during build and unit tests
+
+log4j.rootLogger=INFO,stdout
+log4j.threshold=ALL
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2} (%F:%M(%L)) - %m%n


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

Posted by rl...@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/branch-feature-AMBARI-20859
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
----------------------------------------------------------------------


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

Posted by rl...@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/branch-feature-AMBARI-20859
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({


[15/26] ambari git commit: AMBARI-21227 Updating Ranger install.properties file (mugdha)

Posted by rl...@apache.org.
AMBARI-21227 Updating Ranger install.properties file (mugdha)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 1f19461f10a2c54d3ed81efedc3f9d3d64397700
Parents: 8cdf232
Author: Mugdha Varadkar <mu...@apache.org>
Authored: Mon Jun 12 14:53:45 2017 +0530
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Tue Jun 13 10:18:23 2017 +0530

----------------------------------------------------------------------
 .../libraries/providers/modify_properties_file.py      |  9 +++++++--
 .../RANGER/0.4.0/package/scripts/ranger_admin.py       | 11 ++++++++++-
 .../RANGER/0.4.0/package/scripts/setup_ranger_xml.py   | 13 +++++++++++++
 .../RANGER_KMS/0.5.0.2.3/package/scripts/kms.py        |  8 ++++++++
 .../RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py | 10 +++++++++-
 .../test/python/stacks/2.2/RANGER/test_ranger_admin.py |  8 ++++++++
 .../test/python/stacks/2.5/RANGER/test_ranger_admin.py | 10 ++++++++++
 .../python/stacks/2.5/RANGER_KMS/test_kms_server.py    | 10 ++++++++++
 .../test/python/stacks/2.6/RANGER/test_ranger_admin.py | 10 ++++++++++
 9 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py b/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
index 53d7d2f..f45f27d 100644
--- a/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
+++ b/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
@@ -37,6 +37,7 @@ class ModifyPropertiesFileProvider(Provider):
     properties = self.resource.properties
     unsaved_values = properties.keys()
     new_content_lines = []
+    final_content_lines = ""
     
     if sudo.path_isfile(filename):
       file_content = sudo.read_file(filename, encoding=self.resource.encoding)
@@ -62,9 +63,13 @@ class ModifyPropertiesFileProvider(Provider):
       value = InlineTemplate(unicode(properties[property_name])).get_content()
       line = u"{0}{1}{2}".format(unicode(property_name), delimiter, value)
       new_content_lines.append(line)
-          
+
+    final_content_lines = u"\n".join(new_content_lines)
+    if not final_content_lines.endswith("\n"):
+      final_content_lines = final_content_lines + "\n"
+
     File (filename,
-          content = u"\n".join(new_content_lines) + "\n",
+          content = final_content_lines,
           owner = self.resource.owner,
           group = self.resource.group,
           mode = self.resource.mode,

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
index b849d58..ecbacbf 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
@@ -29,7 +29,7 @@ from resource_management.libraries.functions.format import format
 from resource_management.core.logger import Logger
 from resource_management.core import shell
 from ranger_service import ranger_service
-from setup_ranger_xml import setup_ranger_audit_solr, setup_ranger_admin_passwd_change
+from setup_ranger_xml import setup_ranger_audit_solr, setup_ranger_admin_passwd_change, update_password_configs
 from resource_management.libraries.functions import solr_cloud_util
 from ambari_commons.constants import UPGRADE_TYPE_NON_ROLLING, UPGRADE_TYPE_ROLLING
 from resource_management.libraries.functions.constants import Direction
@@ -45,6 +45,14 @@ class RangerAdmin(Script):
     self.install_packages(env)
     import params
     env.set_params(params)
+
+    # taking backup of install.properties file
+    Execute(('cp', '-f', format('{ranger_home}/install.properties'), format('{ranger_home}/install-backup.properties')),
+      not_if = format('ls {ranger_home}/install-backup.properties'),
+      only_if = format('ls {ranger_home}/install.properties'),
+      sudo = True
+    )
+
     # call config and setup db only in case of HDP version < 2.6
     if not params.stack_supports_ranger_setup_db_on_start:
       self.configure(env, setup_db=True)
@@ -92,6 +100,7 @@ class RangerAdmin(Script):
       solr_cloud_util.setup_solr_client(params.config, custom_log4j = params.custom_log4j)
       setup_ranger_audit_solr()
 
+    update_password_configs()
     ranger_service('ranger_admin')
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
index 26e6578..85eb796 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
@@ -851,3 +851,16 @@ def setup_tagsync_ssl_configs():
        mode = 0640
        )
   Logger.info("Configuring tagsync-ssl configurations done successfully.")
+
+def update_password_configs():
+  import params
+
+  password_configs = {'db_root_password': '_', 'db_password': '_'}
+
+  if params.stack_supports_ranger_audit_db:
+    password_configs['audit_db_password'] = '_'
+
+  ModifyPropertiesFile(format("{ranger_home}/install.properties"),
+    properties = password_configs,
+    owner = params.unix_user,
+  )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
index 5a25b92..bbc438b 100755
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
@@ -675,3 +675,11 @@ def check_ranger_service_support_kerberos(user, keytab, principal):
   else:
     Logger.error('Ranger service is not reachable')
     return False
+
+def update_password_configs():
+  import params
+
+  ModifyPropertiesFile(format("{kms_home}/install.properties"),
+    properties = {'db_root_password': '_', 'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_'},
+    owner = params.kms_user,
+  )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
index 44d61da..829a998 100755
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
@@ -27,7 +27,7 @@ from resource_management.libraries.functions.format import format
 from resource_management.core.logger import Logger
 from resource_management.core import shell
 from resource_management.libraries.functions.default import default
-from kms import kms, setup_kms_db, setup_java_patch, enable_kms_plugin, setup_kms_jce
+from kms import kms, setup_kms_db, setup_java_patch, enable_kms_plugin, setup_kms_jce, update_password_configs
 from kms_service import kms_service
 import upgrade
 
@@ -41,6 +41,13 @@ class KmsServer(Script):
     import params
     env.set_params(params)
 
+    # taking backup of install.properties file
+    Execute(('cp', '-f', format('{kms_home}/install.properties'), format('{kms_home}/install-backup.properties')),
+      not_if = format('ls {kms_home}/install-backup.properties'),
+      only_if = format('ls {kms_home}/install.properties'),
+      sudo = True
+    )
+
     setup_kms_db()
     self.configure(env)
     setup_java_patch()
@@ -62,6 +69,7 @@ class KmsServer(Script):
     self.configure(env)
     enable_kms_plugin()
     setup_kms_jce()
+    update_password_configs()
     kms_service(action = 'start', upgrade_type=upgrade_type)
 
   def status(self, env):

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
index d338c28..961be84 100644
--- a/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
@@ -48,6 +48,10 @@ class TestRangerAdmin(RMFTestCase):
                    target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     self.assert_configure_default()
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_', 'audit_db_password': '_'}
+    )
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
         environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
         not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -89,6 +93,10 @@ class TestRangerAdmin(RMFTestCase):
                    target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     self.assert_configure_secured()
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_', 'audit_db_password': '_'}
+    )
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
         environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
         not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
index 8f2bd2e..9ba1275 100644
--- a/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
@@ -83,6 +83,11 @@ class TestRangerAdmin(RMFTestCase):
 
     self.assertResourceCalledRegexp('^Execute$', '^ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181/infra-solr --create-collection --collection ranger_audits --config-set ranger_audits --shards 1 --replication 1 --max-shards 1 --retry 5 --interval 10')
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
       environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
       not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -178,6 +183,11 @@ class TestRangerAdmin(RMFTestCase):
     self.assertResourceCalled('Execute','ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /ambari-solr/configs/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
     self.assertResourceCalled('Execute', 'ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /ambari-solr/collections/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
       environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
       not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
index f6f0af3..7ebe2f5 100644
--- a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
+++ b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
@@ -236,6 +236,11 @@ class TestRangerKMS(RMFTestCase):
       sudo=True
     )
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-kms/install.properties',
+      owner = 'kms',
+      properties = {'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/hdp/current/ranger-kms/ranger-kms start',
         environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
         not_if = 'ps -ef | grep proc_rangerkms | grep -v grep',
@@ -671,6 +676,11 @@ class TestRangerKMS(RMFTestCase):
       sudo=True
     )
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-kms/install.properties',
+      owner = 'kms',
+      properties = {'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/hdp/current/ranger-kms/ranger-kms start',
         environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
         not_if = 'ps -ef | grep proc_rangerkms | grep -v grep',

http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
index 9167017..e8bacbd 100644
--- a/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
@@ -86,6 +86,11 @@ class TestRangerAdmin(RMFTestCase):
                                     create_parents=True)
     self.assertResourceCalledRegexp('^Execute$', '^ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181/infra-solr --create-collection --collection ranger_audits --config-set ranger_audits --shards 1 --replication 1 --max-shards 1 --retry 5 --interval 10')
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
       environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
       not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -167,6 +172,11 @@ class TestRangerAdmin(RMFTestCase):
     self.assertResourceCalled('Execute','ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /infra-solr/configs/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
     self.assertResourceCalled('Execute', 'ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /infra-solr/collections/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
 
+    self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+      owner = 'ranger',
+      properties = {'db_password': '_', 'db_root_password': '_'}
+    )
+
     self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
       environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
       not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',


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

Posted by rl...@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/branch-feature-AMBARI-20859
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(-)
----------------------------------------------------------------------



[14/26] ambari git commit: Revert "AMBARI-20122 - Stack advisor needs to recommend dependency for slaves and masters"

Posted by rl...@apache.org.
Revert "AMBARI-20122 - Stack advisor needs to recommend dependency for slaves and masters"

This reverts commit 0b6d0dcef10ec60c83ad055567b487104573ae62.


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 75152614e84299d16f36a6c6d7387b77a172eb96
Parents: f1ca09c
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Sun Jun 11 22:32:46 2017 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Mon Jun 12 15:46:51 2017 -0700

----------------------------------------------------------------------
 .../src/main/resources/stacks/stack_advisor.py  | 115 +-------------
 .../stacks/2.0.6/common/test_stack_advisor.py   | 153 -------------------
 2 files changed, 5 insertions(+), 263 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/75152614/ambari-server/src/main/resources/stacks/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/stack_advisor.py b/ambari-server/src/main/resources/stacks/stack_advisor.py
index 6bc8fe4..4a81dc6 100644
--- a/ambari-server/src/main/resources/stacks/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/stack_advisor.py
@@ -756,19 +756,15 @@ class DefaultStackAdvisor(StackAdvisor):
       if hostName not in hostsComponentsMap:
         hostsComponentsMap[hostName] = []
 
-    #Sort the services so that the dependent services will be processed before those that depend on them.
-    sortedServices = self.getServicesSortedByDependencies(services)
     #extend hostsComponentsMap' with MASTER components
-    for service in sortedServices:
+    for service in services["services"]:
       masterComponents = [component for component in service["components"] if self.isMasterComponent(component)]
       serviceName = service["StackServices"]["service_name"]
       serviceAdvisor = self.getServiceAdvisor(serviceName)
       for component in masterComponents:
         componentName = component["StackServiceComponents"]["component_name"]
         advisor = serviceAdvisor if serviceAdvisor is not None else self
-        #Filter the hosts such that only hosts that meet the dependencies are included (if possible)
-        filteredHosts = self.getFilteredHostsBasedOnDependencies(services, component, hostsList, hostsComponentsMap)
-        hostsForComponent = advisor.getHostsForMasterComponent(services, hosts, component, filteredHosts)
+        hostsForComponent = advisor.getHostsForMasterComponent(services, hosts, component, hostsList)
 
         #extend 'hostsComponentsMap' with 'hostsForComponent'
         for hostName in hostsForComponent:
@@ -782,7 +778,7 @@ class DefaultStackAdvisor(StackAdvisor):
     utilizedHosts = [item for sublist in usedHostsListList for item in sublist]
     freeHosts = [hostName for hostName in hostsList if hostName not in utilizedHosts]
 
-    for service in sortedServices:
+    for service in services["services"]:
       slaveClientComponents = [component for component in service["components"]
                                if self.isSlaveComponent(component) or self.isClientComponent(component)]
       serviceName = service["StackServices"]["service_name"]
@@ -790,10 +786,7 @@ class DefaultStackAdvisor(StackAdvisor):
       for component in slaveClientComponents:
         componentName = component["StackServiceComponents"]["component_name"]
         advisor = serviceAdvisor if serviceAdvisor is not None else self
-        #Filter the hosts and free hosts such that only hosts that meet the dependencies are included (if possible)
-        filteredHosts = self.getFilteredHostsBasedOnDependencies(services, component, hostsList, hostsComponentsMap)
-        filteredFreeHosts = self.filterList(freeHosts, filteredHosts)
-        hostsForComponent = advisor.getHostsForSlaveComponent(services, hosts, component, filteredHosts, filteredFreeHosts)
+        hostsForComponent = advisor.getHostsForSlaveComponent(services, hosts, component, hostsList, freeHosts)
 
         #extend 'hostsComponentsMap' with 'hostsForComponent'
         for hostName in hostsForComponent:
@@ -803,7 +796,7 @@ class DefaultStackAdvisor(StackAdvisor):
             hostsComponentsMap[hostName].append( { "name": componentName } )
 
     #colocate custom services
-    for service in sortedServices:
+    for service in services["services"]:
       serviceName = service["StackServices"]["service_name"]
       serviceAdvisor = self.getServiceAdvisor(serviceName)
       if serviceAdvisor is not None:
@@ -873,104 +866,6 @@ class DefaultStackAdvisor(StackAdvisor):
 
     return hostsForComponent
 
-  def getServicesSortedByDependencies(self, services):
-    """
-    Sorts the services based on their dependencies.  This is limited to non-conditional host scope dependencies.
-    Services with no dependencies will go first.  Services with dependencies will go after the services they are dependent on.
-    If there are circular dependencies, the services will go in the order in which they were processed.
-    """
-    processedServices = []
-    sortedServices = []
-
-    for service in services["services"]:
-      self.sortServicesByDependencies(services, service, processedServices, sortedServices)
-
-    return sortedServices
-
-  def sortServicesByDependencies(self, services, service, processedServices, sortedServices):
-    """
-    Sorts the services based on their dependencies.  This is limited to non-conditional host scope dependencies.
-    Services with no dependencies will go first.  Services with dependencies will go after the services they are dependent on.
-    If there are circular dependencies, the services will go in the order in which they were processed.
-    """
-    if service in processedServices:
-      return
-
-    processedServices.append(service)
-
-    for component in service["components"]:
-      dependencies = [] if "dependencies" not in component else component['dependencies']
-      for dependency in dependencies:
-        # accounts only for dependencies that are not conditional
-        conditionsPresent =  "conditions" in dependency["Dependencies"] and dependency["Dependencies"]["conditions"]
-        scope = "cluster" if "scope" not in dependency["Dependencies"] else dependency["Dependencies"]["scope"]
-        if not conditionsPresent and scope == "host":
-          componentName = component["StackServiceComponents"]["component_name"]
-          requiredComponentName = dependency["Dependencies"]["component_name"]
-          requiredService = self.getServiceForComponentName(services, requiredComponentName)
-          self.sortServicesByDependencies(services, requiredService, processedServices, sortedServices)
-
-    sortedServices.append(service)
-
-  def getFilteredHostsBasedOnDependencies(self, services, component, hostsList, hostsComponentsMap):
-    """
-    Returns a list of hosts that only includes the ones which have all host scope dependencies already assigned to them.
-    If an empty list would be returned, instead the full list of hosts are returned.
-    In that case, we can't possibly return a valid recommended layout so we will at least return a fully filled layout.
-    """
-    removeHosts = []
-    dependencies = [] if "dependencies" not in component else component['dependencies']
-    for dependency in dependencies:
-      # accounts only for dependencies that are not conditional
-      conditionsPresent =  "conditions" in dependency["Dependencies"] and dependency["Dependencies"]["conditions"]
-      if not conditionsPresent:
-        componentName = component["StackServiceComponents"]["component_name"]
-        requiredComponentName = dependency["Dependencies"]["component_name"]
-        requiredComponent = self.getRequiredComponent(services, requiredComponentName)
-
-        # We only deal with "host" scope.
-        if (requiredComponent is not None) and (requiredComponent["component_category"] != "CLIENT"):
-          scope = "cluster" if "scope" not in dependency["Dependencies"] else dependency["Dependencies"]["scope"]
-          if scope == "host":
-            for host, hostComponents in hostsComponentsMap.iteritems():
-              isRequiredIncluded = False
-              for component in hostComponents:
-                currentComponentName = None if "name" not in component else component["name"]
-                if requiredComponentName == currentComponentName:
-                  isRequiredIncluded = True
-              if not isRequiredIncluded:
-                removeHosts.append(host)
-
-    filteredHostsList = []
-    for host in hostsList:
-      if host not in removeHosts:
-        filteredHostsList.append(host)
-    return filteredHostsList
-
-  def filterList(self, list, filter):
-    """
-    Returns the union of the two lists passed in (list and filter params).
-    """
-    filteredList = []
-    for item in list:
-      if item in filter:
-        filteredList.append(item)
-    return filteredList
-
-  def getServiceForComponentName(self, services, componentName):
-    """
-    Return service for component name
-
-    :type services dict
-    :type componentName str
-    """
-    for service in services["services"]:
-      for component in service["components"]:
-        if self.getComponentName(component) == componentName:
-          return service
-
-    return None
-
   def isComponentUsingCardinalityForLayout(self, componentName):
     return False
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/75152614/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
index b6f1965..41c57f6 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
@@ -191,159 +191,6 @@ class TestHDP206StackAdvisor(TestCase):
     ]
     self.assertValidationResult(expectedItems, result)
 
-
-  def test_handleComponentDependencies(self):
-    services = {
-      "Versions":
-        {
-          "stack_name":"HDP",
-          "stack_version":"2.0.6"
-        },
-      "services" : [
-        {
-          "StackServices" : {
-            "service_name" : "HDFS",
-            "service_version" : "2.0.6",
-          },
-          "components": [
-            {
-              "StackServiceComponents": {
-                "stack_version": "2.0.6",
-                "stack_name": "HDP",
-                "component_category": "MASTER",
-                "is_client": False,
-                "is_master": True,
-                "service_name": "HDFS",
-                "cardinality": "1-2",
-                "hostnames": [],
-                "component_name": "NAMENODE",
-                "display_name": "NameNode"
-              },
-              "dependencies": [
-                {
-                  "Dependencies": {
-                    "stack_name": "HDP",
-                    "stack_version": "2.0.6",
-                    "scope": "cluster",
-                    "conditions": [
-                      {
-                        "configType": "hdfs-site",
-                        "property": "dfs.nameservices",
-                        "type": "PropertyExists",
-                      }
-                    ],
-                    "dependent_service_name": "HDFS",
-                    "dependent_component_name": "NAMENODE",
-                    "component_name": "ZOOKEEPER_SERVER"
-                  }
-                }
-              ]
-            }
-          ]
-        },
-        {
-          "StackServices" : {
-            "service_name" : "ZOOKEEPER",
-            "service_version" : "2.0.6",
-          },
-          "components": [
-            {
-              "StackServiceComponents": {
-                "stack_version": "2.0.6",
-                "stack_name": "HDP",
-                "component_category": "MASTER",
-                "is_client": False,
-                "is_master": True,
-                "service_name": "HDFS",
-                "cardinality": "1-2",
-                "hostnames": [],
-                "component_name": "ZOOKEEPER_SERVER",
-                "display_name": "ZooKeeper Server"
-              },
-              "dependencies": []
-            }
-          ]
-        }
-      ]
-    }
-
-    nameNodeDependencies = services["services"][0]["components"][0]["dependencies"][0]["Dependencies"]
-
-    # Tests for master component with dependencies
-
-    hosts = self.prepareHosts(["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org"])
-    services["services"][1]["components"][0]["StackServiceComponents"]["hostnames"] = ["c6402.ambari.apache.org", "c6403.ambari.apache.org"]
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when there are conditions and cluster scope
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "host"
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when there are conditions (even for host scope)
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "cluster"
-    originalConditions = nameNodeDependencies["conditions"]
-    nameNodeDependencies["conditions"] = []
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when scope is cluster
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "host"
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are enforced for host scope without conditions
-    #self.assertEquals(recommendations, "")
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][0]['components']), 2)
-
-    services["services"][1]["components"][0]["StackServiceComponents"]["is_master"] = False
-    services["services"][1]["components"][0]["StackServiceComponents"]["component_category"] = "CLIENT"
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when depending on client components
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    # Tests for slave component with dependencies
-    services["services"][0]["components"][0]["StackServiceComponents"]["component_category"] = "SLAVE"
-    services["services"][0]["components"][0]["StackServiceComponents"]["is_master"] = False
-    services["services"][1]["components"][0]["StackServiceComponents"]["component_category"] = "MASTER"
-    services["services"][1]["components"][0]["StackServiceComponents"]["is_master"] = True
-
-    nameNodeDependencies["scope"] = "cluster"
-    nameNodeDependencies["conditions"] = originalConditions
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when there are conditions and cluster scope
-    self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "host"
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when there are conditions (even for host scope)
-    self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "cluster"
-    nameNodeDependencies["conditions"] = []
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are ignored when scope is cluster
-    self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
-    self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
-    nameNodeDependencies["scope"] = "host"
-    recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
-    # Assert that dependencies are enforced when host scope and no conditions
-    self.assertEquals(recommendations['blueprint']['host_groups'][1]['components'][1]['name'], 'NAMENODE')
-    self.assertEquals(len(recommendations['blueprint']['host_groups'][1]['components']), 2)
-
-
   def test_validateRequiredComponentsPresent(self):
     services = {
       "Versions":


[20/26] ambari git commit: AMBARI-21239. Ambari leaves a lot of processes from Hive alert on the machine (aonishuk)

Posted by rl...@apache.org.
AMBARI-21239. Ambari leaves a lot of processes from Hive alert on the machine (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 31ac3c21b71868df4f4e2ac82e72defa79767bd6
Parents: f80c6ee
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Jun 13 17:01:06 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Jun 13 17:01:06 2017 +0300

----------------------------------------------------------------------
 .../libraries/functions/hive_check.py                 |  5 ++++-
 .../stacks/2.0.6/HIVE/test_hive_service_check.py      | 14 +++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/31ac3c21/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py b/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
index 92d16a2..d8f6696 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
@@ -21,6 +21,7 @@ limitations under the License.
 from resource_management.core import global_lock
 from resource_management.core.resources import Execute
 from resource_management.libraries.functions import format
+from resource_management.core.signal_utils import TerminateStrategy
 
 
 def check_thrift_port_sasl(address, port, hive_auth="NOSASL", key=None, kinitcmd=None, smokeuser='ambari-qa',
@@ -76,4 +77,6 @@ def check_thrift_port_sasl(address, port, hive_auth="NOSASL", key=None, kinitcmd
   Execute(cmd,
     user=smokeuser,
     path=["/bin/", "/usr/bin/", "/usr/lib/hive/bin/", "/usr/sbin/"],
-    timeout=check_command_timeout)
+    timeout=check_command_timeout,
+    timeout_kill_strategy=TerminateStrategy.KILL_PROCESS_TREE,
+  )

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ac3c21/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
index 0e5dac7..0d87315 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
@@ -46,6 +46,7 @@ class TestServiceCheck(RMFTestCase):
                               path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
                               user = 'ambari-qa',
                               timeout = 30,
+                              timeout_kill_strategy = 2,
                               )
     self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
                         content = StaticFile('hcatSmoke.sh'),
@@ -160,6 +161,7 @@ class TestServiceCheck(RMFTestCase):
                               path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
                               user = 'ambari-qa',
                               timeout = 30,
+                              timeout_kill_strategy = 2,
                               )
     self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
                         content = StaticFile('hcatSmoke.sh'),
@@ -276,7 +278,9 @@ class TestServiceCheck(RMFTestCase):
     self.assertResourceCalled('Execute', "! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10010/;transportMode=binary'  -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
       path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
       timeout = 30,
-      user = 'ambari-qa')
+      user = 'ambari-qa',
+      timeout_kill_strategy = 2,
+    )
 
     self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
       content = StaticFile('hcatSmoke.sh'),
@@ -313,13 +317,17 @@ class TestServiceCheck(RMFTestCase):
       "! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10010/;transportMode=binary'  -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
       path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
       timeout = 30,
-      user = 'ambari-qa')
+      user = 'ambari-qa',
+      timeout_kill_strategy = 2,
+    )
 
     self.assertResourceCalled('Execute',
       "! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10500/;transportMode=binary'  -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
       path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
       timeout = 30,
-      user = 'ambari-qa')
+      user = 'ambari-qa',
+      timeout_kill_strategy = 2,
+    )
 
     # LLAP call
     self.assertResourceCalled('Execute',


[18/26] ambari git commit: AMBARI-21228. Rename userconfig resource to event history in Log Search Portal (oleewere)

Posted by rl...@apache.org.
AMBARI-21228. Rename userconfig resource to event history in Log Search Portal (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: fc00b2caf927d083c70812bf1552aafa68958d1f
Parents: 27a9938
Author: oleewere <ol...@gmail.com>
Authored: Mon Jun 12 17:12:58 2017 +0200
Committer: oleewere <ol...@gmail.com>
Committed: Tue Jun 13 13:47:23 2017 +0200

----------------------------------------------------------------------
 .../logfeeder/common/LogFeederConstants.java    |   2 +-
 .../ambari/logsearch/conf/SecurityConfig.java   |  18 +-
 .../ambari/logsearch/conf/SolrConfig.java       |  12 +-
 .../conf/SolrEventHistoryPropsConfig.java       | 116 +++++++++++
 .../logsearch/conf/SolrUserPropsConfig.java     | 116 -----------
 .../conf/global/SolrEventHistoryState.java      |  60 ++++++
 .../conf/global/SolrUserConfigState.java        |  60 ------
 .../EventHistoryRequestQueryConverter.java      |  67 +++++++
 .../UserConfigRequestQueryConverter.java        |  67 -------
 .../logsearch/dao/EventHistorySolrDao.java      | 117 +++++++++++
 .../logsearch/dao/SolrSchemaFieldDao.java       |   8 +-
 .../ambari/logsearch/dao/UserConfigSolrDao.java | 117 -----------
 .../ambari/logsearch/doc/DocConstants.java      |  12 +-
 .../logsearch/manager/EventHistoryManager.java  | 199 +++++++++++++++++++
 .../logsearch/manager/UserConfigManager.java    | 199 -------------------
 .../request/EventHistoryParamDefinition.java    |  38 ++++
 .../request/UserConfigParamDefinition.java      |  38 ----
 .../model/request/impl/EventHistoryRequest.java |  53 +++++
 .../model/request/impl/UserConfigRequest.java   |  53 -----
 .../model/response/EventHistoryData.java        |  97 +++++++++
 .../response/EventHistoryDataListResponse.java  |  55 +++++
 .../model/response/UserConfigData.java          |  97 ---------
 .../response/UserConfigDataListResponse.java    |  55 -----
 .../logsearch/rest/EventHistoryResource.java    |  82 ++++++++
 .../ambari/logsearch/rest/StatusResource.java   |  16 +-
 .../logsearch/rest/UserConfigResource.java      |  82 --------
 .../ambari/logsearch/solr/SolrConstants.java    |   4 +-
 .../LogsearchEventHistoryStateFilter.java       |  52 +++++
 .../filters/LogsearchUserConfigStateFilter.java |  52 -----
 .../EventHistoryRequestQueryConverterTest.java  |  50 +++++
 .../UserConfigRequestQueryConverterTest.java    |  50 -----
 .../collection_bases/VEventHistoryListBase.js   |   8 +-
 .../scripts/model_bases/VUserFilterBase.js      |   2 +-
 .../main/webapp/scripts/views/common/Header.js  |   2 +-
 34 files changed, 1028 insertions(+), 1028 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
index a7559aa..a7cccc6 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
@@ -29,7 +29,7 @@ public class LogFeederConstants {
   public static final String SOLR_COMPONENT = "type";
   public static final String SOLR_HOST = "host";
 
-  // UserConfig Constants History
+  // Event History Constants History
   public static final String VALUES = "jsons";
   public static final String ROW_TYPE = "rowtype";
   

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
index 973dc4b..441b628 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
@@ -33,7 +33,7 @@ import org.apache.ambari.logsearch.web.filters.LogsearchKRBAuthenticationFilter;
 import org.apache.ambari.logsearch.web.filters.LogsearchJWTFilter;
 import org.apache.ambari.logsearch.web.filters.LogsearchSecurityContextFormationFilter;
 import org.apache.ambari.logsearch.web.filters.LogsearchServiceLogsStateFilter;
-import org.apache.ambari.logsearch.web.filters.LogsearchUserConfigStateFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchEventHistoryStateFilter;
 import org.apache.ambari.logsearch.web.filters.LogsearchUsernamePasswordAuthenticationFilter;
 import org.apache.ambari.logsearch.web.security.LogsearchAuthenticationProvider;
 import org.springframework.context.annotation.Bean;
@@ -71,7 +71,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
   private SolrAuditLogPropsConfig solrAuditLogPropsConfig;
 
   @Inject
-  private SolrUserPropsConfig solrUserPropsConfig;
+  private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
 
   @Inject
   @Named("solrServiceLogsState")
@@ -82,8 +82,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
   private SolrCollectionState solrAuditLogsState;
 
   @Inject
-  @Named("solrUserConfigState")
-  private SolrCollectionState solrUserConfigState;
+  @Named("solrEventHistoryState")
+  private SolrCollectionState solrEventHistoryState;
 
   @Inject
   private LogSearchConfigState logSearchConfigState;
@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
       .addFilterBefore(logsearchUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
       .addFilterBefore(logsearchKRBAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
       .addFilterAfter(securityContextFormationFilter(), FilterSecurityInterceptor.class)
-      .addFilterAfter(logsearchUserConfigFilter(), LogsearchSecurityContextFormationFilter.class)
+      .addFilterAfter(logsearchEventHistoryFilter(), LogsearchSecurityContextFormationFilter.class)
       .addFilterAfter(logsearchAuditLogFilter(), LogsearchSecurityContextFormationFilter.class)
       .addFilterAfter(logsearchServiceLogFilter(), LogsearchSecurityContextFormationFilter.class)
       .addFilterAfter(logSearchConfigStateFilter(), LogsearchSecurityContextFormationFilter.class)
@@ -179,8 +179,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
   }
 
   @Bean
-  public LogsearchUserConfigStateFilter logsearchUserConfigFilter() {
-    return new LogsearchUserConfigStateFilter(userConfigRequestMatcher(), solrUserConfigState, solrUserPropsConfig);
+  public LogsearchEventHistoryStateFilter logsearchEventHistoryFilter() {
+    return new LogsearchEventHistoryStateFilter(eventHistoryRequestMatcher(), solrEventHistoryState, solrEventHistoryPropsConfig);
   }
   
   public LogSearchConfigStateFilter logSearchConfigStateFilter() {
@@ -213,8 +213,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
     return new AntPathRequestMatcher("/api/v1/audit/logs/**");
   }
 
-  public RequestMatcher userConfigRequestMatcher() {
-    return new AntPathRequestMatcher("/api/v1/userconfig/**");
+  public RequestMatcher eventHistoryRequestMatcher() {
+    return new AntPathRequestMatcher("/api/v1/history/**");
   }
 
   public RequestMatcher logsearchConfigRequestMatcher() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
index f00e8c5..f9144ff 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
@@ -21,7 +21,7 @@ package org.apache.ambari.logsearch.conf;
 import org.apache.ambari.logsearch.conf.global.SolrAuditLogsState;
 import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
 import org.apache.ambari.logsearch.conf.global.SolrServiceLogsState;
-import org.apache.ambari.logsearch.conf.global.SolrUserConfigState;
+import org.apache.ambari.logsearch.conf.global.SolrEventHistoryState;
 import org.apache.ambari.logsearch.dao.SolrSchemaFieldDao;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -46,9 +46,9 @@ public class SolrConfig {
     return null;
   }
 
-  @Bean(name = "userConfigSolrTemplate")
+  @Bean(name = "eventHistorySolrTemplate")
   @DependsOn("serviceSolrTemplate")
-  public SolrTemplate userConfigSolrTemplate() {
+  public SolrTemplate eventHistorySolrTemplate() {
     return null;
   }
 
@@ -68,9 +68,9 @@ public class SolrConfig {
     return new SolrAuditLogsState();
   }
 
-  @Bean(name = "solrUserConfigState")
-  public SolrCollectionState solrUserConfigState() {
-    return new SolrUserConfigState();
+  @Bean(name = "solrEventHistoryState")
+  public SolrCollectionState solrEventHistoryState() {
+    return new SolrEventHistoryState();
   }
 }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
new file mode 100644
index 0000000..a117501
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+public class SolrEventHistoryPropsConfig extends SolrConnectionPropsConfig {
+
+  @Value("${logsearch.solr.collection.history:history}")
+  private String collection;
+
+  @Value("${logsearch.history.split.interval.mins:none}")
+  private String splitInterval;
+
+  @Value("${logsearch.solr.history.config.name:history}")
+  private String configName;
+
+  @Value("${logsearch.collection.history.numshards:1}")
+  private Integer numberOfShards;
+
+  @Value("${logsearch.collection.history.replication.factor:2}")
+  private Integer replicationFactor;
+
+  @Value("#{'${logsearch.logfeeder.include.default.level:FATAL,ERROR,WARN,INFO,DEBUG,TRACE,UNKNOWN}'.split(',')}")
+  private List<String> logLevels;
+
+  @Value("${logsearch.schema.fields.populate.interval.mins:1}")
+  private Integer populateIntervalMins;
+  
+  @Override
+  public String getCollection() {
+    return collection;
+  }
+
+  @Override
+  public void setCollection(String collection) {
+    this.collection = collection;
+  }
+
+  @Override
+  public String getSplitInterval() {
+    return splitInterval;
+  }
+
+  @Override
+  public void setSplitInterval(String splitInterval) {
+    this.splitInterval = splitInterval;
+  }
+
+  @Override
+  public String getConfigName() {
+    return configName;
+  }
+
+  @Override
+  public void setConfigName(String configName) {
+    this.configName = configName;
+  }
+
+  @Override
+  public Integer getNumberOfShards() {
+    return numberOfShards;
+  }
+
+  @Override
+  public void setNumberOfShards(Integer numberOfShards) {
+    this.numberOfShards = numberOfShards;
+  }
+
+  @Override
+  public Integer getReplicationFactor() {
+    return replicationFactor;
+  }
+
+  @Override
+  public void setReplicationFactor(Integer replicationFactor) {
+    this.replicationFactor = replicationFactor;
+  }
+
+  public List<String> getLogLevels() {
+    return logLevels;
+  }
+
+  public void setLogLevels(List<String> logLevels) {
+    this.logLevels = logLevels;
+  }
+  
+
+  public Integer getPopulateIntervalMins() {
+    return populateIntervalMins;
+  }
+  
+  void setPopulateIntervalMins(Integer populateIntervalMins) {
+    this.populateIntervalMins = populateIntervalMins;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
deleted file mode 100644
index c8c96c8..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.conf;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.List;
-
-@Configuration
-public class SolrUserPropsConfig extends SolrConnectionPropsConfig {
-
-  @Value("${logsearch.solr.collection.history:history}")
-  private String collection;
-
-  @Value("${logsearch.history.split.interval.mins:none}")
-  private String splitInterval;
-
-  @Value("${logsearch.solr.history.config.name:history}")
-  private String configName;
-
-  @Value("${logsearch.collection.history.numshards:1}")
-  private Integer numberOfShards;
-
-  @Value("${logsearch.collection.history.replication.factor:2}")
-  private Integer replicationFactor;
-
-  @Value("#{'${logsearch.logfeeder.include.default.level:FATAL,ERROR,WARN,INFO,DEBUG,TRACE,UNKNOWN}'.split(',')}")
-  private List<String> logLevels;
-
-  @Value("${logsearch.schema.fields.populate.interval.mins:1}")
-  private Integer populateIntervalMins;
-  
-  @Override
-  public String getCollection() {
-    return collection;
-  }
-
-  @Override
-  public void setCollection(String collection) {
-    this.collection = collection;
-  }
-
-  @Override
-  public String getSplitInterval() {
-    return splitInterval;
-  }
-
-  @Override
-  public void setSplitInterval(String splitInterval) {
-    this.splitInterval = splitInterval;
-  }
-
-  @Override
-  public String getConfigName() {
-    return configName;
-  }
-
-  @Override
-  public void setConfigName(String configName) {
-    this.configName = configName;
-  }
-
-  @Override
-  public Integer getNumberOfShards() {
-    return numberOfShards;
-  }
-
-  @Override
-  public void setNumberOfShards(Integer numberOfShards) {
-    this.numberOfShards = numberOfShards;
-  }
-
-  @Override
-  public Integer getReplicationFactor() {
-    return replicationFactor;
-  }
-
-  @Override
-  public void setReplicationFactor(Integer replicationFactor) {
-    this.replicationFactor = replicationFactor;
-  }
-
-  public List<String> getLogLevels() {
-    return logLevels;
-  }
-
-  public void setLogLevels(List<String> logLevels) {
-    this.logLevels = logLevels;
-  }
-  
-
-  public Integer getPopulateIntervalMins() {
-    return populateIntervalMins;
-  }
-  
-  void setPopulateIntervalMins(Integer populateIntervalMins) {
-    this.populateIntervalMins = populateIntervalMins;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
new file mode 100644
index 0000000..c31e69e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.conf.global;
+
+import javax.inject.Named;
+
+@Named
+public class SolrEventHistoryState implements SolrCollectionState {
+
+  private volatile boolean znodeReady;
+  private volatile boolean solrCollectionReady;
+  private volatile boolean configurationUploaded;
+
+  @Override
+  public boolean isZnodeReady() {
+    return znodeReady;
+  }
+
+  @Override
+  public void setZnodeReady(boolean znodeAvailable) {
+    this.znodeReady = znodeAvailable;
+  }
+
+  @Override
+  public boolean isSolrCollectionReady() {
+    return solrCollectionReady;
+  }
+
+  @Override
+  public void setSolrCollectionReady(boolean solrCollectionReady) {
+    this.solrCollectionReady = solrCollectionReady;
+  }
+
+  @Override
+  public boolean isConfigurationUploaded() {
+    return configurationUploaded;
+  }
+
+  @Override
+  public void setConfigurationUploaded(boolean configurationUploaded) {
+    this.configurationUploaded = configurationUploaded;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
deleted file mode 100644
index 06af14c..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.conf.global;
-
-import javax.inject.Named;
-
-@Named
-public class SolrUserConfigState implements SolrCollectionState {
-
-  private volatile boolean znodeReady;
-  private volatile boolean solrCollectionReady;
-  private volatile boolean configurationUploaded;
-
-  @Override
-  public boolean isZnodeReady() {
-    return znodeReady;
-  }
-
-  @Override
-  public void setZnodeReady(boolean znodeAvailable) {
-    this.znodeReady = znodeAvailable;
-  }
-
-  @Override
-  public boolean isSolrCollectionReady() {
-    return solrCollectionReady;
-  }
-
-  @Override
-  public void setSolrCollectionReady(boolean solrCollectionReady) {
-    this.solrCollectionReady = solrCollectionReady;
-  }
-
-  @Override
-  public boolean isConfigurationUploaded() {
-    return configurationUploaded;
-  }
-
-  @Override
-  public void setConfigurationUploaded(boolean configurationUploaded) {
-    this.configurationUploaded = configurationUploaded;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
new file mode 100644
index 0000000..c67c31b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.converter;
+
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.util.SolrUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.solr.client.solrj.SolrQuery;
+
+import javax.inject.Named;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.ambari.logsearch.solr.SolrConstants.CommonLogConstants.CLUSTER;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.FILTER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ROW_TYPE;
+
+@Named
+public class EventHistoryRequestQueryConverter extends AbstractConverterAware<EventHistoryRequest, SolrQuery> {
+
+  @Override
+  public SolrQuery convert(EventHistoryRequest eventHistoryRequest) {
+    SolrQuery eventHistoryQuery = new SolrQuery();
+    eventHistoryQuery.setQuery("*:*");
+
+    int startIndex = StringUtils.isNotEmpty(eventHistoryRequest.getStartIndex()) && StringUtils.isNumeric(eventHistoryRequest.getStartIndex())
+      ? Integer.parseInt(eventHistoryRequest.getStartIndex()) : 0;
+    int maxRows = StringUtils.isNotEmpty(eventHistoryRequest.getPageSize()) && StringUtils.isNumeric(eventHistoryRequest.getPageSize())
+      ? Integer.parseInt(eventHistoryRequest.getPageSize()) : 10;
+
+    SolrQuery.ORDER order = eventHistoryRequest.getSortType() != null && SolrQuery.ORDER.desc.equals(SolrQuery.ORDER.valueOf(eventHistoryRequest.getSortType()))
+      ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc;
+    String sortBy = StringUtils.isNotEmpty(eventHistoryRequest.getSortBy()) ? eventHistoryRequest.getSortBy() : FILTER_NAME;
+    String filterName = StringUtils.isBlank(eventHistoryRequest.getFilterName()) ? "*" : "*" + eventHistoryRequest.getFilterName() + "*";
+
+    eventHistoryQuery.addFilterQuery(String.format("%s:%s", ROW_TYPE, eventHistoryRequest.getRowType()));
+    eventHistoryQuery.addFilterQuery(String.format("%s:%s", FILTER_NAME, SolrUtil.makeSearcableString(filterName)));
+    eventHistoryQuery.setStart(startIndex);
+    eventHistoryQuery.setRows(maxRows);
+
+    SolrQuery.SortClause sortOrder = SolrQuery.SortClause.create(sortBy, order);
+    List<SolrQuery.SortClause> sort = new ArrayList<>();
+    sort.add(sortOrder);
+    eventHistoryQuery.setSorts(sort);
+
+    SolrUtil.addListFilterToSolrQuery(eventHistoryQuery, CLUSTER, eventHistoryRequest.getClusters());
+
+    return eventHistoryQuery;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
deleted file mode 100644
index 594f23b..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.converter;
-
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.util.SolrUtil;
-import org.apache.commons.lang.StringUtils;
-import org.apache.solr.client.solrj.SolrQuery;
-
-import javax.inject.Named;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.ambari.logsearch.solr.SolrConstants.CommonLogConstants.CLUSTER;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.FILTER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ROW_TYPE;
-
-@Named
-public class UserConfigRequestQueryConverter extends AbstractConverterAware<UserConfigRequest, SolrQuery> {
-
-  @Override
-  public SolrQuery convert(UserConfigRequest userConfigRequest) {
-    SolrQuery userConfigQuery = new SolrQuery();
-    userConfigQuery.setQuery("*:*");
-
-    int startIndex = StringUtils.isNotEmpty(userConfigRequest.getStartIndex()) && StringUtils.isNumeric(userConfigRequest.getStartIndex())
-      ? Integer.parseInt(userConfigRequest.getStartIndex()) : 0;
-    int maxRows = StringUtils.isNotEmpty(userConfigRequest.getPageSize()) && StringUtils.isNumeric(userConfigRequest.getPageSize())
-      ? Integer.parseInt(userConfigRequest.getPageSize()) : 10;
-
-    SolrQuery.ORDER order = userConfigRequest.getSortType() != null && SolrQuery.ORDER.desc.equals(SolrQuery.ORDER.valueOf(userConfigRequest.getSortType()))
-      ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc;
-    String sortBy = StringUtils.isNotEmpty(userConfigRequest.getSortBy()) ? userConfigRequest.getSortBy() : FILTER_NAME;
-    String filterName = StringUtils.isBlank(userConfigRequest.getFilterName()) ? "*" : "*" + userConfigRequest.getFilterName() + "*";
-
-    userConfigQuery.addFilterQuery(String.format("%s:%s", ROW_TYPE, userConfigRequest.getRowType()));
-    userConfigQuery.addFilterQuery(String.format("%s:%s", FILTER_NAME, SolrUtil.makeSearcableString(filterName)));
-    userConfigQuery.setStart(startIndex);
-    userConfigQuery.setRows(maxRows);
-
-    SolrQuery.SortClause sortOrder = SolrQuery.SortClause.create(sortBy, order);
-    List<SolrQuery.SortClause> sort = new ArrayList<>();
-    sort.add(sortOrder);
-    userConfigQuery.setSorts(sort);
-
-    SolrUtil.addListFilterToSolrQuery(userConfigQuery, CLUSTER, userConfigRequest.getClusters());
-
-    return userConfigQuery;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
new file mode 100644
index 0000000..aff4061
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.dao;
+
+import java.io.IOException;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.ambari.logsearch.common.LogSearchContext;
+import org.apache.ambari.logsearch.common.LogType;
+import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrInputDocument;
+
+import org.apache.log4j.Logger;
+import org.springframework.data.solr.core.SolrTemplate;
+
+@Named
+public class EventHistorySolrDao extends SolrDaoBase {
+
+  private static final Logger LOG = Logger.getLogger(EventHistorySolrDao.class);
+
+  private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
+
+  @Inject
+  private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
+
+  @Inject
+  @Named("eventHistorySolrTemplate")
+  private SolrTemplate eventHistorySolrTemplate;
+
+  @Inject
+  @Named("solrEventHistoryState")
+  private SolrCollectionState solrEventHistoryState;
+
+  public EventHistorySolrDao() {
+    super(LogType.SERVICE);
+  }
+
+  @Override
+  public SolrTemplate getSolrTemplate() {
+    return eventHistorySolrTemplate;
+  }
+
+  @Override
+  public void setSolrTemplate(SolrTemplate solrTemplate) {
+    this.eventHistorySolrTemplate = solrTemplate;
+  }
+
+  @PostConstruct
+  public void postConstructor() {
+    String solrUrl = solrEventHistoryPropsConfig.getSolrUrl();
+    String zkConnectString = solrEventHistoryPropsConfig.getZkConnectString();
+    String collection = solrEventHistoryPropsConfig.getCollection();
+
+    try {
+      new SolrCollectionConfigurer(this, false).start();
+    } catch (Exception e) {
+      LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
+          ", collection=" + collection, e);
+    }
+  }
+
+  public void deleteEventHistoryData(String id) throws SolrException, SolrServerException, IOException {
+    removeDoc("id:" + id);
+  }
+
+  public UpdateResponse addDocs(SolrInputDocument doc) throws SolrServerException, IOException, SolrException {
+    UpdateResponse updateResoponse = getSolrClient().add(doc);
+    LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
+      " Update Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
+    getSolrClient().commit();
+    return updateResoponse;
+  }
+
+  public UpdateResponse removeDoc(String query) throws SolrServerException, IOException, SolrException {
+    UpdateResponse updateResoponse = getSolrClient().deleteByQuery(query);
+    getSolrClient().commit();
+    LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
+      " Remove Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
+    return updateResoponse;
+  }
+
+  @Override
+  public SolrCollectionState getSolrCollectionState() {
+    return solrEventHistoryState;
+  }
+
+  @Override
+  public SolrPropsConfig getSolrPropsConfig() {
+    return solrEventHistoryPropsConfig;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
index 01378c1..d99694b 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
@@ -21,7 +21,7 @@ package org.apache.ambari.logsearch.dao;
 import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.common.LogType;
 import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.conf.SolrUserPropsConfig;
+import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -68,7 +68,7 @@ public class SolrSchemaFieldDao {
   private AuditSolrDao auditSolrDao;
   
   @Inject
-  private SolrUserPropsConfig solrUserConfigPropsConfig;
+  private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
   
   private int retryCount;
   private int skipCount;
@@ -117,9 +117,9 @@ public class SolrSchemaFieldDao {
       if (schemaResponse != null) {
         extractSchemaFieldsName(lukeResponses, schemaResponse, schemaFieldNameMap, schemaFieldTypeMap);
         LOG.debug("Populate fields for collection " + solrClient.getDefaultCollection()+ " was successful, next update it after " +
-            solrUserConfigPropsConfig.getPopulateIntervalMins() + " minutes");
+            solrEventHistoryPropsConfig.getPopulateIntervalMins() + " minutes");
         retryCount = 0;
-        skipCount = (solrUserConfigPropsConfig.getPopulateIntervalMins() * 60) / RETRY_SECOND - 1;
+        skipCount = (solrEventHistoryPropsConfig.getPopulateIntervalMins() * 60) / RETRY_SECOND - 1;
       }
       else {
         retryCount++;

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
deleted file mode 100644
index a0e01a3..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.dao;
-
-import java.io.IOException;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.ambari.logsearch.common.LogSearchContext;
-import org.apache.ambari.logsearch.common.LogType;
-import org.apache.ambari.logsearch.conf.SolrPropsConfig;
-import org.apache.ambari.logsearch.conf.SolrUserPropsConfig;
-import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
-import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.response.UpdateResponse;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrInputDocument;
-
-import org.apache.log4j.Logger;
-import org.springframework.data.solr.core.SolrTemplate;
-
-@Named
-public class UserConfigSolrDao extends SolrDaoBase {
-
-  private static final Logger LOG = Logger.getLogger(UserConfigSolrDao.class);
-
-  private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
-
-  @Inject
-  private SolrUserPropsConfig solrUserConfig;
-
-  @Inject
-  @Named("userConfigSolrTemplate")
-  private SolrTemplate userConfigSolrTemplate;
-
-  @Inject
-  @Named("solrUserConfigState")
-  private SolrCollectionState solrUserConfigState;
-
-  public UserConfigSolrDao() {
-    super(LogType.SERVICE);
-  }
-
-  @Override
-  public SolrTemplate getSolrTemplate() {
-    return userConfigSolrTemplate;
-  }
-
-  @Override
-  public void setSolrTemplate(SolrTemplate solrTemplate) {
-    this.userConfigSolrTemplate = solrTemplate;
-  }
-
-  @PostConstruct
-  public void postConstructor() {
-    String solrUrl = solrUserConfig.getSolrUrl();
-    String zkConnectString = solrUserConfig.getZkConnectString();
-    String collection = solrUserConfig.getCollection();
-
-    try {
-      new SolrCollectionConfigurer(this, false).start();
-    } catch (Exception e) {
-      LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
-          ", collection=" + collection, e);
-    }
-  }
-
-  public void deleteUserConfig(String id) throws SolrException, SolrServerException, IOException {
-    removeDoc("id:" + id);
-  }
-
-  public UpdateResponse addDocs(SolrInputDocument doc) throws SolrServerException, IOException, SolrException {
-    UpdateResponse updateResoponse = getSolrClient().add(doc);
-    LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
-      " Update Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
-    getSolrClient().commit();
-    return updateResoponse;
-  }
-
-  public UpdateResponse removeDoc(String query) throws SolrServerException, IOException, SolrException {
-    UpdateResponse updateResoponse = getSolrClient().deleteByQuery(query);
-    getSolrClient().commit();
-    LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
-      " Remove Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
-    return updateResoponse;
-  }
-
-  @Override
-  public SolrCollectionState getSolrCollectionState() {
-    return solrUserConfigState;
-  }
-
-  @Override
-  public SolrPropsConfig getSolrPropsConfig() {
-    return solrUserConfig;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
index 885771d..2ab5f0a 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
@@ -104,15 +104,15 @@ public class DocConstants {
     public static final String OBTAIN_GENERAL_CONFIG_OD = "Obtain general config";
   }
 
-  public class UserConfigDescriptions {
+  public class EventHistoryDescriptions {
     public static final String FILTER_NAME_D = "The saved query as filter in Solr, search is sopprted by this param";
     public static final String ROW_TYPE_D = "Row type is solr to identify as filter query";
   }
 
-  public class UserConfigOperationDescriptions {
-    public static final String SAVE_USER_CONFIG_OD = "Save user config";
-    public static final String DELETE_USER_CONFIG_OD = "Delete user config";
-    public static final String GET_USER_CONFIG_OD = "Get user config";
+  public class EventHistoryOperationDescriptions {
+    public static final String SAVE_EVENT_HISTORY_DATA_OD = "Save event history data";
+    public static final String DELETE_EVENT_HISTORY_DATA_OD = "Delete event history data";
+    public static final String GET_EVENT_HISTORY_DATA_OD = "Get event history data";
     public static final String GET_ALL_USER_NAMES_OD = "Get all user names";
   }
 
@@ -128,6 +128,6 @@ public class DocConstants {
     public static final String STATUS_OD = "Get statuses for collections (not health state - show true if something already done)";
     public static final String SERVICE_LOGS_STATUS_OD = "Get statuses for service log collection (not health state - show true if something already done)";
     public static final String AUDIT_LOGS_STATUS_OD = "Get statuses for collections (not health state - show true if something already done)";
-    public static final String USER_CONFIG_STATUS_OD = "Get statuses for userconfig collection (not health state - show true if something already done)";
+    public static final String EVENT_HISTORY_STATUS_OD = "Get statuses for history collection (not health state - show true if something already done)";
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
new file mode 100644
index 0000000..389f8eb
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.manager;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.ambari.logsearch.common.LogSearchContext;
+import org.apache.ambari.logsearch.common.MessageEnums;
+import org.apache.ambari.logsearch.dao.EventHistorySolrDao;
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.model.response.EventHistoryData;
+import org.apache.ambari.logsearch.model.response.EventHistoryDataListResponse;
+import org.apache.ambari.logsearch.util.RESTErrorUtil;
+import org.apache.ambari.logsearch.util.SolrUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.FacetField.Count;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrInputDocument;
+import org.springframework.core.convert.ConversionService;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ID;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.USER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.VALUES;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.FILTER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ROW_TYPE;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.SHARE_NAME_LIST;
+
+@Named
+public class EventHistoryManager extends JsonManagerBase {
+
+  private static final Logger logger = Logger.getLogger(EventHistoryManager.class);
+
+  @Inject
+  private EventHistorySolrDao eventHistorySolrDao;
+  @Inject
+  private ConversionService conversionService;
+
+  public String saveEvent(EventHistoryData eventHistoryData) {
+    String filterName = eventHistoryData.getFiltername();
+
+    SolrInputDocument solrInputDoc = new SolrInputDocument();
+    if (!isValid(eventHistoryData)) {
+      throw RESTErrorUtil.createRESTException("No FilterName Specified", MessageEnums.INVALID_INPUT_DATA);
+    }
+
+    if (isNotUnique(filterName)) {
+      throw RESTErrorUtil.createRESTException( "Name '" + eventHistoryData.getFiltername() + "' already exists", MessageEnums.INVALID_INPUT_DATA);
+    }
+    solrInputDoc.addField(ID, eventHistoryData.getId());
+    solrInputDoc.addField(USER_NAME, LogSearchContext.getCurrentUsername());
+    solrInputDoc.addField(VALUES, eventHistoryData.getValues());
+    solrInputDoc.addField(FILTER_NAME, filterName);
+    solrInputDoc.addField(ROW_TYPE, eventHistoryData.getRowType());
+    List<String> shareNameList = eventHistoryData.getShareNameList();
+    if (CollectionUtils.isNotEmpty(shareNameList)) {
+      solrInputDoc.addField(SHARE_NAME_LIST, shareNameList);
+    }
+
+    try {
+      eventHistorySolrDao.addDocs(solrInputDoc);
+      return convertObjToString(solrInputDoc);
+    } catch (SolrException | SolrServerException | IOException e) {
+      logger.error("Error saving user config. solrDoc=" + solrInputDoc, e);
+      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+    }
+  }
+
+  private boolean isNotUnique(String filterName) {
+
+    if (filterName != null) {
+      SolrQuery solrQuery = new SolrQuery();
+      filterName = SolrUtil.makeSearcableString(filterName);
+      solrQuery.setQuery("*:*");
+      solrQuery.addFilterQuery(FILTER_NAME + ":" + filterName);
+      solrQuery.addFilterQuery(USER_NAME + ":" + LogSearchContext.getCurrentUsername());
+      SolrUtil.setRowCount(solrQuery, 0);
+      try {
+        Long numFound = eventHistorySolrDao.process(solrQuery).getResults().getNumFound();
+        if (numFound > 0) {
+          return true;
+        }
+      } catch (SolrException e) {
+        logger.error("Error while checking if event history data is unique.", e);
+      }
+    }
+    return false;
+  }
+
+  private boolean isValid(EventHistoryData vHistory) {
+    return StringUtils.isNotBlank(vHistory.getFiltername())
+        && StringUtils.isNotBlank(vHistory.getRowType())
+        && StringUtils.isNotBlank(vHistory.getValues());
+  }
+
+  public void deleteEvent(String id) {
+    try {
+      eventHistorySolrDao.deleteEventHistoryData(id);
+    } catch (SolrException | SolrServerException | IOException e) {
+      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  public EventHistoryDataListResponse getEventHistory(EventHistoryRequest request) {
+    EventHistoryDataListResponse response = new EventHistoryDataListResponse();
+    String rowType = request.getRowType();
+    if (StringUtils.isBlank(rowType)) {
+      throw RESTErrorUtil.createRESTException("row type was not specified", MessageEnums.INVALID_INPUT_DATA);
+    }
+
+    SolrQuery evemtHistoryQuery = conversionService.convert(request, SolrQuery.class);
+    evemtHistoryQuery.addFilterQuery(String.format("%s:%s OR %s:%s", USER_NAME, LogSearchContext.getCurrentUsername(),
+        SHARE_NAME_LIST, LogSearchContext.getCurrentUsername()));
+    SolrDocumentList solrList = eventHistorySolrDao.process(evemtHistoryQuery).getResults();
+
+    Collection<EventHistoryData> configList = new ArrayList<>();
+
+    for (SolrDocument solrDoc : solrList) {
+      EventHistoryData eventHistoryData = new EventHistoryData();
+      eventHistoryData.setFiltername("" + solrDoc.get(FILTER_NAME));
+      eventHistoryData.setId("" + solrDoc.get(ID));
+      eventHistoryData.setValues("" + solrDoc.get(VALUES));
+      eventHistoryData.setRowType("" + solrDoc.get(ROW_TYPE));
+      try {
+        List<String> shareNameList = (List<String>) solrDoc.get(SHARE_NAME_LIST);
+        eventHistoryData.setShareNameList(shareNameList);
+      } catch (Exception e) {
+        // do nothing
+      }
+
+      eventHistoryData.setUserName("" + solrDoc.get(USER_NAME));
+
+      configList.add(eventHistoryData);
+    }
+
+    response.setName("historyList");
+    response.setEventHistoryDataList(configList);
+
+    response.setStartIndex(Integer.parseInt(request.getStartIndex()));
+    response.setPageSize(Integer.parseInt(request.getPageSize()));
+
+    response.setTotalCount((long) solrList.getNumFound());
+
+    return response;
+
+  }
+
+  public List<String> getAllUserName() {
+    List<String> userList = new ArrayList<String>();
+    try {
+      SolrQuery userListQuery = new SolrQuery();
+      userListQuery.setQuery("*:*");
+      SolrUtil.setFacetField(userListQuery, USER_NAME);
+      QueryResponse queryResponse = eventHistorySolrDao.process(userListQuery);
+      if (queryResponse == null) {
+        return userList;
+      }
+      List<Count> counList = queryResponse.getFacetField(USER_NAME).getValues();
+      for (Count cnt : counList) {
+        String userName = cnt.getName();
+        userList.add(userName);
+      }
+    } catch (SolrException e) {
+      logger.warn("Error getting all users.", e);
+      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+    }
+    return userList;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
deleted file mode 100644
index 1df9f5a..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.manager;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.ambari.logsearch.common.LogSearchContext;
-import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.dao.UserConfigSolrDao;
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.model.response.UserConfigData;
-import org.apache.ambari.logsearch.model.response.UserConfigDataListResponse;
-import org.apache.ambari.logsearch.util.RESTErrorUtil;
-import org.apache.ambari.logsearch.util.SolrUtil;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.solr.client.solrj.SolrQuery;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.response.FacetField.Count;
-import org.apache.solr.client.solrj.response.QueryResponse;
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrInputDocument;
-import org.springframework.core.convert.ConversionService;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ID;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.USER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.VALUES;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.FILTER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ROW_TYPE;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.SHARE_NAME_LIST;
-
-@Named
-public class UserConfigManager extends JsonManagerBase {
-
-  private static final Logger logger = Logger.getLogger(UserConfigManager.class);
-
-  @Inject
-  private UserConfigSolrDao userConfigSolrDao;
-  @Inject
-  private ConversionService conversionService;
-
-  public String saveUserConfig(UserConfigData userConfig) {
-    String filterName = userConfig.getFiltername();
-
-    SolrInputDocument solrInputDoc = new SolrInputDocument();
-    if (!isValid(userConfig)) {
-      throw RESTErrorUtil.createRESTException("No FilterName Specified", MessageEnums.INVALID_INPUT_DATA);
-    }
-
-    if (isNotUnique(filterName)) {
-      throw RESTErrorUtil.createRESTException( "Name '" + userConfig.getFiltername() + "' already exists", MessageEnums.INVALID_INPUT_DATA);
-    }
-    solrInputDoc.addField(ID, userConfig.getId());
-    solrInputDoc.addField(USER_NAME, LogSearchContext.getCurrentUsername());
-    solrInputDoc.addField(VALUES, userConfig.getValues());
-    solrInputDoc.addField(FILTER_NAME, filterName);
-    solrInputDoc.addField(ROW_TYPE, userConfig.getRowType());
-    List<String> shareNameList = userConfig.getShareNameList();
-    if (CollectionUtils.isNotEmpty(shareNameList)) {
-      solrInputDoc.addField(SHARE_NAME_LIST, shareNameList);
-    }
-
-    try {
-      userConfigSolrDao.addDocs(solrInputDoc);
-      return convertObjToString(solrInputDoc);
-    } catch (SolrException | SolrServerException | IOException e) {
-      logger.error("Error saving user config. solrDoc=" + solrInputDoc, e);
-      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
-    }
-  }
-
-  private boolean isNotUnique(String filterName) {
-
-    if (filterName != null) {
-      SolrQuery solrQuery = new SolrQuery();
-      filterName = SolrUtil.makeSearcableString(filterName);
-      solrQuery.setQuery("*:*");
-      solrQuery.addFilterQuery(FILTER_NAME + ":" + filterName);
-      solrQuery.addFilterQuery(USER_NAME + ":" + LogSearchContext.getCurrentUsername());
-      SolrUtil.setRowCount(solrQuery, 0);
-      try {
-        Long numFound = userConfigSolrDao.process(solrQuery).getResults().getNumFound();
-        if (numFound > 0) {
-          return true;
-        }
-      } catch (SolrException e) {
-        logger.error("Error while checking if userConfig is unique.", e);
-      }
-    }
-    return false;
-  }
-
-  private boolean isValid(UserConfigData vHistory) {
-    return StringUtils.isNotBlank(vHistory.getFiltername())
-        && StringUtils.isNotBlank(vHistory.getRowType())
-        && StringUtils.isNotBlank(vHistory.getValues());
-  }
-
-  public void deleteUserConfig(String id) {
-    try {
-      userConfigSolrDao.deleteUserConfig(id);
-    } catch (SolrException | SolrServerException | IOException e) {
-      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
-    }
-  }
-
-  @SuppressWarnings("unchecked")
-  public UserConfigDataListResponse getUserConfig(UserConfigRequest request) {
-    UserConfigDataListResponse response = new UserConfigDataListResponse();
-    String rowType = request.getRowType();
-    if (StringUtils.isBlank(rowType)) {
-      throw RESTErrorUtil.createRESTException("row type was not specified", MessageEnums.INVALID_INPUT_DATA);
-    }
-
-    SolrQuery userConfigQuery = conversionService.convert(request, SolrQuery.class);
-    userConfigQuery.addFilterQuery(String.format("%s:%s OR %s:%s", USER_NAME, LogSearchContext.getCurrentUsername(),
-        SHARE_NAME_LIST, LogSearchContext.getCurrentUsername()));
-    SolrDocumentList solrList = userConfigSolrDao.process(userConfigQuery).getResults();
-
-    Collection<UserConfigData> configList = new ArrayList<>();
-
-    for (SolrDocument solrDoc : solrList) {
-      UserConfigData userConfig = new UserConfigData();
-      userConfig.setFiltername("" + solrDoc.get(FILTER_NAME));
-      userConfig.setId("" + solrDoc.get(ID));
-      userConfig.setValues("" + solrDoc.get(VALUES));
-      userConfig.setRowType("" + solrDoc.get(ROW_TYPE));
-      try {
-        List<String> shareNameList = (List<String>) solrDoc.get(SHARE_NAME_LIST);
-        userConfig.setShareNameList(shareNameList);
-      } catch (Exception e) {
-        // do nothing
-      }
-
-      userConfig.setUserName("" + solrDoc.get(USER_NAME));
-
-      configList.add(userConfig);
-    }
-
-    response.setName("historyList");
-    response.setUserConfigList(configList);
-
-    response.setStartIndex(Integer.parseInt(request.getStartIndex()));
-    response.setPageSize(Integer.parseInt(request.getPageSize()));
-
-    response.setTotalCount((long) solrList.getNumFound());
-
-    return response;
-
-  }
-
-  public List<String> getAllUserName() {
-    List<String> userList = new ArrayList<String>();
-    try {
-      SolrQuery userListQuery = new SolrQuery();
-      userListQuery.setQuery("*:*");
-      SolrUtil.setFacetField(userListQuery, USER_NAME);
-      QueryResponse queryResponse = userConfigSolrDao.process(userListQuery);
-      if (queryResponse == null) {
-        return userList;
-      }
-      List<Count> counList = queryResponse.getFacetField(USER_NAME).getValues();
-      for (Count cnt : counList) {
-        String userName = cnt.getName();
-        userList.add(userName);
-      }
-    } catch (SolrException e) {
-      logger.warn("Error getting all users.", e);
-      throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
-    }
-    return userList;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
new file mode 100644
index 0000000..d7a5b01
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.request;
+
+import io.swagger.annotations.ApiParam;
+import org.apache.ambari.logsearch.common.LogSearchConstants;
+
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryDescriptions.FILTER_NAME_D;
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryDescriptions.ROW_TYPE_D;
+
+public interface EventHistoryParamDefinition {
+
+  String getFilterName();
+
+  @ApiParam(value = FILTER_NAME_D, name = LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
+  void setFilterName(String filterName);
+
+  String getRowType();
+
+  @ApiParam(value = ROW_TYPE_D, name = LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
+  void setRowType(String rowType);
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
deleted file mode 100644
index dd74b6f..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.request;
-
-import io.swagger.annotations.ApiParam;
-import org.apache.ambari.logsearch.common.LogSearchConstants;
-
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigDescriptions.FILTER_NAME_D;
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigDescriptions.ROW_TYPE_D;
-
-public interface UserConfigParamDefinition {
-
-  String getFilterName();
-
-  @ApiParam(value = FILTER_NAME_D, name = LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
-  void setFilterName(String filterName);
-
-  String getRowType();
-
-  @ApiParam(value = ROW_TYPE_D, name = LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
-  void setRowType(String rowType);
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
new file mode 100644
index 0000000..17be988
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.request.impl;
+
+import org.apache.ambari.logsearch.common.LogSearchConstants;
+import org.apache.ambari.logsearch.model.request.EventHistoryParamDefinition;
+
+import javax.ws.rs.QueryParam;
+
+public class EventHistoryRequest extends CommonSearchRequest implements EventHistoryParamDefinition {
+
+  @QueryParam(LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
+  private String filterName;
+
+  @QueryParam(LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
+  private String rowType;
+
+  @Override
+  public String getFilterName() {
+    return filterName;
+  }
+
+  @Override
+  public void setFilterName(String filterName) {
+    this.filterName = filterName;
+  }
+
+  @Override
+  public String getRowType() {
+    return rowType;
+  }
+
+  @Override
+  public void setRowType(String rowType) {
+    this.rowType = rowType;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
deleted file mode 100644
index cbbc6e6..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.request.impl;
-
-import org.apache.ambari.logsearch.common.LogSearchConstants;
-import org.apache.ambari.logsearch.model.request.UserConfigParamDefinition;
-
-import javax.ws.rs.QueryParam;
-
-public class UserConfigRequest extends CommonSearchRequest implements UserConfigParamDefinition {
-
-  @QueryParam(LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
-  private String filterName;
-
-  @QueryParam(LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
-  private String rowType;
-
-  @Override
-  public String getFilterName() {
-    return filterName;
-  }
-
-  @Override
-  public void setFilterName(String filterName) {
-    this.filterName = filterName;
-  }
-
-  @Override
-  public String getRowType() {
-    return rowType;
-  }
-
-  @Override
-  public void setRowType(String rowType) {
-    this.rowType = rowType;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
new file mode 100644
index 0000000..5edbc62
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.response;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+import java.util.List;
+
+public class EventHistoryData {
+
+  @ApiModelProperty
+  private String id;
+
+  @ApiModelProperty
+  private String userName;
+
+  @ApiModelProperty
+  private String filtername;
+
+  @ApiModelProperty
+  private String values;
+
+  @ApiModelProperty
+  private List<String> shareNameList;
+
+  @ApiModelProperty
+  private String rowType;
+
+  public EventHistoryData() {
+    id = String.valueOf(new Date().getTime());
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getUserName() {
+    return userName;
+  }
+
+  public void setUserName(String userName) {
+    this.userName = userName;
+  }
+
+  public String getFiltername() {
+    return filtername;
+  }
+
+  public void setFiltername(String filtername) {
+    this.filtername = filtername;
+  }
+
+  public List<String> getShareNameList() {
+    return shareNameList;
+  }
+
+  public void setShareNameList(List<String> shareNameList) {
+    this.shareNameList = shareNameList;
+  }
+
+  public String getValues() {
+    return values;
+  }
+
+  public void setValues(String values) {
+    this.values = values;
+  }
+
+  public String getRowType() {
+    return rowType;
+  }
+
+  public void setRowType(String rowType) {
+    this.rowType = rowType;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
new file mode 100644
index 0000000..429005f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Collection;
+
+@ApiModel
+public class EventHistoryDataListResponse extends SearchResponse{
+
+  @ApiModelProperty
+  private String name;
+
+  @ApiModelProperty
+  private Collection<EventHistoryData> eventHistoryDataList;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Collection<EventHistoryData> getEventHistoryDataList() {
+    return eventHistoryDataList;
+  }
+
+  public void setEventHistoryDataList(Collection<EventHistoryData> eventHistoryDataList) {
+    this.eventHistoryDataList = eventHistoryDataList;
+  }
+
+  @Override
+  public int getListSize() {
+    return eventHistoryDataList != null ? eventHistoryDataList.size() : 0;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
deleted file mode 100644
index ef4e0be..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.response;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Date;
-import java.util.List;
-
-public class UserConfigData {
-
-  @ApiModelProperty
-  private String id;
-
-  @ApiModelProperty
-  private String userName;
-
-  @ApiModelProperty
-  private String filtername;
-
-  @ApiModelProperty
-  private String values;
-
-  @ApiModelProperty
-  private List<String> shareNameList;
-
-  @ApiModelProperty
-  private String rowType;
-
-  public UserConfigData() {
-    id = String.valueOf(new Date().getTime());
-  }
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public String getUserName() {
-    return userName;
-  }
-
-  public void setUserName(String userName) {
-    this.userName = userName;
-  }
-
-  public String getFiltername() {
-    return filtername;
-  }
-
-  public void setFiltername(String filtername) {
-    this.filtername = filtername;
-  }
-
-  public List<String> getShareNameList() {
-    return shareNameList;
-  }
-
-  public void setShareNameList(List<String> shareNameList) {
-    this.shareNameList = shareNameList;
-  }
-
-  public String getValues() {
-    return values;
-  }
-
-  public void setValues(String values) {
-    this.values = values;
-  }
-
-  public String getRowType() {
-    return rowType;
-  }
-
-  public void setRowType(String rowType) {
-    this.rowType = rowType;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
deleted file mode 100644
index 5c445b2..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.response;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Collection;
-
-@ApiModel
-public class UserConfigDataListResponse extends SearchResponse{
-
-  @ApiModelProperty
-  private String name;
-
-  @ApiModelProperty
-  private Collection<UserConfigData> userConfigList;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public Collection<UserConfigData> getUserConfigList() {
-    return userConfigList;
-  }
-
-  public void setUserConfigList(Collection<UserConfigData> userConfigList) {
-    this.userConfigList = userConfigList;
-  }
-
-  @Override
-  public int getListSize() {
-    return userConfigList != null ? userConfigList.size() : 0;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
new file mode 100644
index 0000000..aced94c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.rest;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.ws.rs.BeanParam;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.ambari.logsearch.manager.EventHistoryManager;
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.model.response.EventHistoryData;
+import org.apache.ambari.logsearch.model.response.EventHistoryDataListResponse;
+import org.springframework.context.annotation.Scope;
+
+import java.util.List;
+
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryOperationDescriptions.*;
+
+@Api(value = "history", description = "Event history operations")
+@Path("history")
+@Named
+@Scope("request")
+public class EventHistoryResource {
+
+  @Inject
+  private EventHistoryManager eventHistoryManager;
+
+  @POST
+  @Produces({"application/json"})
+  @ApiOperation(SAVE_EVENT_HISTORY_DATA_OD)
+  public String saveEvent(EventHistoryData eventHistoryData) {
+    return eventHistoryManager.saveEvent(eventHistoryData);
+  }
+
+  @DELETE
+  @Path("/{id}")
+  @ApiOperation(DELETE_EVENT_HISTORY_DATA_OD)
+  public void deleteEvent(@PathParam("id") String id) {
+    eventHistoryManager.deleteEvent(id);
+  }
+
+  @GET
+  @Produces({"application/json"})
+  @ApiOperation(GET_EVENT_HISTORY_DATA_OD)
+  public EventHistoryDataListResponse getEventHistory(@BeanParam EventHistoryRequest request) {
+    return eventHistoryManager.getEventHistory(request);
+  }
+
+  @GET
+  @Path("/names")
+  @Produces({"application/json"})
+  @ApiOperation(GET_ALL_USER_NAMES_OD)
+  public List<String> getAllUserName() {
+    return eventHistoryManager.getAllUserName();
+  }
+
+}


[25/26] ambari git commit: AMBARI-21202 - YARN service advisor has spelling error in yarn-site

Posted by rl...@apache.org.
AMBARI-21202 - YARN service advisor has spelling error in yarn-site


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 192162e05b7036c5dbbe120c447d7b5ac7ea5b13
Parents: f1e89e4
Author: Tim Thorpe <tt...@apache.org>
Authored: Wed Jun 14 09:33:36 2017 -0700
Committer: Tim Thorpe <tt...@apache.org>
Committed: Wed Jun 14 09:33:36 2017 -0700

----------------------------------------------------------------------
 .../resources/common-services/YARN/3.0.0.3.0/service_advisor.py  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/192162e0/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
index 3dd39e5..0fb538d 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
@@ -1796,7 +1796,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
 
     self.validators = [("yarn-site", self.validateYARNSiteConfigurationsFromHDP206),
                        ("yarn-site", self.validateYARNSiteConfigurationsFromHDP25),
-                       ("yarn-ste" , self.validateYarnSiteConfigurationsFromHDP26),
+                       ("yarn-site" , self.validateYARNSiteConfigurationsFromHDP26),
                        ("yarn-env", self.validateYARNEnvConfigurationsFromHDP206),
                        ("yarn-env", self.validateYARNEnvConfigurationsFromHDP22),
                        ("ranger-yarn-plugin-properties", self.validateYARNRangerPluginConfigurationsFromHDP22)]
@@ -1853,7 +1853,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
     validationProblems = self.toConfigurationValidationProblems(validationItems, "yarn-site")
     return validationProblems
 
-  def validateYarnSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
+  def validateYARNSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
     validationItems = []
     siteProperties = services["configurations"]["yarn-site"]["properties"]
     if services["configurations"]["yarn-site"]["properties"]["yarn.http.policy"] == 'HTTP_ONLY':


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

Posted by rl...@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/branch-feature-AMBARI-20859
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(-)
----------------------------------------------------------------------



[13/26] ambari git commit: Revert "AMBARI-21202 - YARN service advisor has spelling error in yarn-site"

Posted by rl...@apache.org.
Revert "AMBARI-21202 - YARN service advisor has spelling error in yarn-site"

This reverts commit 7dc91c5a8e75966f642a4890ed7a5750687b5928.


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 8cdf232bde26fb3a0cd46fb178be7c517d068a0c
Parents: 7515261
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Sun Jun 11 22:33:27 2017 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Mon Jun 12 15:46:51 2017 -0700

----------------------------------------------------------------------
 .../resources/common-services/YARN/3.0.0.3.0/service_advisor.py  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8cdf232b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
index 0fb538d..3dd39e5 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
@@ -1796,7 +1796,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
 
     self.validators = [("yarn-site", self.validateYARNSiteConfigurationsFromHDP206),
                        ("yarn-site", self.validateYARNSiteConfigurationsFromHDP25),
-                       ("yarn-site" , self.validateYARNSiteConfigurationsFromHDP26),
+                       ("yarn-ste" , self.validateYarnSiteConfigurationsFromHDP26),
                        ("yarn-env", self.validateYARNEnvConfigurationsFromHDP206),
                        ("yarn-env", self.validateYARNEnvConfigurationsFromHDP22),
                        ("ranger-yarn-plugin-properties", self.validateYARNRangerPluginConfigurationsFromHDP22)]
@@ -1853,7 +1853,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
     validationProblems = self.toConfigurationValidationProblems(validationItems, "yarn-site")
     return validationProblems
 
-  def validateYARNSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
+  def validateYarnSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
     validationItems = []
     siteProperties = services["configurations"]["yarn-site"]["properties"]
     if services["configurations"]["yarn-site"]["properties"]["yarn.http.policy"] == 'HTTP_ONLY':


[11/26] ambari git commit: AMBARI-20853. Service Advisor - Allow Service to define its Advisor Type as Python or Java (alejandro)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/pom.xml
----------------------------------------------------------------------
diff --git a/serviceadvisor/pom.xml b/serviceadvisor/pom.xml
new file mode 100644
index 0000000..ecf6d8b
--- /dev/null
+++ b/serviceadvisor/pom.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <!-- Can compile this project independently, cd serviceadvisor ; mvn clean package install
+
+  To test independently without needing the rest of Ambari, simply compile and run as,
+  java -jar serviceadvisor-$VERSION.jar [ACTION] [HOSTS_FILE.json] [SERVICES_FILE.json]
+  -->
+  <groupId>serviceadvisor</groupId>
+  <artifactId>serviceadvisor</artifactId>
+  <name>Service Advisor</name>
+  <version>1.0.0.0-SNAPSHOT</version>
+  <description>Service Advisor</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-assembly-plugin</artifactId>
+      <version>2.6</version>
+    </dependency>
+
+    <!-- Log Factory logging
+    The main class is expected to write to stdout and stderr appropriately.
+    -->
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.20</version>
+    </dependency>
+      <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.4</version>
+    </dependency>
+  </dependencies>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>oss.sonatype.org</id>
+      <name>OSS Sonatype Staging</name>
+      <url>https://oss.sonatype.org/content/groups/staging</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <packaging>jar</packaging>
+  <!-- Run with mvn clean package .
+  Execute as, java -jar serviceadvisor-$VERSION.jar
+  -->
+  <build>
+    <plugins>
+      <!--
+      The next 2 plugins are to include the main class in the Jar and to create a single jar with all of the dependencies.
+      It conflicts with the maven-compiler-plugin since the jar created is different.
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+              <mainClass>org.apache.ambari.stackadvisor.StackAdvisor</mainClass>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>1.6</version>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      -->
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.2</version>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
----------------------------------------------------------------------
diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
new file mode 100644
index 0000000..77c482a
--- /dev/null
+++ b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.serviceadvisor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.lang3.EnumUtils;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Class that can be called either through its jar or using its run method.
+ * The goal is to invoke a Service Advisor.
+ * Right now, it is backward compatible by invoking the python script and does not know which service is affected.
+ */
+public class ServiceAdvisor {
+  protected static Log LOG = LogFactory.getLog(ServiceAdvisor.class);
+
+  private static String USAGE = "Usage: java -jar serviceadvisor.jar [ACTION] [HOSTS_FILE.json] [SERVICES_FILE.json] [OUTPUT.txt] [ERRORS.txt]";
+  private static String PYTHON_STACK_ADVISOR_SCRIPT = "/var/lib/ambari-server/resources/scripts/stack_advisor.py";
+
+  /**
+   * Entry point for calling this class through its jar.
+   * @param args
+   */
+  public static void main(String[] args) {
+    if (args.length != 5) {
+      System.err.println(String.format("Wrong number of arguments. %s", USAGE));
+      System.exit(1);
+    }
+
+    String action = args[0];
+    String hostsFile = args[1];
+    String servicesFile = args[2];
+    String outputFile = args[3];
+    String errorFile = args[4];
+
+    int exitCode = run(action, hostsFile, servicesFile, outputFile, errorFile);
+    System.exit(exitCode);
+  }
+
+  public static int run(String action, String hostsFile, String servicesFile, String outputFile, String errorFile) {
+    LOG.info(String.format("ServiceAdvisor. Received arguments. Action: %s, Hosts File: %s, Services File: %s", action, hostsFile, servicesFile));
+    int returnCode = -1;
+
+    try {
+      ServiceAdvisorCommandType commandType = ServiceAdvisorCommandType.getEnum(action);
+
+      // TODO, load each Service's Service Advisor at Start Time and call it instead of Python command below.
+
+      ProcessBuilder builder = preparePythonShellCommand(commandType, hostsFile, servicesFile, outputFile, errorFile);
+      returnCode = launchProcess(builder);
+    } catch (IllegalArgumentException e) {
+      List<ServiceAdvisorCommandType> values = EnumUtils.getEnumList(ServiceAdvisorCommandType.class);
+      List<String> stringValues = new ArrayList<String>();
+      for (ServiceAdvisorCommandType value : values) {
+        stringValues.add(value.toString());
+      }
+      LOG.error("ServiceAdvisor. Illegal Argument. Action must be one of " + StringUtils.join(stringValues.toArray(), ", "));
+      return -1;
+    }  catch (Exception e) {
+      LOG.error("ServiceAdvisor. Failed with " + e.getMessage());
+      return -1;
+    }
+    return returnCode;
+  }
+
+  /**
+   * Generate a process to invoke a Python command for the old-style Stack Advisor.
+   * @param commandType Command Type
+   * @param hostsFile hosts.json file
+   * @param servicesFile services.json file
+   * @param outputFile output.txt
+   * @param errorFile error.txt
+   * @return Process that can launch.
+   */
+  private static ProcessBuilder preparePythonShellCommand(ServiceAdvisorCommandType commandType, String hostsFile, String servicesFile, String outputFile, String errorFile) {
+    List<String> builderParameters = new ArrayList<String>();
+
+    if (System.getProperty("os.name").contains("Windows")) {
+      builderParameters.add("cmd");
+      builderParameters.add("/c");
+    } else {
+      builderParameters.add("sh");
+      builderParameters.add("-c");
+    }
+
+    StringBuilder commandString = new StringBuilder();
+    commandString.append(PYTHON_STACK_ADVISOR_SCRIPT + " ");
+
+    commandString.append(commandType.toString()).append(" ");
+    commandString.append(hostsFile).append(" ");
+    commandString.append(servicesFile).append(" ");
+    commandString.append("1> ");
+    commandString.append(outputFile).append(" ");
+    commandString.append("2>");
+    commandString.append(errorFile).append(" ");
+
+    builderParameters.add(commandString.toString());
+
+    LOG.info("ServiceAdvisor. Python command is: " + builderParameters.toString());
+
+    return new ProcessBuilder(builderParameters);
+  }
+
+  /**
+   * Launch a process, wait for it to finish, and return its exit code.
+   * @param builder Process Builder
+   * @return Exit Code
+   * @throws Exception
+   */
+  private static int launchProcess(ProcessBuilder builder) throws Exception {
+    int exitCode = -1;
+    Process process = null;
+    try {
+      process = builder.start();
+      exitCode = process.waitFor();
+    } catch (Exception ioe) {
+      String message = "Error executing Service Advisor: ";
+      LOG.error(message, ioe);
+      throw new Exception(message + ioe.getMessage());
+    } finally {
+      if (process != null) {
+        process.destroy();
+      }
+    }
+    return exitCode;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
----------------------------------------------------------------------
diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
new file mode 100644
index 0000000..f067668
--- /dev/null
+++ b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.ambari.serviceadvisor;
+
+
+// TODO, use this class instead of org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType
+public enum ServiceAdvisorCommandType {
+
+  RECOMMEND_COMPONENT_LAYOUT("recommend-component-layout"),
+
+  VALIDATE_COMPONENT_LAYOUT("validate-component-layout"),
+
+  RECOMMEND_CONFIGURATIONS("recommend-configurations"),
+
+  RECOMMEND_CONFIGURATION_DEPENDENCIES("recommend-configuration-dependencies"),
+
+  VALIDATE_CONFIGURATIONS("validate-configurations");
+  private final String name;
+
+  private ServiceAdvisorCommandType(String name) {
+    this.name = name;
+  }
+
+  public String getValue() {
+    return this.name.toLowerCase();
+  }
+
+  @Override
+  public String toString() {
+    return this.name;
+  }
+
+  /**
+   * Instead of Enum.valueOf("value"), use this method instead to map the string to the correct Enum.
+   * @param name Name with lowercase and dashes.
+   * @return Enum that matches the string.
+   */
+  public static ServiceAdvisorCommandType getEnum(String name) {
+    for (ServiceAdvisorCommandType v : values()) {
+      if (v.getValue().equalsIgnoreCase(name.replace("_", "-"))) {
+        return v;
+      }
+    }
+    throw new IllegalArgumentException();
+  }
+}
\ No newline at end of file


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

Posted by rl...@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/branch-feature-AMBARI-20859
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


[26/26] ambari git commit: Merge branch 'trunk' into branch-feature-AMBARI-20859

Posted by rl...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-20859


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 5b9454ef4cd7483872938b01872ad0646c242571
Parents: f09670d 192162e
Author: Robert Levas <rl...@hortonworks.com>
Authored: Wed Jun 14 17:19:17 2017 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Wed Jun 14 17:19:17 2017 -0400

----------------------------------------------------------------------
 .../test/python/ambari_agent/TestHostInfo.py    | 107 +++++++++
 ambari-client/groovy-client/pom.xml             |   2 +
 .../libraries/functions/conf_select.py          |   1 -
 .../libraries/functions/hive_check.py           |   5 +-
 .../libraries/functions/packages_analyzer.py    |  53 ++++-
 .../providers/modify_properties_file.py         |   9 +-
 .../libraries/script/script.py                  |  25 ++-
 ambari-funtest/pom.xml                          |   2 +
 ambari-infra/ambari-infra-solr-client/pom.xml   |   2 +
 .../ambari-logsearch-config-api/pom.xml         |   2 +-
 .../ambari-logsearch-config-zookeeper/pom.xml   |   2 +-
 ambari-logsearch/ambari-logsearch-it/pom.xml    |   4 +-
 .../ambari-logsearch-logfeeder/pom.xml          |   4 +-
 .../logfeeder/common/LogFeederConstants.java    |   2 +-
 .../ambari/logsearch/conf/SecurityConfig.java   |  18 +-
 .../ambari/logsearch/conf/SolrConfig.java       |  12 +-
 .../conf/SolrEventHistoryPropsConfig.java       | 116 ++++++++++
 .../logsearch/conf/SolrUserPropsConfig.java     | 116 ----------
 .../conf/global/SolrEventHistoryState.java      |  60 +++++
 .../conf/global/SolrUserConfigState.java        |  60 -----
 .../EventHistoryRequestQueryConverter.java      |  67 ++++++
 .../UserConfigRequestQueryConverter.java        |  67 ------
 .../logsearch/dao/EventHistorySolrDao.java      | 117 ++++++++++
 .../logsearch/dao/SolrSchemaFieldDao.java       |   8 +-
 .../ambari/logsearch/dao/UserConfigSolrDao.java | 117 ----------
 .../ambari/logsearch/doc/DocConstants.java      |  12 +-
 .../logsearch/manager/EventHistoryManager.java  | 199 +++++++++++++++++
 .../logsearch/manager/UserConfigManager.java    | 199 -----------------
 .../request/EventHistoryParamDefinition.java    |  38 ++++
 .../request/UserConfigParamDefinition.java      |  38 ----
 .../model/request/impl/EventHistoryRequest.java |  53 +++++
 .../model/request/impl/UserConfigRequest.java   |  53 -----
 .../model/response/EventHistoryData.java        |  97 ++++++++
 .../response/EventHistoryDataListResponse.java  |  55 +++++
 .../model/response/UserConfigData.java          |  97 --------
 .../response/UserConfigDataListResponse.java    |  55 -----
 .../logsearch/rest/EventHistoryResource.java    |  82 +++++++
 .../ambari/logsearch/rest/StatusResource.java   |  16 +-
 .../logsearch/rest/UserConfigResource.java      |  82 -------
 .../ambari/logsearch/solr/SolrConstants.java    |   4 +-
 .../LogsearchEventHistoryStateFilter.java       |  52 +++++
 .../filters/LogsearchUserConfigStateFilter.java |  52 -----
 .../EventHistoryRequestQueryConverterTest.java  |  50 +++++
 .../UserConfigRequestQueryConverterTest.java    |  50 -----
 .../collection_bases/VEventHistoryListBase.js   |   8 +-
 .../scripts/model_bases/VUserFilterBase.js      |   2 +-
 .../main/webapp/scripts/views/common/Header.js  |   2 +-
 .../ambari-metrics-timelineservice/pom.xml      |   4 +-
 ambari-project/pom.xml                          |  47 +++-
 ambari-server/checkstyle.xml                    |   4 +
 ambari-server/pom.xml                           |  37 +++-
 .../actionmanager/ExecutionCommandWrapper.java  |  65 +++---
 .../ambari/server/agent/ExecutionCommand.java   |  57 +++--
 .../server/api/services/ClusterService.java     |   2 +-
 .../server/api/services/ServiceService.java     |   3 +-
 .../stackadvisor/StackAdvisorHelper.java        |  74 +++++--
 .../stackadvisor/StackAdvisorRunner.java        | 207 +++++++++++------
 .../ComponentLayoutRecommendationCommand.java   |   5 +-
 .../ComponentLayoutValidationCommand.java       |  11 +-
 ...rationDependenciesRecommendationCommand.java |  11 +-
 .../ConfigurationRecommendationCommand.java     |  11 +-
 .../ConfigurationValidationCommand.java         |  11 +-
 .../commands/StackAdvisorCommand.java           |  15 +-
 .../AmbariCustomCommandExecutionHelper.java     |   4 +-
 .../AmbariManagementControllerImpl.java         |   2 -
 .../server/controller/AuthToLocalBuilder.java   |  10 +-
 .../ambari/server/orm/dao/HostVersionDAO.java   |  16 ++
 .../server/orm/entities/HostVersionEntity.java  |   5 +
 .../ServiceComponentDesiredStateEntity.java     |   2 +-
 .../upgrades/FinalizeUpgradeAction.java         |  57 ++++-
 .../ambari/server/stack/ServiceModule.java      |   4 +
 .../server/state/RepositoryVersionState.java    |  31 ++-
 .../apache/ambari/server/state/ServiceImpl.java |   2 +-
 .../apache/ambari/server/state/ServiceInfo.java |  26 ++-
 .../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 +-
 .../KAFKA/0.10.0.3.0/kerberos.json              |   3 +
 .../common-services/KAFKA/0.10.0/kerberos.json  |   3 +
 .../common-services/KAFKA/0.9.0/kerberos.json   |   3 +
 .../0.4.0/package/scripts/ranger_admin.py       |  11 +-
 .../0.4.0/package/scripts/setup_ranger_xml.py   |  13 ++
 .../RANGER_KMS/0.5.0.2.3/package/scripts/kms.py |   8 +
 .../0.5.0.2.3/package/scripts/kms_server.py     |  10 +-
 .../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 +--
 .../configuration/spark-thrift-sparkconf.xml    |  40 ++++
 .../configuration/spark2-thrift-sparkconf.xml   |  40 ++++
 .../YARN/configuration-mapred/mapred-site.xml   |   2 +-
 .../stacks/HDP/2.6/upgrades/config-upgrade.xml  |  24 ++
 .../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml |  26 ++-
 .../stacks/HDP/2.6/upgrades/upgrade-2.6.xml     |  32 ++-
 .../src/main/resources/stacks/stack_advisor.py  | 115 +---------
 .../stackadvisor/StackAdvisorHelperTest.java    |  63 ++++--
 .../stackadvisor/StackAdvisorRunnerTest.java    |  10 +-
 .../ConfigurationRecommendationCommandTest.java |   3 +-
 .../commands/StackAdvisorCommandTest.java       |  47 ++--
 .../AmbariCustomCommandExecutionHelperTest.java |  11 +-
 .../upgrades/UpgradeActionTest.java             | 109 ++++++++-
 .../ambari/server/stack/ServiceModuleTest.java  |  31 +++
 .../custom_actions/TestInstallPackages.py       | 202 +++++++----------
 .../configs/install_packages_config.json        |  19 +-
 .../stacks/2.0.6/HBASE/test_hbase_master.py     |  11 +-
 .../2.0.6/HIVE/test_hive_service_check.py       |  14 +-
 .../stacks/2.0.6/common/test_stack_advisor.py   | 153 -------------
 .../stacks/2.0.6/configs/hbase_with_phx.json    |  12 +
 .../stacks/2.2/RANGER/test_ranger_admin.py      |   8 +
 .../stacks/2.5/RANGER/test_ranger_admin.py      |  10 +
 .../stacks/2.5/RANGER_KMS/test_kms_server.py    |  10 +
 .../stacks/2.6/RANGER/test_ranger_admin.py      |  10 +
 ambari-views/examples/weather-view/pom.xml      |   2 +-
 ambari-web/app/app.js                           |   8 +-
 .../controllers/global/cluster_controller.js    |   2 +-
 .../global/user_settings_controller.js          |   3 +
 .../main/admin/stack_and_upgrade_controller.js  |   6 +-
 ambari-web/app/data/controller_route.js         |   2 +-
 .../app/mappers/repository_version_mapper.js    |   2 +-
 ambari-web/app/messages.js                      |   4 +-
 .../models/stack_version/repository_version.js  |   2 +-
 ambari-web/app/utils/ajax/ajax.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/app/views/main/dashboard/widgets.js  |   2 +-
 ambari-web/test/app_test.js                     |  10 +-
 .../admin/stack_and_upgrade_controller_test.js  |  18 +-
 .../test/controllers/wizard/step8_test.js       |   4 +-
 .../upgrade_version_box_view_test.js            |  28 +--
 .../stack_upgrade/upgrade_wizard_view_test.js   |   2 +-
 .../admin/stack_upgrade/version_view_test.js    |   6 +-
 .../test/views/main/dashboard/widgets_test.js   |   4 +-
 .../stacks/HDF/2.0/services/KAFKA/kerberos.json |   3 +
 contrib/views/hawq/pom.xml                      |   2 +-
 contrib/views/hive-next/pom.xml                 |   4 +-
 contrib/views/hive20/pom.xml                    |   4 +-
 contrib/views/pig/pom.xml                       |   2 +-
 contrib/views/tez/pom.xml                       |   3 +-
 contrib/views/wfmanager/pom.xml                 |   1 +
 docs/pom.xml                                    |  12 +
 pom.xml                                         |  17 +-
 serviceadvisor/pom.xml                          | 103 +++++++++
 .../ambari/serviceadvisor/ServiceAdvisor.java   | 147 ++++++++++++
 .../ServiceAdvisorCommandType.java              |  63 ++++++
 utility/pom.xml                                 |  41 ++++
 .../ambari/swagger/AmbariSwaggerReader.java     | 222 +++++++++++++++++++
 .../ambari/swagger/AmbariSwaggerReaderTest.java | 182 +++++++++++++++
 utility/src/test/resources/log4j.properties     |  19 ++
 153 files changed, 3214 insertions(+), 1836 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------


[17/26] ambari git commit: AMBARI-21228. Rename userconfig resource to event history in Log Search Portal (oleewere)

Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
index 8cc6b94..3499bce 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
@@ -34,7 +34,7 @@ import java.util.Map;
 import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.AUDIT_LOGS_STATUS_OD;
 import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.SERVICE_LOGS_STATUS_OD;
 import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.STATUS_OD;
-import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.USER_CONFIG_STATUS_OD;
+import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.EVENT_HISTORY_STATUS_OD;
 
 @Api(value = "status", description = "Status Operations")
 @Path("status")
@@ -51,8 +51,8 @@ public class StatusResource {
   private SolrCollectionState solrAuditLogsState;
 
   @Inject
-  @Named("solrUserConfigState")
-  private SolrCollectionState solrUserConfigState;
+  @Named("solrEventHistoryState")
+  private SolrCollectionState solrEventHistoryState;
 
   @GET
   @Produces({"application/json"})
@@ -61,7 +61,7 @@ public class StatusResource {
     Map<String, SolrCollectionState> response = new HashMap<>();
     response.put("serviceLogs", solrServiceLogsState);
     response.put("auditLogs", solrAuditLogsState);
-    response.put("userConfig", solrUserConfigState);
+    response.put("eventHistory", solrEventHistoryState);
     return response;
   }
 
@@ -82,10 +82,10 @@ public class StatusResource {
   }
 
   @GET
-  @Path("/userconfig")
+  @Path("/history")
   @Produces({"application/json"})
-  @ApiOperation(USER_CONFIG_STATUS_OD)
-  public SolrCollectionState getSolrUserConfigStatus() {
-    return solrUserConfigState;
+  @ApiOperation(EVENT_HISTORY_STATUS_OD)
+  public SolrCollectionState getSolrEventHistoryStatus() {
+    return solrEventHistoryState;
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
deleted file mode 100644
index 00b971a..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.rest;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.ws.rs.BeanParam;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.ambari.logsearch.manager.UserConfigManager;
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.model.response.UserConfigData;
-import org.apache.ambari.logsearch.model.response.UserConfigDataListResponse;
-import org.springframework.context.annotation.Scope;
-
-import java.util.List;
-
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigOperationDescriptions.*;
-
-@Api(value = "userconfig", description = "User config operations")
-@Path("userconfig")
-@Named
-@Scope("request")
-public class UserConfigResource {
-
-  @Inject
-  private UserConfigManager userConfigManager;
-
-  @POST
-  @Produces({"application/json"})
-  @ApiOperation(SAVE_USER_CONFIG_OD)
-  public String saveUserConfig(UserConfigData userConfig) {
-    return userConfigManager.saveUserConfig(userConfig);
-  }
-
-  @DELETE
-  @Path("/{id}")
-  @ApiOperation(DELETE_USER_CONFIG_OD)
-  public void deleteUserConfig(@PathParam("id") String id) {
-    userConfigManager.deleteUserConfig(id);
-  }
-
-  @GET
-  @Produces({"application/json"})
-  @ApiOperation(GET_USER_CONFIG_OD)
-  public UserConfigDataListResponse getUserConfig(@BeanParam UserConfigRequest request) {
-    return userConfigManager.getUserConfig(request);
-  }
-
-  @GET
-  @Path("/names")
-  @Produces({"application/json"})
-  @ApiOperation(GET_ALL_USER_NAMES_OD)
-  public List<String> getAllUserName() {
-    return userConfigManager.getAllUserName();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
index 39e134a..60fc1a3 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
@@ -98,8 +98,8 @@ public class SolrConstants {
     public static final String AUDIT_TAGS_STR = "tags_str";
   }
 
-  public class UserConfigConstants {
-    private UserConfigConstants() {
+  public class EventHistoryConstants {
+    private EventHistoryConstants() {
     }
 
     public static final String ID = "id";

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
new file mode 100644
index 0000000..356886b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.web.filters;
+
+import org.apache.ambari.logsearch.common.MessageEnums;
+import org.apache.ambari.logsearch.common.VResponse;
+import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import org.apache.ambari.logsearch.util.RESTErrorUtil;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class LogsearchEventHistoryStateFilter extends AbstractLogsearchGlobalStateFilter {
+
+
+  public LogsearchEventHistoryStateFilter(RequestMatcher requestMatcher, SolrCollectionState state, SolrPropsConfig solrPropsConfig) {
+    super(requestMatcher, state, solrPropsConfig);
+  }
+
+  @Override
+  public VResponse getErrorResponse(SolrCollectionState solrCollectionState, SolrPropsConfig solrPropsConfig, HttpServletRequest request) {
+    String requestUri = request.getRequestURI();
+    if (!solrCollectionState.isZnodeReady()) {
+      return RESTErrorUtil.createMessageResponse(String.format(ZNODE_NOT_READY_MSG,
+        "history", solrPropsConfig.getZkConnectString(), requestUri), MessageEnums.ZNODE_NOT_READY);
+    } else if (!solrCollectionState.isConfigurationUploaded()) {
+      return RESTErrorUtil.createMessageResponse(String.format(ZK_CONFIG_NOT_READY_MSG, "history",
+        solrPropsConfig.getConfigName(), solrPropsConfig.getCollection(), requestUri), MessageEnums.ZK_CONFIG_NOT_READY);
+    } else if (!solrCollectionState.isSolrCollectionReady()) {
+      return RESTErrorUtil.createMessageResponse(String.format(SOLR_COLLECTION_NOT_READY_MSG,
+        solrPropsConfig.getCollection(), requestUri), MessageEnums.SOLR_COLLECTION_NOT_READY);
+    }
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
deleted file mode 100644
index 037bed0..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.web.filters;
-
-import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.common.VResponse;
-import org.apache.ambari.logsearch.conf.SolrPropsConfig;
-import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
-import org.apache.ambari.logsearch.util.RESTErrorUtil;
-import org.springframework.security.web.util.matcher.RequestMatcher;
-
-import javax.servlet.http.HttpServletRequest;
-
-public class LogsearchUserConfigStateFilter extends AbstractLogsearchGlobalStateFilter {
-
-
-  public LogsearchUserConfigStateFilter(RequestMatcher requestMatcher, SolrCollectionState state, SolrPropsConfig solrPropsConfig) {
-    super(requestMatcher, state, solrPropsConfig);
-  }
-
-  @Override
-  public VResponse getErrorResponse(SolrCollectionState solrCollectionState, SolrPropsConfig solrPropsConfig, HttpServletRequest request) {
-    String requestUri = request.getRequestURI();
-    if (!solrCollectionState.isZnodeReady()) {
-      return RESTErrorUtil.createMessageResponse(String.format(ZNODE_NOT_READY_MSG,
-        "userconfig", solrPropsConfig.getZkConnectString(), requestUri), MessageEnums.ZNODE_NOT_READY);
-    } else if (!solrCollectionState.isConfigurationUploaded()) {
-      return RESTErrorUtil.createMessageResponse(String.format(ZK_CONFIG_NOT_READY_MSG, "userconfig",
-        solrPropsConfig.getConfigName(), solrPropsConfig.getCollection(), requestUri), MessageEnums.ZK_CONFIG_NOT_READY);
-    } else if (!solrCollectionState.isSolrCollectionReady()) {
-      return RESTErrorUtil.createMessageResponse(String.format(SOLR_COLLECTION_NOT_READY_MSG,
-        solrPropsConfig.getCollection(), requestUri), MessageEnums.SOLR_COLLECTION_NOT_READY);
-    }
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
new file mode 100644
index 0000000..2940a7f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.converter;
+
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class EventHistoryRequestQueryConverterTest extends AbstractRequestConverterTest {
+
+  private EventHistoryRequestQueryConverter underTest;
+
+  @Before
+  public void setUp() {
+    underTest = new EventHistoryRequestQueryConverter();
+  }
+
+  @Test
+  public void testConvert() {
+    // GIVEN
+    EventHistoryRequest request = new EventHistoryRequest();
+    request.setRowType("myRowType"); // TODO: validate these 3 fields @Valid on EventHistoryRequest object -> not null
+    request.setFilterName("myFilterName");
+    request.setClusters("cl1,cl2");
+    // WHEN
+    SolrQuery queryResult = underTest.convert(request);
+    // THEN
+    assertEquals("?q=*%3A*&fq=rowtype%3AmyRowType&fq=filtername%3A*myFilterName*&fq=cluster%3A%28cl1+OR+cl2%29&start=0&rows=10&sort=filtername+asc",
+      queryResult.toQueryString());
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
deleted file mode 100644
index 66560c5..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.converter;
-
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.solr.client.solrj.SolrQuery;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class UserConfigRequestQueryConverterTest extends AbstractRequestConverterTest {
-
-  private UserConfigRequestQueryConverter underTest;
-
-  @Before
-  public void setUp() {
-    underTest = new UserConfigRequestQueryConverter();
-  }
-
-  @Test
-  public void testConvert() {
-    // GIVEN
-    UserConfigRequest request = new UserConfigRequest();
-    request.setRowType("myRowType"); // TODO: validate these 3 fields @Valid on UserConfigRequest object -> not null
-    request.setFilterName("myFilterName");
-    request.setClusters("cl1,cl2");
-    // WHEN
-    SolrQuery queryResult = underTest.convert(request);
-    // THEN
-    assertEquals("?q=*%3A*&fq=rowtype%3AmyRowType&fq=filtername%3A*myFilterName*&fq=cluster%3A%28cl1+OR+cl2%29&start=0&rows=10&sort=filtername+asc",
-      queryResult.toQueryString());
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
index 06b2619..596695b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
@@ -28,7 +28,7 @@ define(['require',
     var VEventHistoryListBase = BaseCollection.extend(
         /** @lends VEventHistoryListBase.prototype */
         {
-            url: Globals.baseURL + 'userconfig',
+            url: Globals.baseURL + 'history',
 
             model: VEventHistory,
 
@@ -48,7 +48,7 @@ define(['require',
              *************************/
 
             saveEventHistory: function(postData, options) {
-                var url = Globals.baseURL + 'userconfig';
+                var url = Globals.baseURL + 'history';
 
                 options = _.extend({
                     data: JSON.stringify(postData),
@@ -59,7 +59,7 @@ define(['require',
                 return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
             },
             saveDashboard: function(postData, options) {
-                var url = Globals.baseURL + 'userconfig';
+                var url = Globals.baseURL + 'history';
 
                 options = _.extend({
                     data: JSON.stringify(postData),
@@ -70,7 +70,7 @@ define(['require',
                 return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
             },
             deleteEventHistory: function(postData, options) {
-                var url = Globals.baseURL + 'userconfig/' + postData.id;
+                var url = Globals.baseURL + 'history/' + postData.id;
 
                 options = _.extend({
                     contentType: 'application/json',

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
index cd469de..a672a94 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
@@ -27,7 +27,7 @@ define(['require',
 	var VUserFilterBase = BaseModel.extend(
 	/** @lends VUserFilterBase.prototype */
 	{
-		urlRoot: Globals.baseURL + 'userconfig/filters',
+		urlRoot: Globals.baseURL + 'history/filters',
 
 		defaults: {},
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
index bbd57465..3cdca56 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
@@ -236,7 +236,7 @@ define(['require',
                     content.model.set(content.setValues());
 
                     content.model.save(content.model.attributes, {
-                        url: Globals.baseURL + 'userconfig/filters',
+                        url: Globals.baseURL + 'history/filters',
                         success : function(model,response){
                             Utils.notifySuccess({
                                 content: "Filter has been saved."


[12/26] ambari git commit: AMBARI-20853. Service Advisor - Allow Service to define its Advisor Type as Python or Java (alejandro)

Posted by rl...@apache.org.
AMBARI-20853. Service Advisor - Allow Service to define its Advisor Type as Python or Java (alejandro)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f1ca09c03a2fe316129aa5623c675b62d3177112
Parents: acc12fb
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Mon Jun 5 15:24:49 2017 -0700
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Mon Jun 12 13:02:59 2017 -0700

----------------------------------------------------------------------
 ambari-client/groovy-client/pom.xml             |   2 +
 ambari-funtest/pom.xml                          |   2 +
 ambari-infra/ambari-infra-solr-client/pom.xml   |   2 +
 .../ambari-logsearch-config-api/pom.xml         |   2 +-
 .../ambari-logsearch-config-zookeeper/pom.xml   |   2 +-
 ambari-logsearch/ambari-logsearch-it/pom.xml    |   4 +-
 .../ambari-logsearch-logfeeder/pom.xml          |   4 +-
 .../ambari-metrics-timelineservice/pom.xml      |   4 +-
 ambari-project/pom.xml                          |   4 +-
 ambari-server/checkstyle.xml                    |   4 +
 ambari-server/pom.xml                           |  25 ++-
 .../stackadvisor/StackAdvisorHelper.java        |  74 +++++--
 .../stackadvisor/StackAdvisorRunner.java        | 207 ++++++++++++-------
 .../ComponentLayoutRecommendationCommand.java   |   5 +-
 .../ComponentLayoutValidationCommand.java       |  11 +-
 ...rationDependenciesRecommendationCommand.java |  11 +-
 .../ConfigurationRecommendationCommand.java     |  11 +-
 .../ConfigurationValidationCommand.java         |  11 +-
 .../commands/StackAdvisorCommand.java           |  15 +-
 .../ambari/server/stack/ServiceModule.java      |   4 +
 .../apache/ambari/server/state/ServiceInfo.java |  26 ++-
 .../stackadvisor/StackAdvisorHelperTest.java    |  63 ++++--
 .../stackadvisor/StackAdvisorRunnerTest.java    |  10 +-
 .../ConfigurationRecommendationCommandTest.java |   3 +-
 .../commands/StackAdvisorCommandTest.java       |  47 ++---
 .../ambari/server/stack/ServiceModuleTest.java  |  31 +++
 ambari-views/examples/weather-view/pom.xml      |   2 +-
 contrib/views/hawq/pom.xml                      |   2 +-
 contrib/views/hive-next/pom.xml                 |   4 +-
 contrib/views/hive20/pom.xml                    |   4 +-
 contrib/views/pig/pom.xml                       |   2 +-
 contrib/views/tez/pom.xml                       |   3 +-
 contrib/views/wfmanager/pom.xml                 |   1 +
 pom.xml                                         |  17 +-
 serviceadvisor/pom.xml                          | 103 +++++++++
 .../ambari/serviceadvisor/ServiceAdvisor.java   | 147 +++++++++++++
 .../ServiceAdvisorCommandType.java              |  63 ++++++
 37 files changed, 756 insertions(+), 176 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-client/groovy-client/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-client/groovy-client/pom.xml b/ambari-client/groovy-client/pom.xml
index fa89a73..8fafdec 100644
--- a/ambari-client/groovy-client/pom.xml
+++ b/ambari-client/groovy-client/pom.xml
@@ -29,10 +29,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.groovy</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-funtest/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-funtest/pom.xml b/ambari-funtest/pom.xml
index 66678c2..3738106 100644
--- a/ambari-funtest/pom.xml
+++ b/ambari-funtest/pom.xml
@@ -266,10 +266,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-infra/ambari-infra-solr-client/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/pom.xml b/ambari-infra/ambari-infra-solr-client/pom.xml
index 8cb2248..d103003 100644
--- a/ambari-infra/ambari-infra-solr-client/pom.xml
+++ b/ambari-infra/ambari-infra-solr-client/pom.xml
@@ -60,10 +60,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-config-api/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-config-api/pom.xml b/ambari-logsearch/ambari-logsearch-config-api/pom.xml
index 5355906..59286a6 100644
--- a/ambari-logsearch/ambari-logsearch-config-api/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-config-api/pom.xml
@@ -43,7 +43,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.7</version>
+      <version>1.7.20</version>
     </dependency>
   </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml b/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
index 7ecda60..4e9964c 100644
--- a/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
@@ -73,7 +73,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.7</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>com.google.code.gson</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-it/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/pom.xml b/ambari-logsearch/ambari-logsearch-it/pom.xml
index 81af9e8..db3e09f 100644
--- a/ambari-logsearch/ambari-logsearch-it/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-it/pom.xml
@@ -81,12 +81,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.7</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>1.7.10</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>com.flipkart.zjsonpatch</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml b/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
index ddef52f..ce784cb 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
@@ -99,12 +99,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.7</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>1.7.10</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-metrics/ambari-metrics-timelineservice/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/pom.xml b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
index f9d7e19..3419f16 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/pom.xml
+++ b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
@@ -568,13 +568,13 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.2</version>
+      <version>1.7.20</version>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>1.7.2</version>
+      <version>1.7.20</version>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 64d1416..9bb2e26 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -210,12 +210,12 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
-        <version>1.7.2</version>
+        <version>1.7.20</version>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
-        <version>1.7.2</version>
+        <version>1.7.20</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/checkstyle.xml
----------------------------------------------------------------------
diff --git a/ambari-server/checkstyle.xml b/ambari-server/checkstyle.xml
index 6b4824a..97fdc2a 100644
--- a/ambari-server/checkstyle.xml
+++ b/ambari-server/checkstyle.xml
@@ -11,6 +11,10 @@
   "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
   "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
 <module name="Checker">
+  <!-- Checkstyle binds to phase "validate" by default.
+  Run independently as, cd ambari-server ; mvn checkstyle:checkstyle
+  Or can skip as, mvn ... -Dcheckstyle.skip
+  -->
   <module name="TreeWalker">
     <module name="AvoidTransactionalOnPrivateMethodsCheck"/>
     <!-- <module name="UndocumentedRestApiOperationCheck"/> Swagger - uncomment when API documentation is done -->

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index d2b65af..a1cd239 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -837,6 +837,10 @@
         <artifactId>jetty-maven-plugin</artifactId>
         <version>${jetty.version}</version>
       </plugin>
+      <!-- Checkstyle binds to phase "validate" by default.
+      Run independently as, cd ambari-server ; mvn checkstyle:checkstyle
+      Or can skip as, mvn ... -Dcheckstyle.skip
+      -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
@@ -1287,10 +1291,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>
@@ -1354,6 +1360,12 @@
     <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
+      <version>2.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.1</version>
     </dependency>
     <dependency>
       <groupId>commons-net</groupId>
@@ -1641,7 +1653,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jul-to-slf4j</artifactId>
-      <version>1.7.2</version>
+      <version>1.7.20</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>io.dropwizard.metrics</groupId>
@@ -1653,6 +1670,12 @@
       <artifactId>metrics-jvm</artifactId>
       <version>3.1.0</version>
     </dependency>
+    
+    <dependency>
+      <groupId>serviceadvisor</groupId>
+      <artifactId>serviceadvisor</artifactId>
+      <version>1.0.0.0-SNAPSHOT</version>
+    </dependency>
 
     <!-- Dependency in order to annotate unit tests with a category. -->
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
index 3083d9f..3e5599c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.api.services.stackadvisor;
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest.StackAdvisorRequestType;
 import org.apache.ambari.server.api.services.stackadvisor.commands.ComponentLayoutRecommendationCommand;
@@ -33,16 +34,23 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
 import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
 import org.apache.ambari.server.configuration.Configuration;
 
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+
 @Singleton
 public class StackAdvisorHelper {
 
+  protected static Log LOG = LogFactory.getLog(StackAdvisorHelper.class);
+
   private File recommendationsDir;
   private String recommendationsArtifactsLifetime;
   private int recommendationsArtifactsRolloverMax;
-  private String stackAdvisorScript;
+  public static String pythonStackAdvisorScript;
   private final AmbariMetaInfo metaInfo;
 
   /* Monotonically increasing requestid */
@@ -55,7 +63,8 @@ public class StackAdvisorHelper {
     this.recommendationsDir = conf.getRecommendationsDir();
     this.recommendationsArtifactsLifetime = conf.getRecommendationsArtifactsLifetime();
     this.recommendationsArtifactsRolloverMax = conf.getRecommendationsArtifactsRolloverMax();
-    this.stackAdvisorScript = conf.getStackAdvisorScript();
+
+    this.pythonStackAdvisorScript = conf.getStackAdvisorScript();
     this.saRunner = saRunner;
     this.metaInfo = metaInfo;
   }
@@ -72,20 +81,26 @@ public class StackAdvisorHelper {
       throws StackAdvisorException {
       requestId = generateRequestId();
 
-    StackAdvisorCommand<ValidationResponse> command = createValidationCommand(request
-        .getRequestType());
+    // TODO, need frontend to pass the Service Name that was modified.
+    // For now, hardcode.
+    // Once fixed, change StackAdvisorHelperTest.java to use the actual service name.
+    String serviceName = "ZOOKEEPER";
+    ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+    StackAdvisorCommand<ValidationResponse> command = createValidationCommand(serviceName, request);
 
-    return command.invoke(request);
+    return command.invoke(request, serviceAdvisorType);
   }
 
-  StackAdvisorCommand<ValidationResponse> createValidationCommand(
-      StackAdvisorRequestType requestType) throws StackAdvisorException {
+  StackAdvisorCommand<ValidationResponse> createValidationCommand(String serviceName, StackAdvisorRequest request) throws StackAdvisorException {
+    StackAdvisorRequestType requestType = request.getRequestType();
+    ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+
     StackAdvisorCommand<ValidationResponse> command;
     if (requestType == StackAdvisorRequestType.HOST_GROUPS) {
-      command = new ComponentLayoutValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+      command = new ComponentLayoutValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
           requestId, saRunner, metaInfo);
     } else if (requestType == StackAdvisorRequestType.CONFIGURATIONS) {
-      command = new ConfigurationValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+      command = new ConfigurationValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
           requestId, saRunner, metaInfo);
     } else {
       throw new StackAdvisorRequestException(String.format("Unsupported request type, type=%s",
@@ -107,23 +122,29 @@ public class StackAdvisorHelper {
       throws StackAdvisorException {
       requestId = generateRequestId();
 
-      StackAdvisorCommand<RecommendationResponse> command = createRecommendationCommand(request
-        .getRequestType());
+    // TODO, need to pass the service Name that was modified.
+    // For now, hardcode
+    String serviceName = "ZOOKEEPER";
+
+    ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+    StackAdvisorCommand<RecommendationResponse> command = createRecommendationCommand(serviceName, request);
 
-    return command.invoke(request);
+    return command.invoke(request, serviceAdvisorType);
   }
 
-  StackAdvisorCommand<RecommendationResponse> createRecommendationCommand(
-      StackAdvisorRequestType requestType) throws StackAdvisorException {
+  StackAdvisorCommand<RecommendationResponse> createRecommendationCommand(String serviceName, StackAdvisorRequest request) throws StackAdvisorException {
+    StackAdvisorRequestType requestType = request.getRequestType();
+    ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+
     StackAdvisorCommand<RecommendationResponse> command;
     if (requestType == StackAdvisorRequestType.HOST_GROUPS) {
-      command = new ComponentLayoutRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+      command = new ComponentLayoutRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
           requestId, saRunner, metaInfo);
     } else if (requestType == StackAdvisorRequestType.CONFIGURATIONS) {
-      command = new ConfigurationRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+      command = new ConfigurationRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
           requestId, saRunner, metaInfo);
     } else if (requestType == StackAdvisorRequestType.CONFIGURATION_DEPENDENCIES) {
-      command = new ConfigurationDependenciesRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+      command = new ConfigurationDependenciesRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
           requestId, saRunner, metaInfo);
     } else {
       throw new StackAdvisorRequestException(String.format("Unsupported request type, type=%s",
@@ -134,6 +155,25 @@ public class StackAdvisorHelper {
   }
 
   /**
+   * Get the Service Advisor type that the service defines for the specified stack and version. If an error, return null.
+   * @param stackName Stack Name
+   * @param stackVersion Stack Version
+   * @param serviceName Service Name
+   * @return Service Advisor type for that Stack, Version, and Service
+   */
+  private ServiceInfo.ServiceAdvisorType getServiceAdvisorType(String stackName, String stackVersion, String serviceName) {
+    try {
+      ServiceInfo service = metaInfo.getService(stackName, stackVersion, serviceName);
+      ServiceInfo.ServiceAdvisorType serviceAdvisorType = service.getServiceAdvisorType();
+
+      return serviceAdvisorType;
+    } catch (AmbariException e) {
+      ;
+    }
+    return null;
+  }
+
+  /**
    * Returns an incremented requestId. Rollsover back to 0 in case the requestId >= recommendationsArtifactsrollovermax
    * @return {int requestId}
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
index a4b7915..90b95b3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
@@ -24,123 +24,190 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+
 @Singleton
 public class StackAdvisorRunner {
 
   private final static Logger LOG = LoggerFactory.getLogger(StackAdvisorRunner.class);
 
+  @Inject
+  private Configuration configs;
+
   /**
    * Runs stack_advisor.py script in the specified {@code actionDirectory}.
    *
-   * @param script stack advisor script
+   * @param serviceAdvisorType PYTHON or JAVA
    * @param saCommandType {@link StackAdvisorCommandType} to run.
    * @param actionDirectory directory for the action
    */
-  public void runScript(String script, StackAdvisorCommandType saCommandType, File actionDirectory)
+  public void runScript(ServiceInfo.ServiceAdvisorType serviceAdvisorType, StackAdvisorCommandType saCommandType, File actionDirectory)
       throws StackAdvisorException {
-    LOG.info(String.format("Script=%s, actionDirectory=%s, command=%s", script, actionDirectory,
+    LOG.info(String.format("StackAdvisorRunner. serviceAdvisorType=%s, actionDirectory=%s, command=%s", serviceAdvisorType.toString(), actionDirectory,
         saCommandType));
 
     String outputFile = actionDirectory + File.separator + "stackadvisor.out";
     String errorFile = actionDirectory + File.separator + "stackadvisor.err";
 
-    ProcessBuilder builder = prepareShellCommand(script, saCommandType,
-        actionDirectory, outputFile,
-        errorFile);
+    String hostsFile = actionDirectory + File.separator + "hosts.json";
+    String servicesFile = actionDirectory + File.separator + "services.json";
+
+    LOG.info("StackAdvisorRunner. Expected files: hosts.json={}, services.json={}, output={}, error={}", hostsFile, servicesFile, outputFile, errorFile);
+
+    int stackAdvisorReturnCode = -1;
+
+    switch (serviceAdvisorType) {
+      case JAVA:
+        org.apache.ambari.serviceadvisor.ServiceAdvisor serviceAdvisor = new org.apache.ambari.serviceadvisor.ServiceAdvisor();
+
+        LOG.info("StackAdvisorRunner.runScript(): Calling Java ServiceAdvisor's run method.");
+        stackAdvisorReturnCode = serviceAdvisor.run(saCommandType.toString(), hostsFile, servicesFile, outputFile, errorFile);
+        LOG.info(String.format("StackAdvisorRunner.runScript(): Java ServiceAdvisor's return code: %d", stackAdvisorReturnCode));
+        break;
+      case PYTHON:
+        LOG.info("StackAdvisorRunner.runScript(): Calling Python Stack Advisor.");
+        ProcessBuilder builder = prepareShellCommand(ServiceInfo.ServiceAdvisorType.PYTHON, StackAdvisorHelper.pythonStackAdvisorScript, saCommandType,
+            actionDirectory, outputFile,
+            errorFile);
+        stackAdvisorReturnCode = launchProcess(builder);
+        break;
+    }
+
+    // For both Python and Java, need to process log files for now.
+    processLogs(stackAdvisorReturnCode, outputFile, errorFile);
+  }
 
+  /**
+   * Launch a process, wait for it to finish, and return its exit code.
+   * @param builder Process Builder
+   * @return
+   * @throws StackAdvisorException
+   */
+  private int launchProcess(ProcessBuilder builder) throws StackAdvisorException {
+    int exitCode = -1;
+    Process process = null;
     try {
-      Process process = builder.start();
-
-      try {
-        LOG.info("Stack-advisor output={}, error={}", outputFile, errorFile);
-
-        int exitCode = process.waitFor();
-        String outMessage;
-        String errMessage = null;
-        try {
-          outMessage = FileUtils.readFileToString(new File(outputFile)).trim();
-          errMessage = FileUtils.readFileToString(new File(errorFile)).trim();
-          LOG.info("Stack advisor output files");
-          LOG.info("    advisor script stdout: {}", outMessage);
-          LOG.info("    advisor script stderr: {}", errMessage);
-        } catch (IOException io) {
-          LOG.error("Error in reading script log files", io);
-        }
-        if (exitCode > 0) {
-          String errorMessage;
-          if (errMessage != null) {
-            // We want to get the last line.
-            int index = errMessage.lastIndexOf("\n");
-            if (index > 0 && index == (errMessage.length() - 1)) {
-              index = errMessage.lastIndexOf("\n", index - 1); // sentence ended with newline
-            }
-            if (index > -1) {
-              errMessage = errMessage.substring(index + 1).trim();
-            }
-            errorMessage = "Stack Advisor reported an error: " + errMessage;
-          } else {
-            errorMessage = "Error occurred during stack advisor execution";
+      process = builder.start();
+      exitCode = process.waitFor();
+    } catch (Exception ioe) {
+      String message = "Error executing Stack Advisor: ";
+      LOG.error(message, ioe);
+      throw new StackAdvisorException(message + ioe.getMessage());
+    } finally {
+      if (process != null) {
+        process.destroy();
+      }
+    }
+    return exitCode;
+  }
+
+  /**
+   * Process the exit code and logs. If non-zero then parse the log files and raise the appropriate exception.
+   * @param exitCode Process exit code
+   * @param outputFile Path to output file
+   * @param errorFile Path to error file
+   * @throws StackAdvisorException
+   */
+  private void processLogs(int exitCode, String outputFile, String errorFile) throws StackAdvisorException {
+    String outMessage = printMessage("stdout", outputFile);
+    String errMessage = printMessage("stderr", errorFile);
+
+    try {
+      if (exitCode != 0) {
+        String errorMessage;
+        if (errMessage != null) {
+          // We want to get the last line.
+          int index = errMessage.lastIndexOf("\n");
+          if (index > 0 && index == (errMessage.length() - 1)) {
+            index = errMessage.lastIndexOf("\n", index - 1); // sentence ended with newline
           }
-          errorMessage += "\nStdOut file: " + outputFile + "\n";
-          errorMessage += "\nStdErr file: " + errorFile;
-          switch (exitCode) {
-            case 1:
-              throw new StackAdvisorRequestException(errorMessage);
-            case 2:
-              throw new StackAdvisorException(errorMessage);
+          if (index > -1) {
+            errMessage = errMessage.substring(index + 1).trim();
           }
+          errorMessage = String.format("Stack Advisor reported an error. Exit Code: %s. Error: %s ", exitCode, errMessage);
+        } else {
+          errorMessage = String.format("Error occurred during Stack Advisor execution. Exit Code: %s", exitCode);
+        }
+        errorMessage += "\nStdOut file: " + outputFile + "\n";
+        errorMessage += "\nStdErr file: " + errorFile;
+        switch (exitCode) {
+          case 1:
+            throw new StackAdvisorRequestException(errorMessage);
+          case 2:
+            throw new StackAdvisorException(errorMessage);
         }
-      } finally {
-        process.destroy();
       }
     } catch (StackAdvisorException ex) {
       throw ex;
-    } catch (Exception ioe) {
-      String message = "Error executing stack advisor: ";
-      LOG.error(message, ioe);
-      throw new StackAdvisorException(message + ioe.getMessage());
     }
   }
 
   /**
+   * Logs messages from the output/error file.
+   * @param type Severity type, stdout or stderr
+   * @param file File path
+   * @return File to a String
+   */
+  private String printMessage(String type, String file) {
+    String message = null;
+    try {
+      message = FileUtils.readFileToString(new File(file)).trim();
+      LOG.info("    Advisor script {}: {}", type, message);
+    } catch (IOException io) {
+      LOG.error("Error in reading script log files", io);
+    }
+    return message;
+  }
+
+  /**
    * Gets an instance of a {@link ProcessBuilder} that's ready to execute the
    * shell command to run the stack advisor script. This will take the
    * environment variables from the current process.
    *
-   * @param script
-   * @param saCommandType
-   * @param actionDirectory
-   * @param outputFile
-   * @param errorFile
-   * @return
+   * @param serviceAdvisorType Python or Java
+   * @param script Python script or jar path
+   * @param saCommandType command type such as validate, configure
+   * @param actionDirectory Directory that contains hosts.json, services.json, and output files
+   * @param outputFile Output file path
+   * @param errorFile Error file path
+   * @return Process that can launch
    */
-  ProcessBuilder prepareShellCommand(String script,
-      StackAdvisorCommandType saCommandType,
-      File actionDirectory, String outputFile, String errorFile) {
+  ProcessBuilder prepareShellCommand(ServiceInfo.ServiceAdvisorType serviceAdvisorType, String script,
+                                     StackAdvisorCommandType saCommandType,
+                                     File actionDirectory, String outputFile, String errorFile) {
     String hostsFile = actionDirectory + File.separator + "hosts.json";
     String servicesFile = actionDirectory + File.separator + "services.json";
 
     // includes the original command plus the arguments for it
-    List<String> builderParameters = new ArrayList<>();
-    if (System.getProperty("os.name").contains("Windows")) {
-      builderParameters.add("cmd");
-      builderParameters.add("/c");
-    } else {
-      builderParameters.add("sh");
-      builderParameters.add("-c");
+    List<String> builderParameters = new ArrayList<String>();
+
+    switch (serviceAdvisorType) {
+      case PYTHON:
+      case JAVA:
+        if (System.getProperty("os.name").contains("Windows")) {
+          builderParameters.add("cmd");
+          builderParameters.add("/c");
+        } else {
+          builderParameters.add("sh");
+          builderParameters.add("-c");
+        }
+        break;
+      default:
+        break;
     }
 
     // for the 3rd argument, build a single parameter since we use -c
     // ProcessBuilder doesn't support output redirection until JDK 1.7
-    String commandStringParameters[] = new String[] { script,
-        saCommandType.toString(), hostsFile,
-        servicesFile, "1>", outputFile, "2>", errorFile };
+    String commandStringParameters[] = new String[] {script, saCommandType.toString(), hostsFile, servicesFile, "1>", outputFile, "2>", errorFile};
 
     StringBuilder commandString = new StringBuilder();
     for (String command : commandStringParameters) {
@@ -149,7 +216,7 @@ public class StackAdvisorRunner {
 
     builderParameters.add(commandString.toString());
 
-    LOG.debug("Stack advisor command is {}", builderParameters);
+    LOG.debug("StackAdvisorRunner. Stack advisor command is {}", StringUtils.join(" ", builderParameters));
 
     return new ProcessBuilder(builderParameters);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
index ca1d95f2..6a0c4d6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
@@ -25,6 +25,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 
 /**
  * {@link StackAdvisorCommand} implementation for component-layout
@@ -35,11 +36,11 @@ public class ComponentLayoutRecommendationCommand extends
 
   public ComponentLayoutRecommendationCommand(File recommendationsDir,
                                               String recommendationsArtifactsLifetime,
-                                              String stackAdvisorScript,
+                                              ServiceInfo.ServiceAdvisorType serviceAdvisorType,
                                               int requestId,
                                               StackAdvisorRunner saRunner,
                                               AmbariMetaInfo metaInfo) {
-    super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+    super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
index 91d8f9c..feba22e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
@@ -25,15 +25,20 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 
 /**
  * {@link StackAdvisorCommand} implementation for component-layout validation.
  */
 public class ComponentLayoutValidationCommand extends StackAdvisorCommand<ValidationResponse> {
 
-  public ComponentLayoutValidationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
-                                          int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
-    super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+  public ComponentLayoutValidationCommand(File recommendationsDir,
+                                          String recommendationsArtifactsLifetime,
+                                          ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+                                          int requestId,
+                                          StackAdvisorRunner saRunner,
+                                          AmbariMetaInfo metaInfo) {
+    super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
index fae0b16..83a6306 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 
 /**
  * {@link StackAdvisorCommand} implementation for
@@ -40,9 +41,13 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
 public class ConfigurationDependenciesRecommendationCommand extends
     StackAdvisorCommand<RecommendationResponse> {
 
-  public ConfigurationDependenciesRecommendationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
-                                                        StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
-    super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+  public ConfigurationDependenciesRecommendationCommand(File recommendationsDir,
+                                                        String recommendationsArtifactsLifetime,
+                                                        ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+                                                        int requestId,
+                                                        StackAdvisorRunner saRunner,
+                                                        AmbariMetaInfo metaInfo) {
+    super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
index e25e39b..7ac3fdb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 
 /**
  * {@link org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommand} implementation for
@@ -40,9 +41,13 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
 public class ConfigurationRecommendationCommand extends
     StackAdvisorCommand<RecommendationResponse> {
 
-  public ConfigurationRecommendationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
-                                            StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
-    super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+  public ConfigurationRecommendationCommand(File recommendationsDir,
+                                            String recommendationsArtifactsLifetime,
+                                            ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+                                            int requestId,
+                                            StackAdvisorRunner saRunner,
+                                            AmbariMetaInfo metaInfo) {
+    super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
index 1892a82..1b6b703 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
@@ -25,15 +25,20 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 
 /**
  * {@link StackAdvisorCommand} implementation for configuration validation.
  */
 public class ConfigurationValidationCommand extends StackAdvisorCommand<ValidationResponse> {
 
-  public ConfigurationValidationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
-                                        int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
-    super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+  public ConfigurationValidationCommand(File recommendationsDir,
+                                        String recommendationsArtifactsLifetime,
+                                        ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+                                        int requestId,
+                                        StackAdvisorRunner saRunner,
+                                        AmbariMetaInfo metaInfo) {
+    super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
index c2895d9..356754d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
@@ -67,7 +67,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
 
   /**
    * Type of response object provided by extending classes when
-   * {@link #invoke(StackAdvisorRequest)} is called.
+   * {@link #invoke(StackAdvisorRequest, ServiceInfo.ServiceAdvisorType)} is called.
    */
   private Class<T> type;
 
@@ -98,7 +98,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
 
   private File recommendationsDir;
   private String recommendationsArtifactsLifetime;
-  private String stackAdvisorScript;
+  private ServiceInfo.ServiceAdvisorType serviceAdvisorType;
 
   private int requestId;
   private File requestDirectory;
@@ -109,7 +109,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
   private final AmbariMetaInfo metaInfo;
 
   @SuppressWarnings("unchecked")
-  public StackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
+  public StackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType serviceAdvisorType, int requestId,
       StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
     this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
         .getActualTypeArguments()[0];
@@ -119,7 +119,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
 
     this.recommendationsDir = recommendationsDir;
     this.recommendationsArtifactsLifetime = recommendationsArtifactsLifetime;
-    this.stackAdvisorScript = stackAdvisorScript;
+    this.serviceAdvisorType = serviceAdvisorType;
     this.requestId = requestId;
     this.saRunner = saRunner;
     this.metaInfo = metaInfo;
@@ -278,7 +278,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
     }
   }
 
-  public synchronized T invoke(StackAdvisorRequest request) throws StackAdvisorException {
+  public synchronized T invoke(StackAdvisorRequest request, ServiceInfo.ServiceAdvisorType serviceAdvisorType) throws StackAdvisorException {
     validate(request);
     String hostsJSON = getHostsInformation(request);
     String servicesJSON = getServicesInformation(request);
@@ -289,10 +289,9 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
       createRequestDirectory();
 
       FileUtils.writeStringToFile(new File(requestDirectory, "hosts.json"), adjusted.hostsJSON);
-      FileUtils.writeStringToFile(new File(requestDirectory, "services.json"),
-          adjusted.servicesJSON);
+      FileUtils.writeStringToFile(new File(requestDirectory, "services.json"), adjusted.servicesJSON);
 
-      saRunner.runScript(stackAdvisorScript, getCommandType(), requestDirectory);
+      saRunner.runScript(serviceAdvisorType, getCommandType(), requestDirectory);
       String result = FileUtils.readFileToString(new File(requestDirectory, getResultFileName()));
 
       T response = this.mapper.readValue(result, this.type);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
index e41d3b2..2b4398b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
@@ -205,6 +205,10 @@ public class ServiceModule extends BaseModule<ServiceModule, ServiceInfo> implem
     if (serviceInfo.getDisplayName() == null) {
       serviceInfo.setDisplayName(parent.getDisplayName());
     }
+    if (serviceInfo.getServiceAdvisorType() == null) {
+      ServiceInfo.ServiceAdvisorType serviceAdvisorType = parent.getServiceAdvisorType();
+      serviceInfo.setServiceAdvisorType(serviceAdvisorType == null ? ServiceInfo.ServiceAdvisorType.PYTHON : serviceAdvisorType);
+    }
     if (serviceInfo.getVersion() == null) {
       serviceInfo.setVersion(parent.getVersion());
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
index 97490e0..325434e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
@@ -36,6 +36,8 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -72,6 +74,20 @@ public class ServiceInfo implements Validable{
   private String serviceType;
   private Selection selection;
 
+  /**
+   * Default to Python if not specified.
+   */
+
+  @XmlEnum
+  public enum ServiceAdvisorType {
+    @XmlEnumValue("PYTHON")
+    PYTHON,
+    @XmlEnumValue("JAVA")
+    JAVA
+  }
+  @XmlElement(name="service_advisor_type")
+  private ServiceAdvisorType serviceAdvisorType = null;
+
   @XmlTransient
   private List<PropertyInfo> properties;
 
@@ -341,6 +357,14 @@ public class ServiceInfo implements Validable{
     this.displayName = displayName;
   }
 
+  public void setServiceAdvisorType(ServiceAdvisorType type) {
+    this.serviceAdvisorType = type;
+  }
+
+  public ServiceAdvisorType getServiceAdvisorType() {
+    return serviceAdvisorType;
+  }
+
   public String getServiceType() {
 	return serviceType;
   }
@@ -349,7 +373,7 @@ public class ServiceInfo implements Validable{
 	this.serviceType = serviceType;
   }
 
-public String getVersion() {
+  public String getVersion() {
     return version;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
index e331ddd..cedf3a2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
@@ -38,12 +38,15 @@ import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorC
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
 import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.state.ServiceInfo;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 /**
  * StackAdvisorHelper unit tests.
  */
 public class StackAdvisorHelperTest {
+
   @Test
   @SuppressWarnings("unchecked")
   public void testValidate_returnsCommandResult() throws StackAdvisorException, IOException {
@@ -51,19 +54,21 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
 
     StackAdvisorCommand<ValidationResponse> command = mock(StackAdvisorCommand.class);
     ValidationResponse expected = mock(ValidationResponse.class);
+
     StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .ofType(requestType).build();
 
-    when(command.invoke(request)).thenReturn(expected);
-    doReturn(command).when(helper).createValidationCommand(requestType);
-
+    when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenReturn(expected);
+    doReturn(command).when(helper).createValidationCommand("ZOOKEEPER", request);
     ValidationResponse response = helper.validate(request);
-
     assertEquals(expected, response);
   }
 
@@ -75,6 +80,9 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
 
     StackAdvisorCommand<ValidationResponse> command = mock(StackAdvisorCommand.class);
@@ -82,8 +90,8 @@ public class StackAdvisorHelperTest {
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .ofType(requestType).build();
 
-    when(command.invoke(request)).thenThrow(new StackAdvisorException("message"));
-    doReturn(command).when(helper).createValidationCommand(requestType);
+    when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenThrow(new StackAdvisorException("message"));
+    doReturn(command).when(helper).createValidationCommand("ZOOKEEPER", request);
     helper.validate(request);
 
     assertTrue(false);
@@ -96,6 +104,9 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
 
     StackAdvisorCommand<RecommendationResponse> command = mock(StackAdvisorCommand.class);
@@ -104,8 +115,8 @@ public class StackAdvisorHelperTest {
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .ofType(requestType).build();
 
-    when(command.invoke(request)).thenReturn(expected);
-    doReturn(command).when(helper).createRecommendationCommand(requestType);
+    when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenReturn(expected);
+    doReturn(command).when(helper).createRecommendationCommand("ZOOKEEPER", request);
     RecommendationResponse response = helper.recommend(request);
 
     assertEquals(expected, response);
@@ -119,6 +130,9 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
 
     StackAdvisorCommand<RecommendationResponse> command = mock(StackAdvisorCommand.class);
@@ -126,8 +140,8 @@ public class StackAdvisorHelperTest {
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .ofType(requestType).build();
 
-    when(command.invoke(request)).thenThrow(new StackAdvisorException("message"));
-    doReturn(command).when(helper).createRecommendationCommand(requestType);
+    when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenThrow(new StackAdvisorException("message"));
+    doReturn(command).when(helper).createRecommendationCommand("ZOOKEEPER", request);
     helper.recommend(request);
 
     assertTrue(false);
@@ -140,11 +154,16 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
     StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
+    StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+        .ofType(requestType).build();
 
     StackAdvisorCommand<RecommendationResponse> command = helper
-        .createRecommendationCommand(requestType);
+        .createRecommendationCommand("ZOOKEEPER", request);
 
     assertEquals(ComponentLayoutRecommendationCommand.class, command.getClass());
   }
@@ -156,10 +175,15 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
     StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
+    StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+        .ofType(requestType).build();
 
-    StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand(requestType);
+    StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand("ZOOKEEPER", request);
 
     assertEquals(ComponentLayoutValidationCommand.class, command.getClass());
   }
@@ -171,10 +195,15 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
     StackAdvisorRequestType requestType = StackAdvisorRequestType.CONFIGURATIONS;
+    StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+        .ofType(requestType).build();
 
-    StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand(requestType);
+    StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand("ZOOKEEPER", request);
 
     assertEquals(ConfigurationValidationCommand.class, command.getClass());
   }
@@ -186,12 +215,16 @@ public class StackAdvisorHelperTest {
     when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+    ServiceInfo service = mock(ServiceInfo.class);
+    when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+    when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
     StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
     StackAdvisorRequestType requestType = StackAdvisorRequestType.CONFIGURATION_DEPENDENCIES;
+    StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+        .ofType(requestType).build();
 
-    StackAdvisorCommand<RecommendationResponse> command = helper.createRecommendationCommand(requestType);
+    StackAdvisorCommand<RecommendationResponse> command = helper.createRecommendationCommand("ZOOKEEPER", request);
 
     assertEquals(ConfigurationDependenciesRecommendationCommand.class, command.getClass());
   }
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
index 8d104ea..7eb9fb4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
@@ -28,6 +28,7 @@ import java.io.File;
 import java.io.IOException;
 
 import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType;
+import org.apache.ambari.server.state.ServiceInfo;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -68,7 +69,7 @@ public class StackAdvisorRunnerTest {
         .toReturn(processBuilder);
     expect(processBuilder.start()).andThrow(new IOException());
     replay(processBuilder);
-    saRunner.runScript(script, saCommandType, actionDirectory);
+    saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
   }
 
   @Test(expected = StackAdvisorRequestException.class)
@@ -85,7 +86,7 @@ public class StackAdvisorRunnerTest {
     expect(processBuilder.start()).andReturn(process);
     expect(process.waitFor()).andReturn(1);
     replay(processBuilder, process);
-    saRunner.runScript(script, saCommandType, actionDirectory);
+    saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
   }
 
   @Test(expected = StackAdvisorException.class)
@@ -102,7 +103,7 @@ public class StackAdvisorRunnerTest {
     expect(processBuilder.start()).andReturn(process);
     expect(process.waitFor()).andReturn(2);
     replay(processBuilder, process);
-    saRunner.runScript(script, saCommandType, actionDirectory);
+    saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
   }
 
   @Test
@@ -120,10 +121,9 @@ public class StackAdvisorRunnerTest {
     expect(process.waitFor()).andReturn(0);
     replay(processBuilder, process);
     try {
-      saRunner.runScript(script, saCommandType, actionDirectory);
+      saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
     } catch (StackAdvisorException ex) {
       fail("Should not fail with StackAdvisorException");
     }
   }
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
index 17293eb..5e373c0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
 import org.junit.Test;
 
 public class ConfigurationRecommendationCommandTest {
@@ -43,7 +44,7 @@ public class ConfigurationRecommendationCommandTest {
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     File file = mock(File.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
-    ConfigurationRecommendationCommand command = new ConfigurationRecommendationCommand(file, "1w", "script", 1, saRunner, metaInfo);
+    ConfigurationRecommendationCommand command = new ConfigurationRecommendationCommand(file, "1w", ServiceInfo.ServiceAdvisorType.PYTHON, 1, saRunner, metaInfo);
 
     StackAdvisorRequest request = mock(StackAdvisorRequest.class);
     Map<String, Set<String>> componentHostGroupMap = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
index 46552a3..eaa4716 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequestExc
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorResponse;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
 import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommand.StackAdvisorData;
+import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.commons.io.FileUtils;
 import org.codehaus.jackson.JsonNode;
 import org.codehaus.jackson.annotate.JsonProperty;
@@ -78,19 +79,18 @@ public class StackAdvisorCommandTest {
   public void testInvoke_invalidRequest_throwsException() throws StackAdvisorException {
     File recommendationsDir = temp.newFolder("recommendationDir");
     String recommendationsArtifactsLifetime = "1w";
-    String stackAdvisorScript = "echo";
     int requestId = 0;
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
     doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
-    StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime, 
-        stackAdvisorScript, requestId, saRunner, metaInfo));
+    StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
+        ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
 
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .build();
 
     doThrow(new StackAdvisorException("message")).when(command).validate(request);
-    command.invoke(request);
+    command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
 
     assertTrue(false);
   }
@@ -98,14 +98,13 @@ public class StackAdvisorCommandTest {
   @Test(expected = StackAdvisorException.class)
   public void testInvoke_saRunnerNotSucceed_throwsException() throws StackAdvisorException {
     File recommendationsDir = temp.newFolder("recommendationDir");
-    String stackAdvisorScript = "echo";
     String recommendationsArtifactsLifetime = "1w";
     int requestId = 0;
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
     doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
     StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
-        stackAdvisorScript, requestId, saRunner, metaInfo));
+        ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
 
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .build();
@@ -117,24 +116,23 @@ public class StackAdvisorCommandTest {
     doReturn(servicesJSON).when(command).getServicesInformation(request);
     doReturn(data).when(command)
         .adjust(any(StackAdvisorData.class), any(StackAdvisorRequest.class));
-    doThrow(new StackAdvisorRequestException("error")).when(saRunner)
-        .runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
-    command.invoke(request);
 
+    doThrow(new StackAdvisorRequestException("error")).when(saRunner)
+        .runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+    command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
     assertTrue(false);
   }
 
   @Test(expected = WebApplicationException.class)
   public void testInvoke_adjustThrowsException_throwsException() throws StackAdvisorException {
     File recommendationsDir = temp.newFolder("recommendationDir");
-    String stackAdvisorScript = "echo";
     String recommendationsArtifactsLifetime = "1w";
     int requestId = 0;
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
     doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
     StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
-        stackAdvisorScript, requestId, saRunner, metaInfo));
+        ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
 
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .build();
@@ -143,9 +141,11 @@ public class StackAdvisorCommandTest {
     doReturn("{\"services\" : \"HDFS\"").when(command).getServicesInformation(request);
     doThrow(new WebApplicationException()).when(command).adjust(any(StackAdvisorData.class),
         any(StackAdvisorRequest.class));
+
     doThrow(new StackAdvisorException("error")).when(saRunner)
-        .runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
-    command.invoke(request);
+        .runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+    command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
+
 
     assertTrue(false);
   }
@@ -155,14 +155,13 @@ public class StackAdvisorCommandTest {
     String expected = "success";
     final String testResourceString = String.format("{\"type\": \"%s\"}", expected);
     final File recommendationsDir = temp.newFolder("recommendationDir");
-    String stackAdvisorScript = "echo";
     String recommendationsArtifactsLifetime = "1w";
     final int requestId = 2;
     StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
     doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
     final StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(
-        recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo));
+        recommendationsDir, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
 
     StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
         .build();
@@ -174,6 +173,7 @@ public class StackAdvisorCommandTest {
     doReturn(servicesJSON).when(command).getServicesInformation(request);
     doReturn(data).when(command)
         .adjust(any(StackAdvisorData.class), any(StackAdvisorRequest.class));
+
     doAnswer(new Answer() {
       public Object answer(InvocationOnMock invocation) throws Throwable {
         String resultFilePath = String.format("%s/%s", requestId, command.getResultFileName());
@@ -182,8 +182,9 @@ public class StackAdvisorCommandTest {
         FileUtils.writeStringToFile(resultFile, testResourceString);
         return null;
       }
-    }).when(saRunner).runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
-    TestResource result = command.invoke(request);
+    }).when(saRunner).runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+
+    TestResource result = command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
 
     assertEquals(expected, result.getType());
     assertEquals(requestId, result.getId());
@@ -195,7 +196,7 @@ public class StackAdvisorCommandTest {
     String recommendationsArtifactsLifetime = "1w";
     StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
-    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
         stackAdvisorRunner, ambariMetaInfo);
     ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
         "{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -223,7 +224,7 @@ public class StackAdvisorCommandTest {
     String recommendationsArtifactsLifetime = "1w";
     StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
-    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
       stackAdvisorRunner, ambariMetaInfo);
     ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
       "{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -245,7 +246,7 @@ public class StackAdvisorCommandTest {
     String recommendationsArtifactsLifetime = "1w";
     StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
     AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
-    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+    StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
         stackAdvisorRunner, ambariMetaInfo);
     ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
         "{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -265,9 +266,9 @@ public class StackAdvisorCommandTest {
   }
 
   class TestStackAdvisorCommand extends StackAdvisorCommand<TestResource> {
-    public TestStackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
-        int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
-      super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+    public TestStackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+                                   int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
+      super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
index 20d2168..784d884 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
@@ -439,6 +439,37 @@ public class ServiceModuleTest {
   }
 
   @Test
+  public void testResolveServiceAdvisor() throws Exception {
+    ServiceInfo info = new ServiceInfo();
+    ServiceInfo parentInfo = new ServiceInfo();
+    ServiceModule child = createServiceModule(info);
+    ServiceModule parent = createServiceModule(parentInfo);
+
+    // Parent is NULL, Child is NULL => Child defaults to PYTHON
+    parent.getModuleInfo().setServiceAdvisorType(null);
+    child.getModuleInfo().setServiceAdvisorType(null);
+    resolveService(child, parent);
+    assertEquals(ServiceInfo.ServiceAdvisorType.PYTHON, child.getModuleInfo().getServiceAdvisorType());
+
+    // Parent is NULL, Child is JAVA => Child is JAVA
+    child.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.JAVA);
+    resolveService(child, parent);
+    assertEquals(ServiceInfo.ServiceAdvisorType.JAVA, child.getModuleInfo().getServiceAdvisorType());
+
+    // Parent is JAVA, Child is NULL => Child inherits JAVA
+    parent.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.JAVA);
+    child.getModuleInfo().setServiceAdvisorType(null);
+    resolveService(child, parent);
+    assertEquals(ServiceInfo.ServiceAdvisorType.JAVA, child.getModuleInfo().getServiceAdvisorType());
+
+    // Parent is JAVA, Child is PYTHON => Child overrides and keeps PYTHON
+    parent.getModuleInfo().setServiceAdvisorType(null);
+    child.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.PYTHON);
+    resolveService(child, parent);
+    assertEquals(ServiceInfo.ServiceAdvisorType.PYTHON, child.getModuleInfo().getServiceAdvisorType());
+  }
+
+  @Test
   public void testResolve_UpgradeCheckDirectory() throws Exception {
     File checks = new File("checks");
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-views/examples/weather-view/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-views/examples/weather-view/pom.xml b/ambari-views/examples/weather-view/pom.xml
index abed017..d339fbb 100644
--- a/ambari-views/examples/weather-view/pom.xml
+++ b/ambari-views/examples/weather-view/pom.xml
@@ -81,7 +81,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.6</version>
+      <version>1.7.20</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hawq/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hawq/pom.xml b/contrib/views/hawq/pom.xml
index 0c6591e..5a6e525 100644
--- a/contrib/views/hawq/pom.xml
+++ b/contrib/views/hawq/pom.xml
@@ -68,7 +68,7 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
+            <version>1.7.20</version>
         </dependency>
         <dependency>
             <groupId>c3p0</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hive-next/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/pom.xml b/contrib/views/hive-next/pom.xml
index 578a82c..9a6c65d 100644
--- a/contrib/views/hive-next/pom.xml
+++ b/contrib/views/hive-next/pom.xml
@@ -92,12 +92,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
       <scope>test</scope>
     </dependency>
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hive20/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/pom.xml b/contrib/views/hive20/pom.xml
index 7ea95ad..0da3c88 100644
--- a/contrib/views/hive20/pom.xml
+++ b/contrib/views/hive20/pom.xml
@@ -93,12 +93,12 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
       <scope>test</scope>
     </dependency>
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/pig/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pig/pom.xml b/contrib/views/pig/pom.xml
index 5239cc2..1430f69 100644
--- a/contrib/views/pig/pom.xml
+++ b/contrib/views/pig/pom.xml
@@ -80,7 +80,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
     </dependency>
     <dependency>
       <groupId>org.apache.hadoop</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/tez/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/tez/pom.xml b/contrib/views/tez/pom.xml
index 170b89a..fa1a773 100644
--- a/contrib/views/tez/pom.xml
+++ b/contrib/views/tez/pom.xml
@@ -236,11 +236,10 @@
       <groupId>com.google.inject</groupId>
       <artifactId>guice</artifactId>
     </dependency>
-
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.5</version>
+      <version>1.7.20</version>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/wfmanager/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/pom.xml b/contrib/views/wfmanager/pom.xml
index a38cae5..1363a93 100644
--- a/contrib/views/wfmanager/pom.xml
+++ b/contrib/views/wfmanager/pom.xml
@@ -74,6 +74,7 @@
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
+			<version>1.7.20</version>
 		</dependency>
 		<dependency>
 			<groupId>javax.inject</groupId>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8faec29..4e27ca6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -264,7 +264,9 @@
             <exclude>pass.txt</exclude>
             <exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_groups.conf</exclude>
             <exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/windows/metric_groups.conf</exclude>
-            <exclude>contrib/addons/test/dataServices/jmx/data/cluster_configuration.json.nohbase</exclude>
+            <exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_groups.conf</exclude>
+            <exclude>stack-advisor/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst</exclude>
+            <exclude>stack-advisor/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst</exclude>
             <exclude>contrib/ambari-scom/msi/src/GUI_Ambari.sln</exclude>
             <exclude>contrib/fast-hdfs-resource/dependency-reduced-pom.xml</exclude>
             <exclude>contrib/agent-simulator/docker_image/package_list.txt</exclude>
@@ -457,6 +459,7 @@
         </property>
       </activation>
       <modules>
+        <module>serviceadvisor</module>
         <module>ambari-web</module>
         <module>ambari-project</module>
         <module>ambari-views</module>
@@ -480,6 +483,7 @@
         </property>
       </activation>
       <modules>
+        <module>serviceadvisor</module>
         <module>ambari-web</module>
         <module>ambari-project</module>
         <module>ambari-views</module>
@@ -507,6 +511,7 @@
         <module>ambari-shell</module>
         <module>ambari-logsearch</module>
         <module>ambari-infra</module>
+        <module>serviceadvisor</module>
       </modules>
     </profile>
     <profile>
@@ -529,6 +534,7 @@
         <module>ambari-shell</module>
         <module>ambari-logsearch</module>
         <module>ambari-infra</module>
+        <module>serviceadvisor</module>
         </modules>
     </profile>
     <profile>
@@ -538,6 +544,12 @@
       </modules>
     </profile>
     <profile>
+      <id>serviceadvisor</id>
+      <modules>
+        <module>serviceadvisor</module>
+      </modules>
+    </profile>
+    <profile>
       <id>windows</id>
       <activation>
         <os>
@@ -545,6 +557,7 @@
         </os>
       </activation>
       <modules>
+        <module>serviceadvisor</module>
         <module>ambari-web</module>
         <module>ambari-project</module>
         <module>ambari-views</module>
@@ -555,7 +568,7 @@
         <module>ambari-agent</module>
         <module>ambari-client</module>
         <module>ambari-shell</module>
-        </modules>
+      </modules>
     </profile>
     <profile>
       <id>clover</id>


[16/26] ambari git commit: AMBARI-21224. RU: Oozie LR job failed (aonishuk)

Posted by rl...@apache.org.
AMBARI-21224. RU: Oozie LR job failed (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 27a99389e3c3566b6fc58b17cb06510ab9bffa13
Parents: 1f19461
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Jun 13 14:44:05 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Jun 13 14:44:05 2017 +0300

----------------------------------------------------------------------
 .../HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/27a99389/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
index bbfdc24..f03125b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
@@ -19,7 +19,7 @@
 <configuration supports_final="true">
     <property>
         <name>yarn.app.mapreduce.client.job.max-retries</name>
-        <value>30</value>
+        <value>60</value>
         <description>
             The number of retries the client will make for getJob and dependent calls.
         </description>


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

Posted by rl...@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/branch-feature-AMBARI-20859
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>


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

Posted by rl...@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/branch-feature-AMBARI-20859
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),