You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2017/09/26 05:19:52 UTC

[01/50] [abbrv] ambari git commit: AMBARI-22003. Ambari schema upgrade failure as views destination path dir already exists (aonishuk)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-14714 986b3b1fc -> 530df165d


AMBARI-22003. Ambari schema upgrade failure as views destination path dir already exists (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: c8832728ad0ebb545bd8795de23d0b859af23d1a
Parents: a90f3b3
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Wed Sep 20 11:19:09 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Wed Sep 20 11:19:09 2017 +0300

----------------------------------------------------------------------
 ambari-server/src/main/python/ambari_server/serverUpgrade.py | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c8832728/ambari-server/src/main/python/ambari_server/serverUpgrade.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverUpgrade.py b/ambari-server/src/main/python/ambari_server/serverUpgrade.py
index 8712da5..b0e0128 100644
--- a/ambari-server/src/main/python/ambari_server/serverUpgrade.py
+++ b/ambari-server/src/main/python/ambari_server/serverUpgrade.py
@@ -267,6 +267,10 @@ def upgrade(args):
   # Move files installed by package to default views directory to a custom one
   for views_dir in get_views_dir(properties):
     root_views_dir = views_dir + "/../"
+
+    if os.path.samefile(root_views_dir, get_default_views_dir()):
+      continue
+
     for file in glob.glob(get_default_views_dir()+'/*'):
       shutil.move(file, root_views_dir)
 


[50/50] [abbrv] ambari git commit: Merge remote-tracking branch 'origin/trunk' into branch-feature-AMBARI-14714

Posted by jl...@apache.org.
Merge remote-tracking branch 'origin/trunk' into branch-feature-AMBARI-14714


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 530df165da444c3259f72d7e62339ba7654f5fe3
Parents: 986b3b1 84fed85
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Mon Sep 25 22:19:28 2017 -0700
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Mon Sep 25 22:19:28 2017 -0700

----------------------------------------------------------------------
 .../stackVersions/StackVersionsCreateCtrl.js    |   6 +
 .../src/main/python/ambari_agent/HostInfo.py    |  29 +-
 .../test/python/ambari_agent/TestHostInfo.py    |  21 +-
 .../libraries/functions/copy_tarball.py         | 103 ++-
 .../libraries/functions/curl_krb_request.py     |   2 +-
 .../libraries/functions/repository_util.py      |   9 +-
 .../libraries/functions/stack_select.py         |  65 +-
 .../libraries/functions/stack_tools.py          |  12 +-
 .../libraries/functions/upgrade_summary.py      |  16 +
 .../libraries/functions/version_select_util.py  |  64 +-
 .../libraries/script/script.py                  |  39 +-
 .../HDP/2.0.8/services/HDFS/kerberos.json       |  12 +-
 ambari-infra/ambari-infra-manager/.gitignore    |   2 +
 .../ambari-infra-manager/docker/bin/start.sh    |   2 +-
 ambari-infra/ambari-infra-manager/pom.xml       | 172 +++--
 .../org/apache/ambari/infra/InfraManager.java   | 208 +-----
 .../infra/common/InfraManagerConstants.java     |  31 -
 .../infra/conf/InfraManagerDataConfig.java      |  37 +
 .../conf/InfraManagerJerseyResourceConfig.java  |  37 +
 .../infra/conf/InfraManagerServletConfig.java   |  83 +++
 .../infra/conf/StaticResourceConfiguration.java |  49 ++
 .../infra/doc/InfraManagerApiDocStorage.java    |  90 +++
 .../ambari/infra/job/dummy/DummyItemWriter.java |  15 +-
 .../ambari/infra/rest/ApiDocResource.java       |  56 ++
 .../src/main/resources/infra-manager.properties |   4 +-
 .../src/main/resources/log4j.xml                |  31 -
 .../src/main/resources/log4j2.xml               |  41 ++
 .../src/main/resources/static/index.html        |  24 +
 .../src/main/resources/swagger/swagger.html     |  36 +-
 .../src/main/resources/webapp/index.html        |  24 -
 ambari-infra/ambari-infra-solr-client/build.xml |   1 +
 ambari-infra/ambari-infra-solr-client/pom.xml   |   5 +
 .../ambari/infra/solr/AmbariSolrCloudCLI.java   |  12 +-
 .../apache/ambari/infra/solr/S3Uploader.java    |  64 ++
 .../src/main/python/solrDataManager.py          | 715 +++++++++++++++++++
 .../src/main/resources/log4j.properties         |   6 +-
 .../src/main/resources/solrCloudCli.sh          |   8 +-
 .../src/main/resources/solrIndexHelper.sh       |  14 +-
 .../src/main/resources/grok-patterns            |   2 +-
 .../ambari/logsearch/conf/SecurityConfig.java   |   9 -
 .../ambari-logsearch-web/.angular-cli.json      |  34 +-
 ambari-logsearch/ambari-logsearch-web/README.md |  10 +-
 .../ambari-logsearch-web/package.json           |  34 +-
 ambari-logsearch/ambari-logsearch-web/pom.xml   |   4 +-
 .../ambari-logsearch-web/src/app/app.module.ts  |  14 +-
 .../src/app/classes/list-item.class.ts          |  25 +
 .../queries/audit-logs-query-params.class.ts    |   4 -
 ...service-logs-histogram-query-params.class.ts |   1 -
 .../queries/service-logs-query-params.class.ts  |   1 -
 .../date-picker/date-picker.component.html      |  25 +
 .../date-picker/date-picker.component.spec.ts   |  51 ++
 .../date-picker/date-picker.component.ts        |  73 ++
 .../dropdown-button.component.html              |   9 +-
 .../dropdown-button.component.less              |   4 +
 .../dropdown-button.component.spec.ts           |  29 +-
 .../dropdown-button.component.ts                |  14 +-
 .../dropdown-list/dropdown-list.component.html  |   5 +-
 .../dropdown-list/dropdown-list.component.ts    |   7 +-
 .../filter-button.component.spec.ts             |  29 +-
 .../filter-button/filter-button.component.ts    |   3 +-
 .../filter-dropdown.component.spec.ts           |  26 +-
 .../filters-panel/filters-panel.component.html  |  24 +-
 .../filters-panel/filters-panel.component.less  |  10 +
 .../filters-panel.component.spec.ts             |   6 +-
 .../filters-panel/filters-panel.component.ts    |  27 +-
 .../logs-container.component.html               |   5 +
 .../logs-container.component.less               |   4 +
 .../logs-container.component.spec.ts            |   4 +-
 .../logs-container/logs-container.component.ts  |  10 +
 .../logs-list/logs-list.component.html          |  57 +-
 .../logs-list/logs-list.component.less          |   5 +-
 .../components/logs-list/logs-list.component.ts |  72 +-
 .../menu-button/menu-button.component.html      |   2 +-
 .../menu-button/menu-button.component.spec.ts   |  53 +-
 .../menu-button/menu-button.component.ts        |   5 +-
 .../app/components/modal/modal.component.html   |   2 +-
 .../src/app/components/modal/modal.component.ts |   2 +-
 .../search-box/search-box.component.html        |   5 +-
 .../search-box/search-box.component.less        |   4 +
 .../search-box/search-box.component.ts          |  64 +-
 .../time-range-picker.component.html            |  41 ++
 .../time-range-picker.component.less            |  35 +
 .../time-range-picker.component.spec.ts         |  73 ++
 .../time-range-picker.component.ts              | 103 +++
 .../timezone-picker.component.spec.ts           |  37 +-
 .../components/top-menu/top-menu.component.html |   2 +-
 .../top-menu/top-menu.component.spec.ts         |   2 +
 .../src/app/components/variables.less           |   6 +-
 .../ambari-logsearch-web/src/app/mock-data.ts   |   2 +-
 .../src/app/pipes/timer-seconds.pipe.spec.ts    |  37 +
 .../src/app/pipes/timer-seconds.pipe.ts         |  41 ++
 .../services/component-actions.service.spec.ts  |  46 +-
 .../app/services/component-actions.service.ts   |  21 +-
 .../src/app/services/filtering.service.ts       | 358 +++++++---
 .../src/app/services/logs-container.service.ts  |  11 +-
 .../src/app/services/mock-api-data.service.ts   |   6 +-
 .../src/app/services/utils.service.ts           |  13 +
 .../src/assets/i18n/en.json                     |  49 +-
 .../ambari-logsearch-web/src/polyfills.ts       |   2 +-
 .../vendor/css/bootstrap-datetimepicker.min.css |   5 +
 .../vendor/js/bootstrap-datetimepicker.min.js   |   2 +
 .../ambari-logsearch-web/webpack.config.js      | 539 ++++++++++++++
 .../docker/test-config/solr/solr-env-ssl.sh     |   1 +
 .../docker/test-config/solr/solr-env.sh         |   1 +
 .../timeline/TimelineMetricConfiguration.java   |  13 +
 .../metrics/timeline/TimelineMetricsFilter.java |  24 +-
 .../timeline/TimelineMetricsFilterTest.java     |   3 +
 ambari-metrics/pom.xml                          |  27 +
 ambari-server/pom.xml                           |   8 +-
 .../server/actionmanager/ActionScheduler.java   |  10 +-
 .../actionmanager/ExecutionCommandWrapper.java  | 122 ++--
 .../ambari/server/agent/CommandRepository.java  |  51 +-
 .../ambari/server/checks/CheckDescription.java  |  12 +
 .../checks/DatabaseConsistencyCheckHelper.java  | 128 +++-
 .../checks/DruidHighAvailabilityCheck.java      | 121 ++++
 .../checks/ServiceCheckValidityCheck.java       |  84 +--
 .../AmbariCustomCommandExecutionHelper.java     |  17 +-
 .../AmbariManagementControllerImpl.java         |  16 +-
 .../server/controller/ControllerModule.java     |   2 +
 .../server/controller/RepositoryResponse.java   |  23 +-
 .../controller/ResourceProviderFactory.java     |   6 +-
 .../AbstractControllerResourceProvider.java     |   2 +-
 .../BlueprintConfigurationProcessor.java        |  16 +-
 .../internal/ClientConfigResourceProvider.java  |   2 +
 .../ClusterStackVersionResourceProvider.java    |  13 +-
 .../internal/ComponentResourceProvider.java     |   5 +
 .../internal/DefaultProviderModule.java         |   2 -
 .../internal/RepositoryResourceProvider.java    |   6 +
 .../RepositoryVersionResourceProvider.java      |   6 +-
 .../VersionDefinitionResourceProvider.java      |   4 +
 .../events/ClusterConfigFinishedEvent.java      |  15 +-
 .../DistributeRepositoriesActionListener.java   |   8 +
 .../listeners/upgrade/StackVersionListener.java |  10 +-
 .../CachedRoleCommandOrderProvider.java         |   2 +
 .../ambari/server/orm/DBAccessorImpl.java       |   6 +-
 .../server/orm/dao/AlertDefinitionDAO.java      |  13 +
 .../ambari/server/orm/dao/ClusterDAO.java       |  22 +-
 .../server/orm/dao/HostRoleCommandDAO.java      |  47 ++
 .../orm/entities/AlertDefinitionEntity.java     |   4 +-
 .../orm/entities/ClusterConfigEntity.java       |   3 +
 .../orm/entities/HostRoleCommandEntity.java     |  64 +-
 .../server/orm/entities/RepositoryEntity.java   |  22 +
 .../orm/entities/RepositoryVersionEntity.java   |  37 +
 .../server/orm/entities/UpgradeItemEntity.java  |   2 +-
 .../scheduler/ExecutionScheduleManager.java     |  23 +-
 .../RangerUsersyncConfigCalculation.java        |  96 +++
 .../apache/ambari/server/stack/RepoUtil.java    |   4 +-
 .../ambari/server/stack/StackContext.java       | 109 ++-
 .../apache/ambari/server/stack/StackModule.java |  48 +-
 .../server/stack/StackServiceDirectory.java     |   7 +-
 .../ambari/server/state/RepositoryInfo.java     |  27 +-
 .../server/state/ServiceComponentImpl.java      |  25 +
 .../ambari/server/state/ServiceOsSpecific.java  |  16 +
 .../apache/ambari/server/state/StackInfo.java   |   1 -
 .../ambari/server/state/UpgradeHelper.java      | 109 ++-
 .../kerberos/AbstractKerberosDescriptor.java    |   4 +-
 .../AbstractKerberosDescriptorContainer.java    |  25 +-
 .../kerberos/KerberosComponentDescriptor.java   |   2 +-
 .../state/kerberos/KerberosDescriptor.java      |  13 +-
 .../kerberos/KerberosIdentityDescriptor.java    |  78 +-
 .../kerberos/KerberosKeytabDescriptor.java      |  42 +-
 .../kerberos/KerberosPrincipalDescriptor.java   |  25 +-
 .../kerberos/KerberosServiceDescriptor.java     |  12 +-
 .../services/AmbariServerAlertService.java      |  21 +-
 .../server/state/stack/RepoUrlInfoCallable.java | 217 ++++++
 .../server/state/stack/RepoVdfCallable.java     | 161 +++++
 .../server/state/stack/RepositoryXml.java       |  11 +
 .../stack/upgrade/RepositoryVersionHelper.java  |  11 +
 .../ambari/server/topology/AmbariContext.java   |   2 +-
 .../ambari/server/topology/TopologyManager.java |  96 ++-
 .../topology/tasks/ConfigureClusterTask.java    |  13 +-
 .../tasks/ConfigureClusterTaskFactory.java      |   3 +-
 .../server/upgrade/UpgradeCatalog260.java       | 304 +++++++-
 .../server/utils/ManagedThreadPoolExecutor.java |  83 +++
 .../main/python/ambari_server/serverUpgrade.py  |   4 +
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  |   3 +-
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |   3 +-
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |   3 +-
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |   3 +-
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql |   3 +-
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |   3 +-
 .../ACCUMULO/1.6.1.2.2.0/kerberos.json          |   6 +-
 .../0.1.0/configuration/infra-solr-env.xml      |  16 +-
 .../AMBARI_INFRA/0.1.0/kerberos.json            |   6 +-
 .../0.1.0/package/scripts/params.py             |   4 +
 .../0.1.0/properties/infra-solr-env.sh.j2       |   3 +-
 .../properties/solr-client-log4j.properties.j2  |   4 +
 .../0.1.0/configuration/ams-env.xml             |   4 +
 .../0.1.0/configuration/ams-hbase-env.xml       |  16 +
 .../0.1.0/configuration/ams-hbase-site.xml      |  24 +-
 .../0.1.0/configuration/ams-site.xml            |  68 +-
 .../0.1.0/configuration/ams-ssl-client.xml      |   9 -
 .../AMBARI_METRICS/0.1.0/kerberos.json          |   6 +-
 .../AMBARI_METRICS/0.1.0/metainfo.xml           |   7 +
 .../AMBARI_METRICS/0.1.0/package/scripts/ams.py |   9 +-
 .../0.1.0/package/scripts/params.py             |  10 +-
 .../AMBARI_METRICS/0.1.0/themes/theme.json      | 288 ++++++++
 .../ATLAS/0.1.0.2.3/kerberos.json               |   6 +-
 .../ATLAS/0.1.0.2.3/package/scripts/params.py   |   2 +-
 .../ATLAS/0.7.0.2.5/kerberos.json               |   9 +-
 .../ATLAS/0.7.0.3.0/configuration/atlas-env.xml |   6 +
 .../ATLAS/0.7.0.3.0/kerberos.json               |   9 +-
 .../ATLAS/0.7.0.3.0/package/scripts/params.py   |   2 +-
 .../FALCON/0.5.0.2.1/kerberos.json              |  12 +-
 .../common-services/HAWQ/2.0.0/kerberos.json    |   9 +-
 .../HBASE/0.96.0.2.0/kerberos.json              |   9 +-
 .../HBASE/2.0.0.3.0/kerberos.json               |  15 +-
 .../HDFS/2.1.0.2.0/kerberos.json                |  18 +-
 .../2.1.0.2.0/package/scripts/hdfs_datanode.py  |   2 +-
 .../2.1.0.2.0/package/scripts/params_linux.py   |   2 +
 .../HDFS/3.0.0.3.0/kerberos.json                |  21 +-
 .../HIVE/0.12.0.2.0/kerberos.json               |  15 +-
 .../0.12.0.2.0/package/scripts/hive_service.py  |   4 +
 .../0.12.0.2.0/package/scripts/params_linux.py  |   3 +
 .../HIVE/2.1.0.3.0/kerberos.json                |  30 +-
 .../KAFKA/0.10.0.3.0/kerberos.json              |   9 +-
 .../common-services/KAFKA/0.10.0/kerberos.json  |   9 +-
 .../common-services/KAFKA/0.9.0/kerberos.json   |   6 +-
 .../KERBEROS/1.10.3-10/kerberos.json            |   3 +-
 .../KERBEROS/1.10.3-30/kerberos.json            |   3 +-
 .../KNOX/0.5.0.3.0/kerberos.json                |   3 +-
 .../LOGSEARCH/0.5.0/kerberos.json               |   6 +-
 .../logfeeder-default_grok_patterns.j2          |   2 +-
 .../LOGSEARCH/0.5.0/service_advisor.py          |   2 +-
 .../MAHOUT/1.0.0.2.3/kerberos.json              |   6 +-
 .../OOZIE/4.0.0.2.0/kerberos.json               |  12 +-
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |   2 +-
 .../4.0.0.2.0/package/scripts/params_linux.py   |  20 +-
 .../OOZIE/4.2.0.2.3/kerberos.json               |  12 +-
 .../OOZIE/4.2.0.3.0/kerberos.json               |  12 +-
 .../PIG/0.12.0.2.0/kerberos.json                |   3 +-
 .../PIG/0.16.1.3.0/kerberos.json                |   3 +-
 .../common-services/RANGER/0.6.0/kerberos.json  |  18 +-
 .../RANGER/0.7.0/configuration/ranger-env.xml   |  23 +
 .../0.7.0/configuration/ranger-ugsync-site.xml  |   7 +
 .../RANGER/0.7.0/themes/theme_version_5.json    |  40 ++
 .../1.0.0.3.0/configuration/ranger-env.xml      |  23 +
 .../configuration/ranger-ugsync-site.xml        |   7 +
 .../RANGER/1.0.0.3.0/kerberos.json              |  18 +-
 .../1.0.0.3.0/themes/theme_version_1.json       |  40 ++
 .../RANGER_KMS/0.5.0.2.3/kerberos.json          |   6 +-
 .../RANGER_KMS/1.0.0.3.0/kerberos.json          |   9 +-
 .../SLIDER/0.60.0.2.2/kerberos.json             |   3 +-
 .../SLIDER/0.91.0.3.0/kerberos.json             |   3 +-
 .../common-services/SPARK/1.2.1/kerberos.json   |   6 +-
 .../common-services/SPARK/1.4.1/kerberos.json   |  12 +-
 .../common-services/SPARK/2.2.0/kerberos.json   |   3 +-
 .../common-services/SPARK2/2.0.0/kerberos.json  |  12 +-
 .../common-services/STORM/0.9.1/kerberos.json   |   9 +-
 .../STORM/1.0.1.3.0/kerberos.json               |  15 +-
 .../common-services/STORM/1.0.1/kerberos.json   |  15 +-
 .../common-services/STORM/1.1.0/kerberos.json   |  15 +-
 .../common-services/TEZ/0.4.0.2.1/kerberos.json |   3 +-
 .../common-services/TEZ/0.9.0.3.0/kerberos.json |   3 +-
 .../YARN/2.1.0.2.0/kerberos.json                |  30 +-
 .../YARN/3.0.0.3.0/configuration/yarn-env.xml   |   3 -
 .../YARN/3.0.0.3.0/kerberos.json                |  36 +-
 .../ZEPPELIN/0.6.0.2.5/alerts.json              |  18 -
 .../0.6.0.2.5/configuration/zeppelin-config.xml | 208 ------
 .../0.6.0.2.5/configuration/zeppelin-env.xml    | 185 -----
 .../configuration/zeppelin-log4j-properties.xml |  37 -
 .../configuration/zeppelin-shiro-ini.xml        |  97 ---
 .../ZEPPELIN/0.6.0.2.5/kerberos.json            |  51 --
 .../ZEPPELIN/0.6.0.2.5/metainfo.xml             | 103 ---
 .../package/scripts/alert_check_zeppelin.py     |  47 --
 .../scripts/interpreter_json_template.py        | 361 ----------
 .../package/scripts/livy2_config_template.py    | 107 ---
 .../0.6.0.2.5/package/scripts/master.py         | 522 --------------
 .../0.6.0.2.5/package/scripts/params.py         | 258 -------
 .../0.6.0.2.5/package/scripts/service_check.py  |  39 -
 .../package/scripts/spark2_config_template.py   |  84 ---
 .../0.6.0.2.5/package/scripts/status_params.py  |  29 -
 .../templates/input.config-zeppelin.json.j2     |  48 --
 .../0.6.0.2.5/quicklinks/quicklinks.json        |  35 -
 .../ZEPPELIN/0.6.0.2.5/role_command_order.json  |   7 -
 .../ZEPPELIN/0.6.0.3.0/alerts.json              |  18 -
 .../0.6.0.3.0/configuration/zeppelin-config.xml | 208 ------
 .../0.6.0.3.0/configuration/zeppelin-env.xml    | 186 -----
 .../configuration/zeppelin-log4j-properties.xml |  37 -
 .../configuration/zeppelin-shiro-ini.xml        |  97 ---
 .../ZEPPELIN/0.6.0.3.0/kerberos.json            |  51 --
 .../ZEPPELIN/0.6.0.3.0/metainfo.xml             | 111 ---
 .../package/scripts/alert_check_zeppelin.py     |  47 --
 .../package/scripts/livy2_config_template.py    | 107 ---
 .../0.6.0.3.0/package/scripts/master.py         | 443 ------------
 .../0.6.0.3.0/package/scripts/params.py         | 228 ------
 .../0.6.0.3.0/package/scripts/service_check.py  |  39 -
 .../package/scripts/spark2_config_template.py   |  84 ---
 .../0.6.0.3.0/package/scripts/status_params.py  |  29 -
 .../templates/input.config-zeppelin.json.j2     |  48 --
 .../0.6.0.3.0/quicklinks/quicklinks.json        |  35 -
 .../ZEPPELIN/0.6.0.3.0/role_command_order.json  |   7 -
 .../ZEPPELIN/0.6.0.3.0/service_advisor.py       | 209 ------
 .../common-services/ZEPPELIN/0.6.0/alerts.json  |  18 +
 .../0.6.0/configuration/zeppelin-config.xml     | 208 ++++++
 .../0.6.0/configuration/zeppelin-env.xml        | 184 +++++
 .../configuration/zeppelin-log4j-properties.xml |  37 +
 .../0.6.0/configuration/zeppelin-shiro-ini.xml  |  97 +++
 .../ZEPPELIN/0.6.0/kerberos.json                |  52 ++
 .../common-services/ZEPPELIN/0.6.0/metainfo.xml | 103 +++
 .../package/scripts/alert_check_zeppelin.py     |  47 ++
 .../scripts/interpreter_json_template.py        | 361 ++++++++++
 .../package/scripts/livy2_config_template.py    | 107 +++
 .../ZEPPELIN/0.6.0/package/scripts/master.py    | 522 ++++++++++++++
 .../ZEPPELIN/0.6.0/package/scripts/params.py    | 258 +++++++
 .../0.6.0/package/scripts/service_check.py      |  39 +
 .../package/scripts/spark2_config_template.py   |  84 +++
 .../0.6.0/package/scripts/status_params.py      |  29 +
 .../templates/input.config-zeppelin.json.j2     |  48 ++
 .../ZEPPELIN/0.6.0/quicklinks/quicklinks.json   |  35 +
 .../ZEPPELIN/0.6.0/role_command_order.json      |   7 +
 .../common-services/ZEPPELIN/0.7.0/alerts.json  |  18 +
 .../0.7.0/configuration/zeppelin-config.xml     | 214 ++++++
 .../0.7.0/configuration/zeppelin-env.xml        | 184 +++++
 .../configuration/zeppelin-log4j-properties.xml |  37 +
 .../0.7.0/configuration/zeppelin-shiro-ini.xml  |  97 +++
 .../ZEPPELIN/0.7.0/kerberos.json                |  52 ++
 .../common-services/ZEPPELIN/0.7.0/metainfo.xml | 103 +++
 .../package/scripts/alert_check_zeppelin.py     |  47 ++
 .../scripts/interpreter_json_template.py        | 366 ++++++++++
 .../package/scripts/livy2_config_template.py    | 112 +++
 .../ZEPPELIN/0.7.0/package/scripts/master.py    | 563 +++++++++++++++
 .../ZEPPELIN/0.7.0/package/scripts/params.py    | 258 +++++++
 .../0.7.0/package/scripts/service_check.py      |  39 +
 .../package/scripts/spark2_config_template.py   |  84 +++
 .../0.7.0/package/scripts/status_params.py      |  29 +
 .../templates/input.config-zeppelin.json.j2     |  48 ++
 .../ZEPPELIN/0.7.0/quicklinks/quicklinks.json   |  35 +
 .../ZEPPELIN/0.7.0/role_command_order.json      |   7 +
 .../ZEPPELIN/0.7.0/service_advisor.py           | 209 ++++++
 .../ZOOKEEPER/3.4.5/kerberos.json               |   3 +-
 .../custom_actions/scripts/update_repo.py       |   7 +-
 .../resources/kerberos_descriptor_schema.json   | 194 +++++
 .../src/main/resources/scripts/configs.py       | 219 ++++--
 .../src/main/resources/scripts/configs.sh       | 272 +------
 .../HDP/2.0.6/configuration/cluster-env.xml     |   6 +
 .../scripts/shared_initialization.py            |  19 +-
 .../before-ANY/scripts/shared_initialization.py |  29 +-
 .../scripts/repo_initialization.py              |   3 +-
 .../HDP/2.0.6/properties/stack_packages.json    |  68 +-
 .../stacks/HDP/2.0.6/services/stack_advisor.py  |  83 +--
 .../stacks/HDP/2.1/services/stack_advisor.py    |   4 +
 .../stacks/HDP/2.2/services/YARN/kerberos.json  |  30 +-
 .../HDP/2.3.ECS/services/ECS/kerberos.json      |   3 +-
 .../HDP/2.3.ECS/services/HBASE/kerberos.json    |   9 +-
 .../HDP/2.3.ECS/services/YARN/kerberos.json     |  33 +-
 .../services/ACCUMULO/kerberos.json             |  27 +-
 .../HDP/2.3/services/ACCUMULO/kerberos.json     |   6 +-
 .../stacks/HDP/2.3/services/TEZ/kerberos.json   |   3 +-
 .../stacks/HDP/2.3/services/YARN/kerberos.json  |  30 +-
 .../HDP/2.5/services/FALCON/kerberos.json       |  15 +-
 .../stacks/HDP/2.5/services/HBASE/kerberos.json |  15 +-
 .../stacks/HDP/2.5/services/HDFS/kerberos.json  |  21 +-
 .../HIVE/configuration/tez-interactive-site.xml |  11 +
 .../stacks/HDP/2.5/services/HIVE/kerberos.json  |  30 +-
 .../stacks/HDP/2.5/services/KNOX/kerberos.json  |   3 +-
 .../HDP/2.5/services/RANGER_KMS/kerberos.json   |   9 +-
 .../stacks/HDP/2.5/services/SPARK/kerberos.json |  18 +-
 .../stacks/HDP/2.5/services/YARN/kerberos.json  |  36 +-
 .../HDP/2.5/services/ZEPPELIN/kerberos.json     |   3 +-
 .../HDP/2.5/services/ZEPPELIN/metainfo.xml      |   4 +-
 .../stacks/HDP/2.5/upgrades/config-upgrade.xml  |  24 +
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml |  12 +
 .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml |  16 +
 .../stacks/HDP/2.5/upgrades/upgrade-2.5.xml     |  11 +-
 .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml     |  10 +-
 .../stacks/HDP/2.6/kerberos_preconfigure.json   |   2 -
 .../services/ATLAS/configuration/atlas-env.xml  |   6 +
 .../stacks/HDP/2.6/services/ATLAS/kerberos.json |   9 +-
 .../stacks/HDP/2.6/services/DRUID/kerberos.json |  24 +-
 .../stacks/HDP/2.6/services/HDFS/kerberos.json  |  21 +-
 .../configuration/hive-interactive-site.xml     |  14 +
 .../stacks/HDP/2.6/services/OOZIE/kerberos.json |  12 +-
 .../stacks/HDP/2.6/services/SPARK/kerberos.json |   3 +-
 .../HDP/2.6/services/SPARK2/kerberos.json       |   3 +-
 .../HDP/2.6/services/SUPERSET/kerberos.json     |   6 +-
 .../stacks/HDP/2.6/services/YARN/kerberos.json  |  36 +-
 .../HDP/2.6/services/ZEPPELIN/kerberos.json     |   3 +-
 .../HDP/2.6/services/ZEPPELIN/metainfo.xml      |  21 +-
 .../stacks/HDP/2.6/upgrades/config-upgrade.xml  |  12 +
 .../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml |  17 +
 .../stacks/HDP/2.6/upgrades/upgrade-2.6.xml     |  14 +
 .../HDP/3.0/properties/stack_packages.json      |  50 +-
 .../HDP/3.0/services/ZEPPELIN/metainfo.xml      |   4 +-
 .../PERF/1.0/services/FAKEHBASE/kerberos.json   |  15 +-
 .../PERF/1.0/services/FAKEHDFS/kerberos.json    |  21 +-
 .../PERF/1.0/services/FAKEHDFS/widgets.json     |  48 +-
 .../PERF/1.0/services/FAKEYARN/kerberos.json    |  36 +-
 .../1.0/services/FAKEZOOKEEPER/kerberos.json    |   3 +-
 .../PERF/1.0/services/GRUMPY/kerberos.json      |  12 +-
 .../PERF/1.0/services/HAPPY/kerberos.json       |  12 +-
 .../PERF/1.0/services/KERBEROS/kerberos.json    |   3 +-
 .../PERF/1.0/services/SLEEPY/kerberos.json      |  12 +-
 .../stacks/PERF/1.0/services/SNOW/kerberos.json |  12 +-
 .../src/main/resources/version_definition.xsd   |   2 +
 .../server/agent/TestHeartbeatMonitor.java      |  20 +-
 .../RepositoryVersionEventCreatorTest.java      |   4 +
 .../DatabaseConsistencyCheckHelperTest.java     |  84 +++
 .../checks/DruidHighAvailabilityCheckTest.java  | 176 +++++
 .../checks/ServiceCheckValidityCheckTest.java   |  94 ++-
 .../AmbariManagementControllerTest.java         |   1 +
 .../BlueprintConfigurationProcessorTest.java    |  29 +-
 ...ClusterStackVersionResourceProviderTest.java | 232 +++---
 .../internal/ComponentResourceProviderTest.java |   6 +
 .../RepositoryResourceProviderTest.java         |  20 +-
 .../StackUpgradeConfigurationMergeTest.java     | 136 ++++
 .../upgrade/StackVersionListenerTest.java       |  46 ++
 .../server/orm/dao/AlertDefinitionDAOTest.java  |   6 +
 .../scheduler/ExecutionScheduleManagerTest.java |  36 +
 .../ComponentVersionCheckActionTest.java        |  14 -
 .../RangerUsersyncConfigCalculationTest.java    | 126 ++++
 .../server/stack/KerberosDescriptorTest.java    | 164 ++---
 .../server/stack/StackServiceDirectoryTest.java |  76 ++
 .../server/state/ServiceComponentTest.java      |  21 +-
 .../ambari/server/state/UpgradeHelperTest.java  |  44 ++
 .../KerberosComponentDescriptorTest.java        |  18 +-
 .../KerberosConfigurationDescriptorTest.java    |   2 +-
 .../state/kerberos/KerberosDescriptorTest.java  |  52 +-
 .../KerberosDescriptorUpdateHelperTest.java     |   2 +-
 .../KerberosIdentityDescriptorTest.java         |  49 +-
 .../kerberos/KerberosKeytabDescriptorTest.java  |  28 +-
 .../KerberosPrincipalDescriptorTest.java        |  24 +-
 .../kerberos/KerberosServiceDescriptorTest.java |  24 +-
 .../ClusterDeployWithStartOnlyTest.java         |   2 +-
 ...InstallWithoutStartOnComponentLevelTest.java |   2 +-
 .../ClusterInstallWithoutStartTest.java         |   2 +-
 .../topology/ConfigureClusterTaskTest.java      |  18 +-
 .../server/topology/TopologyManagerTest.java    |   2 +-
 .../server/upgrade/UpgradeCatalog260Test.java   | 335 +++++++--
 .../utils/ManagedThreadPoolExecutorTest.java    |  51 ++
 ambari-server/src/test/python/TestConfigs.py    |  38 +-
 .../src/test/python/TestStackSelect.py          |  67 +-
 .../src/test/python/TestVersionSelectUtil.py    |  18 +-
 .../python/stacks/2.0.6/HDFS/test_datanode.py   |   4 +-
 .../stacks/2.0.6/OOZIE/test_oozie_server.py     |  66 ++
 .../stacks/2.0.6/common/test_stack_advisor.py   |   4 +-
 .../python/stacks/2.0.6/configs/default.json    |   2 +-
 .../hooks/after-INSTALL/test_after_install.py   |   2 +-
 .../2.0.6/hooks/before-ANY/test_before_any.py   |  85 +--
 .../hooks/before-INSTALL/test_before_install.py |  10 +
 .../stacks/2.1/common/test_stack_advisor.py     |  28 +
 .../stacks/2.2/common/test_stack_advisor.py     | 232 +++++-
 .../2.5/ZEPPELIN/interpreter_json_generated.py  |  27 +
 .../stacks/2.5/ZEPPELIN/test_zeppelin_060.py    | 339 +++++++++
 .../stacks/2.5/ZEPPELIN/test_zeppelin_master.py | 330 ---------
 .../test/python/stacks/2.5/configs/default.json |  53 +-
 .../test/python/stacks/2.5/configs/secured.json |  71 +-
 .../2.6/ZEPPELIN/interpreter_json_generated.py  |  27 +
 .../stacks/2.6/ZEPPELIN/test_zeppelin_070.py    | 448 ++++++++++++
 .../test/python/stacks/2.6/configs/default.json |  80 ++-
 .../src/test/python/stacks/utils/RMFTestCase.py |  30 +-
 .../src/test/resources/TestConfigs-content.xml  |  28 +
 .../test_kerberos_descriptor_ranger_kms.json    |   1 +
 .../HDP/2.0.8/services/HDFS/kerberos.json       |  12 +-
 ambari-web/app/config.js                        |   1 -
 .../global/background_operations_controller.js  |   9 +-
 .../controllers/global/cluster_controller.js    |   1 +
 .../app/controllers/global/update_controller.js |   2 +-
 ambari-web/app/controllers/installer.js         |  37 +-
 .../progress_popup_controller.js                |   8 +-
 .../rangerAdmin/step4_controller.js             |   2 +-
 .../main/admin/stack_and_upgrade_controller.js  |  29 +-
 ambari-web/app/controllers/main/host/details.js | 153 +++-
 ambari-web/app/controllers/main/service/item.js |  12 +-
 .../service/manage_config_groups_controller.js  |  63 +-
 .../main/service/reassign/step4_controller.js   |   8 +-
 .../main/service/reassign_controller.js         |   7 +-
 .../app/controllers/wizard/step2_controller.js  |   4 +-
 .../wizard/step7/assign_master_controller.js    |   5 +-
 .../app/controllers/wizard/step7_controller.js  |  10 +-
 .../app/controllers/wizard/step8_controller.js  |   4 +-
 .../configs/services/ambari_infra_properties.js |  31 +-
 .../app/mappers/repository_version_mapper.js    |   2 +-
 ambari-web/app/mappers/service_mapper.js        |   6 +-
 .../app/mappers/service_metrics_mapper.js       |   3 +-
 ambari-web/app/mappers/stack_mapper.js          |   5 +-
 ambari-web/app/mappers/stack_version_mapper.js  |   6 +-
 ambari-web/app/messages.js                      |  24 +-
 .../configs/config_recommendation_parser.js     |  29 +-
 ...onfig_with_override_recommendation_parser.js |   7 +-
 .../main/host/details/actions/check_host.js     |   4 +-
 .../configs/component_actions_by_configs.js     |  10 +-
 .../mixins/wizard/assign_master_components.js   |  23 +-
 .../wizard/wizardProgressPageController.js      |  20 +-
 ambari-web/app/models/operating_system.js       |   3 +-
 ambari-web/app/models/repository.js             |   4 +-
 ambari-web/app/models/service.js                |   1 +
 ambari-web/app/models/stack_version/version.js  |   2 +
 ambari-web/app/routes/stack_upgrade_routes.js   |  11 +-
 ambari-web/app/styles/application.less          |  12 +
 ambari-web/app/styles/modal_popups.less         |  11 +
 ambari-web/app/styles/stack_versions.less       | 128 ++--
 ambari-web/app/templates/common/breadcrumbs.hbs |   6 +-
 .../common/configs/overriddenProperty.hbs       |   4 +-
 .../templates/common/host_progress_popup.hbs    |  27 +-
 .../stack_upgrade/stack_upgrade_wizard.hbs      | 174 +++--
 .../main/admin/stack_upgrade/upgrade_group.hbs  |  18 +-
 .../admin/stack_upgrade/upgrade_options.hbs     |   2 +-
 .../admin/stack_upgrade/upgrade_version_box.hbs |   6 +-
 .../stack_upgrade/upgrade_version_column.hbs    |  26 +
 ambari-web/app/templates/main/host/details.hbs  |   3 +
 .../main/host/details/recoverHostErrorPopup.hbs |  23 +
 .../main/host/details/recoverHostPopup.hbs      |  22 +
 ambari-web/app/templates/wizard/step2.hbs       |   5 +
 .../app/utils/batch_scheduled_requests.js       |   2 +-
 ambari-web/app/utils/host_progress_popup.js     | 121 +++-
 ambari-web/app/utils/hosts.js                   |   5 +-
 ambari-web/app/views/common/breadcrumbs_view.js |  24 +-
 .../views/common/configs/config_history_flow.js |   5 +-
 .../app/views/common/configs/controls_view.js   |   2 +-
 .../views/common/configs/service_config_view.js |   3 +-
 .../configs/service_configs_by_category_view.js |  16 +-
 ambari-web/app/views/common/controls_view.js    |   4 +-
 .../views/common/helpers/status_icon_view.js    |   1 +
 .../common/host_progress_popup_body_view.js     | 316 +++++---
 .../stack_upgrade/upgrade_version_box_view.js   |  21 +-
 .../upgrade_version_column_view.js              |  54 +-
 .../admin/stack_upgrade/upgrade_wizard_view.js  |   7 +-
 .../views/main/dashboard/config_history_view.js |  25 +-
 .../views/main/service/reassign/step1_view.js   |  25 +-
 ambari-web/app/views/wizard/step2_view.js       |  21 +
 .../global/background_operations_test.js        |   4 +-
 .../global/cluster_controller_test.js           |  16 +-
 .../progress_popup_controller_test.js           |   4 +
 .../admin/stack_and_upgrade_controller_test.js  |  60 +-
 .../manage_config_groups_controller_test.js     |  89 ++-
 .../service/reassign/step4_controller_test.js   |  12 +-
 .../step7/assign_master_controller_test.js      |  23 +
 .../test/controllers/wizard/step7_test.js       |  11 +
 .../mixins/common/configs/configs_saver_test.js |   4 +-
 .../component_actions_by_configs_test.js        |  10 +-
 .../service/configs/config_overridable_test.js  |   2 +
 .../test/utils/host_progress_popup_test.js      |   7 +-
 ambari-web/test/utils/hosts_test.js             |   3 +-
 .../test/views/common/breadcrumbs_view_test.js  |  30 +-
 .../host_progress_popup_body_view_test.js       | 641 ++++++++++-------
 .../upgrade_version_box_view_test.js            |  57 +-
 .../upgrade_version_column_view_test.js         |  72 +-
 .../stack_upgrade/upgrade_wizard_view_test.js   |  18 +-
 .../main/dashboard/config_history_view_test.js  |   1 +
 .../common-services/NIFI/1.0.0/kerberos.json    |   6 +-
 .../stacks/HDF/2.0/services/KAFKA/kerberos.json |   6 +-
 .../MICROSOFT_R_SERVER/8.0.5/kerberos.json      |   6 +-
 .../stacks/ODPi/2.0/services/HIVE/kerberos.json |  18 +-
 .../stacks/ODPi/2.0/services/YARN/kerberos.json |  30 +-
 .../stacks/ODPi/2.0/services/stack_advisor.py   |   7 +
 docs/pom.xml                                    |  12 +
 547 files changed, 17340 insertions(+), 8165 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index c4ab66c,2e86b2d..c01b901
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@@ -81,27 -76,24 +81,30 @@@ public class ComponentResourceProvider 
    // ----- Property ID constants ---------------------------------------------
  
    // Components
 -  protected static final String COMPONENT_CLUSTER_NAME_PROPERTY_ID    = "ServiceComponentInfo/cluster_name";
 -  protected static final String COMPONENT_SERVICE_NAME_PROPERTY_ID    = "ServiceComponentInfo/service_name";
 -  protected static final String COMPONENT_COMPONENT_NAME_PROPERTY_ID  = "ServiceComponentInfo/component_name";
 -  protected static final String COMPONENT_DISPLAY_NAME_PROPERTY_ID    = "ServiceComponentInfo/display_name";
 -  protected static final String COMPONENT_STATE_PROPERTY_ID           = "ServiceComponentInfo/state";
 -  protected static final String COMPONENT_CATEGORY_PROPERTY_ID        = "ServiceComponentInfo/category";
 -  protected static final String COMPONENT_TOTAL_COUNT_PROPERTY_ID     = "ServiceComponentInfo/total_count";
 -  protected static final String COMPONENT_STARTED_COUNT_PROPERTY_ID   = "ServiceComponentInfo/started_count";
 -  protected static final String COMPONENT_INSTALLED_COUNT_PROPERTY_ID = "ServiceComponentInfo/installed_count";
 -  protected static final String COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID
 -                                                                      = "ServiceComponentInfo/installed_and_maintenance_off_count";
 -  protected static final String COMPONENT_INIT_COUNT_PROPERTY_ID      = "ServiceComponentInfo/init_count";
 -  protected static final String COMPONENT_UNKNOWN_COUNT_PROPERTY_ID   = "ServiceComponentInfo/unknown_count";
 -  protected static final String COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID = "ServiceComponentInfo/install_failed_count";
 -  protected static final String COMPONENT_RECOVERY_ENABLED_ID         = "ServiceComponentInfo/recovery_enabled";
 -  protected static final String COMPONENT_DESIRED_STACK               = "ServiceComponentInfo/desired_stack";
 -  protected static final String COMPONENT_DESIRED_VERSION             = "ServiceComponentInfo/desired_version";
 -  protected static final String COMPONENT_REPOSITORY_STATE            = "ServiceComponentInfo/repository_state";
++
 +  protected static final String COMPONENT_CLUSTER_ID_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "cluster_id";
 +  protected static final String COMPONENT_CLUSTER_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "cluster_name";
 +  protected static final String COMPONENT_SERVICE_GROUP_ID_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "service_group_id";
 +  protected static final String COMPONENT_SERVICE_GROUP_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "service_group_name";
 +  protected static final String COMPONENT_SERVICE_ID_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "service_id";
 +  protected static final String COMPONENT_SERVICE_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "service_name";
 +  protected static final String COMPONENT_SERVICE_DISPLAY_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "service_display_name";
 +  protected static final String COMPONENT_COMPONENT_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "component_name";
 +  protected static final String COMPONENT_DISPLAY_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "display_name";
 +  protected static final String COMPONENT_STATE_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "state";
 +  protected static final String COMPONENT_CATEGORY_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "category";
 +  protected static final String COMPONENT_TOTAL_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "total_count";
 +  protected static final String COMPONENT_STARTED_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "started_count";
 +  protected static final String COMPONENT_INSTALLED_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "installed_count";
++  protected static final String COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "installed_and_maintenance_off_count";
++
 +  protected static final String COMPONENT_INIT_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "init_count";
 +  protected static final String COMPONENT_UNKNOWN_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "unknown_count";
 +  protected static final String COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "install_failed_count";
 +  protected static final String COMPONENT_RECOVERY_ENABLED_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "recovery_enabled";
 +  protected static final String COMPONENT_DESIRED_STACK = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "desired_stack";
 +  protected static final String COMPONENT_DESIRED_VERSION = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "desired_version";
 +  protected static final String COMPONENT_REPOSITORY_STATE = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "repository_state";
  
    private static final String TRUE = "true";
  

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
index 15d0539,6dc2b93..8382a05
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
@@@ -1144,8 -1144,8 +1146,8 @@@ public class StackModule extends BaseMo
      Set<RepositoryInfo> serviceRepos = getUniqueServiceRepos(stackRepos);
      stackInfo.getRepositories().addAll(serviceRepos);
  
 -    if (null != rxml && null != rxml.getLatestURI() && stackRepos.size() > 0) {
 +    if (null != rxml && null != rxml.getLatestURI() && stackRepos.size() > 0 && stackContext != null) {
-       stackContext.registerRepoUpdateTask(rxml.getLatestURI(), this);
+       registerRepoUpdateTask(rxml);
      }
    }
  
@@@ -1234,8 -1276,8 +1278,8 @@@
          RepositoryXml serviceRepoXml = ssd.getRepoFile();
          if (null != serviceRepoXml) {
            repos.addAll(serviceRepoXml.getRepositories());
 -          if (null != serviceRepoXml.getLatestURI()) {
 +          if (null != serviceRepoXml.getLatestURI() && stackContext != null) {
-             stackContext.registerRepoUpdateTask(serviceRepoXml.getLatestURI(), this);
+             registerRepoUpdateTask(serviceRepoXml);
            }
          }
        }

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index aa9b3ef,22c97ed..7e66734
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@@ -30,8 -30,8 +30,9 @@@ import java.util.concurrent.locks.Reent
  import org.apache.ambari.server.AmbariException;
  import org.apache.ambari.server.ObjectNotFoundException;
  import org.apache.ambari.server.ServiceComponentHostNotFoundException;
 +import org.apache.ambari.server.ServiceGroupNotFoundException;
  import org.apache.ambari.server.api.services.AmbariMetaInfo;
+ import org.apache.ambari.server.controller.MaintenanceStateHelper;
  import org.apache.ambari.server.controller.ServiceComponentResponse;
  import org.apache.ambari.server.events.ServiceComponentRecoveryChangedEvent;
  import org.apache.ambari.server.events.listeners.upgrade.StackVersionListener;

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
----------------------------------------------------------------------

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/service_advisor.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/service_advisor.py
----------------------------------------------------------------------
diff --cc ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/service_advisor.py
index 0000000,4548961..834b21e
mode 000000,100644..100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/service_advisor.py
@@@ -1,0 -1,209 +1,209 @@@
+ #!/usr/bin/env ambari-python-wrap
+ """
+ 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.
+ """
+ 
+ # Python imports
+ import imp
+ import os
+ import traceback
+ import re
+ import socket
+ import fnmatch
+ 
+ 
+ from resource_management.core.logger import Logger
+ 
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
 -STACKS_DIR = os.path.join(SCRIPT_DIR, '../../../stacks/')
++STACKS_DIR = os.path.join(SCRIPT_DIR, '/var/lib/ambari-server/resources/stacks/')
+ PARENT_FILE = os.path.join(STACKS_DIR, 'service_advisor.py')
+ 
+ try:
+   with open(PARENT_FILE, 'rb') as fp:
+     service_advisor = imp.load_module('service_advisor', fp, PARENT_FILE, ('.py', 'rb', imp.PY_SOURCE))
+ except Exception as e:
+   traceback.print_exc()
+   print "Failed to load parent"
+ 
+ class ZeppelinServiceAdvisor(service_advisor.ServiceAdvisor):
+ 
+   def __init__(self, *args, **kwargs):
+     self.as_super = super(ZeppelinServiceAdvisor, self)
+     self.as_super.__init__(*args, **kwargs)
+ 
+     # Always call these methods
+     self.modifyMastersWithMultipleInstances()
+     self.modifyCardinalitiesDict()
+     self.modifyHeapSizeProperties()
+     self.modifyNotValuableComponents()
+     self.modifyComponentsNotPreferableOnServer()
+     self.modifyComponentLayoutSchemes()
+ 
+   def modifyMastersWithMultipleInstances(self):
+     """
+     Modify the set of masters with multiple instances.
+     Must be overriden in child class.
+     """
+     # Nothing to do
+     pass
+ 
+   def modifyCardinalitiesDict(self):
+     """
+     Modify the dictionary of cardinalities.
+     Must be overriden in child class.
+     """
+     # Nothing to do
+     pass
+ 
+   def modifyHeapSizeProperties(self):
+     """
+     Modify the dictionary of heap size properties.
+     Must be overriden in child class.
+     """
+     pass
+ 
+   def modifyNotValuableComponents(self):
+     """
+     Modify the set of components whose host assignment is based on other services.
+     Must be overriden in child class.
+     """
+     # Nothing to do
+     pass
+ 
+   def modifyComponentsNotPreferableOnServer(self):
+     """
+     Modify the set of components that are not preferable on the server.
+     Must be overriden in child class.
+     """
+     # Nothing to do
+     pass
+ 
+   def modifyComponentLayoutSchemes(self):
+     """
+     Modify layout scheme dictionaries for components.
+     The scheme dictionary basically maps the number of hosts to
+     host index where component should exist.
+     Must be overriden in child class.
+     """
+     # Nothing to do
+     pass
+ 
+   def getServiceComponentLayoutValidations(self, services, hosts):
+     """
+     Get a list of errors.
+     Must be overriden in child class.
+     """
+ 
+     return []
+ 
+   def getServiceConfigurationRecommendations(self, configurations, clusterData, services, hosts):
+     """
+     Entry point.
+     Must be overriden in child class.
+     """
+     #Logger.info("Class: %s, Method: %s. Recommending Service Configurations." %
+     #            (self.__class__.__name__, inspect.stack()[0][3]))
+ 
+     recommender = ZeppelinRecommender()
+     recommender.recommendZeppelinConfigurationsFromHDP25(configurations, clusterData, services, hosts)
+ 
+   def getServiceConfigurationsValidationItems(self, configurations, recommendedDefaults, services, hosts):
+     """
+     Entry point.
+     Validate configurations for the service. Return a list of errors.
+     The code for this function should be the same for each Service Advisor.
+     """
+     #Logger.info("Class: %s, Method: %s. Validating Configurations." %
+     #            (self.__class__.__name__, inspect.stack()[0][3]))
+ 
+     validator = ZeppelinValidator()
+     # Calls the methods of the validator using arguments,
+     # method(siteProperties, siteRecommendations, configurations, services, hosts)
+     return validator.validateListOfConfigUsingMethod(configurations, recommendedDefaults, services, hosts, validator.validators)
+ 
+ 
+ 
+ class ZeppelinRecommender(service_advisor.ServiceAdvisor):
+   """
+   Zeppelin Recommender suggests properties when adding the service for the first time or modifying configs via the UI.
+   """
+ 
+   def __init__(self, *args, **kwargs):
+     self.as_super = super(ZeppelinRecommender, self)
+     self.as_super.__init__(*args, **kwargs)
+ 
+   def recommendZeppelinConfigurationsFromHDP25(self, configurations, clusterData, services, hosts):
+     """
+     :type configurations dict
+     :type clusterData dict
+     :type services dict
+     :type hosts dict
+     """
+     self.__recommendLivySuperUsers(configurations, services)
+ 
+   def __recommendLivySuperUsers(self, configurations, services):
+     """
+     If Kerberos is enabled AND Zeppelin is installed and Spark Livy Server is installed, then set
+     livy-conf/livy.superusers to contain the Zeppelin principal name from
+     zeppelin-env/zeppelin.server.kerberos.principal
+ 
+     :param configurations:
+     :param services:
+     """
+     if self.isSecurityEnabled(services):
+       zeppelin_env = self.getServicesSiteProperties(services, "zeppelin-env")
+ 
+       if zeppelin_env and 'zeppelin.server.kerberos.principal' in zeppelin_env:
+         zeppelin_principal = zeppelin_env['zeppelin.server.kerberos.principal']
+         zeppelin_user = zeppelin_principal.split('@')[0] if zeppelin_principal else None
+ 
+         if zeppelin_user:
+           livy_conf = self.getServicesSiteProperties(services, 'livy-conf')
+ 
+           if livy_conf:
+             superusers = livy_conf['livy.superusers'] if livy_conf and 'livy.superusers' in livy_conf else None
+ 
+             # add the Zeppelin user to the set of users
+             if superusers:
+               _superusers = superusers.split(',')
+               _superusers = [x.strip() for x in _superusers]
+               _superusers = filter(None, _superusers)  # Removes empty string elements from array
+             else:
+               _superusers = []
+ 
+             if zeppelin_user not in _superusers:
+               _superusers.append(zeppelin_user)
+ 
+               putLivyProperty = self.putProperty(configurations, 'livy-conf', services)
+               putLivyProperty('livy.superusers', ','.join(_superusers))
+ 
+ class ZeppelinValidator(service_advisor.ServiceAdvisor):
+   """
+   Zeppelin Validator checks the correctness of properties whenever the service is first added or the user attempts to
+   change configs via the UI.
+   """
+ 
+   def __init__(self, *args, **kwargs):
+     self.as_super = super(ZeppelinValidator, self)
+     self.as_super.__init__(*args, **kwargs)
+ 
+     self.validators = []
+ 
+ 
+ 
+ 
+ 

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
index 0ad53c5,3db174c..795fd1a
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java
@@@ -40,9 -46,11 +46,12 @@@ import javax.persistence.TypedQuery
  
  import org.apache.ambari.server.api.services.AmbariMetaInfo;
  import org.apache.ambari.server.configuration.Configuration;
 +import org.apache.ambari.server.mpack.MpackManagerFactory;
  import org.apache.ambari.server.orm.DBAccessor;
+ import org.apache.ambari.server.orm.dao.ClusterDAO;
+ import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
  import org.apache.ambari.server.stack.StackManagerFactory;
+ import org.apache.ambari.server.state.Cluster;
  import org.apache.ambari.server.state.Clusters;
  import org.apache.ambari.server.state.ServiceInfo;
  import org.apache.ambari.server.state.stack.OsFamily;

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --cc ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index 6f3fe79,39ab1d7..51be08b
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@@ -326,7 -460,7 +461,8 @@@ public class StackUpgradeConfigurationM
        binder.bind(ServiceConfigDAO.class).toInstance(createNiceMock(ServiceConfigDAO.class));
        binder.install(new FactoryModuleBuilder().build(UpgradeContextFactory.class));
        binder.bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
 +      binder.bind(MpackManagerFactory.class).toInstance(createNiceMock(MpackManagerFactory.class));
+       binder.bind(AmbariMetaInfo.class).toInstance(m_metainfo);
  
        binder.requestStaticInjection(UpgradeResourceProvider.class);
      }

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-server/src/test/java/org/apache/ambari/server/state/kerberos/KerberosDescriptorUpdateHelperTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-web/app/mappers/service_mapper.js
----------------------------------------------------------------------
diff --cc ambari-web/app/mappers/service_mapper.js
index 79036d0,24130dd..38d2724
--- a/ambari-web/app/mappers/service_mapper.js
+++ b/ambari-web/app/mappers/service_mapper.js
@@@ -21,9 -21,10 +21,10 @@@ var misc = require('utils/misc')
  App.serviceMapper = App.QuickDataMapper.create({
    model: App.Service,
    config: {
 -    id: 'ServiceInfo.service_name',
 -    service_name: 'ServiceInfo.service_name',
 +    id: 'ServiceInfo.service_display_name',
 +    service_name: 'ServiceInfo.service_display_name',
-     work_status: 'ServiceInfo.state'
+     work_status: 'ServiceInfo.state',
+     desired_repository_version_id: 'ServiceInfo.desired_repository_version_id'
    },
    initialAppLoad: false,
    passiveStateMap: {},
@@@ -40,8 -41,9 +41,9 @@@
        } else {
          var serviceData = {
            ServiceInfo: {
 -            service_name: service.ServiceInfo.service_name,
 +            service_display_name: service.ServiceInfo.service_display_name,
-             state: service.ServiceInfo.state
+             state: service.ServiceInfo.state,
+             desired_repository_version_id: service.ServiceInfo.desired_repository_version_id
            },
            host_components: [],
            components: []

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-web/app/mappers/service_metrics_mapper.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/530df165/ambari-web/app/mixins/wizard/wizardProgressPageController.js
----------------------------------------------------------------------
diff --cc ambari-web/app/mixins/wizard/wizardProgressPageController.js
index 0a91c58,3dcde74..7e3aa1f
--- a/ambari-web/app/mixins/wizard/wizardProgressPageController.js
+++ b/ambari-web/app/mixins/wizard/wizardProgressPageController.js
@@@ -449,9 -457,7 +457,7 @@@ App.wizardProgressPageControllerMixin 
          }).join(',');
        }
        data.context = "Stop required services";
 -      data.urlParams = "ServiceInfo/service_name.in(" + servicesList + ")";
 +      data.urlParams = "ServiceInfo/service_display_name.in(" + servicesList + ")";
-     } else {
-       data.context = "Stop all services";
      }
      return App.ajax.send({
        name: 'common.services.update',


[03/50] [abbrv] ambari git commit: AMBARI-22004 Log Search UI: implement 'Excluded' filter. (ababiichuk)

Posted by jl...@apache.org.
AMBARI-22004 Log Search UI: implement 'Excluded' filter. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 260c75fc81891d9df219e64ed9dbd3cc8bc5e140
Parents: 8467a20
Author: ababiichuk <ab...@hortonworks.com>
Authored: Wed Sep 20 13:11:48 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Wed Sep 20 13:11:48 2017 +0300

----------------------------------------------------------------------
 .../dropdown-button.component.html              |  9 ++++--
 .../dropdown-button.component.less              |  4 +++
 .../dropdown-button.component.spec.ts           | 12 +++++--
 .../dropdown-button.component.ts                |  9 ++++++
 .../filter-button.component.spec.ts             | 12 +++++--
 .../filters-panel/filters-panel.component.html  |  8 ++---
 .../filters-panel/filters-panel.component.ts    | 15 ++++++++-
 .../menu-button/menu-button.component.spec.ts   | 18 +++++++++--
 .../search-box/search-box.component.html        |  3 +-
 .../search-box/search-box.component.less        |  4 +++
 .../search-box/search-box.component.ts          | 33 ++++++++++++++------
 .../timezone-picker.component.spec.ts           | 20 ++++++++++--
 .../src/app/components/variables.less           |  3 +-
 .../services/component-actions.service.spec.ts  | 29 +++++++++++++++--
 .../app/services/component-actions.service.ts   |  8 ++++-
 .../src/app/services/filtering.service.ts       |  3 ++
 16 files changed, 161 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
index a16b205..9536573 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
@@ -15,10 +15,15 @@
   limitations under the License.
 -->
 
-<div class="filter-label" *ngIf="label">{{label | translate}}</div>
 <div [ngClass]="{'dropup': isDropup}">
   <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
-    <span *ngIf="!isMultipleChoice">{{selectedLabel | translate}}</span> <span class="caret"></span>
+    <span *ngIf="iconClass || label"
+          [ngClass]="{'filter-label': true, 'plain': !isMultipleChoice && !hideCaret && showSelectedValue}">
+      <span *ngIf="iconClass" [ngClass]="iconClass"></span>
+      <span *ngIf="label">{{label | translate}}</span>
+    </span>
+    <span *ngIf="showSelectedValue && !isMultipleChoice">{{selectedLabel | translate}}</span>
+    <span *ngIf="!hideCaret" class="caret"></span>
   </button>
   <ul data-component="dropdown-list" [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"
       [items]="options" [isMultipleChoice]="isMultipleChoice" (selectedItemChange)="updateValue($event)"></ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
index 55699b4..a5da7f5 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
@@ -24,6 +24,10 @@
 
   .filter-label {
     padding: @input-group-addon-padding;
+
+    &.plain {
+      color: initial;
+    }
   }
 
   .btn {

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
index c5845b3..04730ef 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
@@ -23,9 +23,12 @@ import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
 import {ComponentsService, components} from '@app/services/storage/components.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {UtilsService} from '@app/services/utils.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
+import {HttpClientService} from '@app/services/http-client.service';
 
 import {DropdownButtonComponent} from './dropdown-button.component';
 
@@ -40,7 +43,9 @@ describe('DropdownButtonComponent', () => {
         StoreModule.provideStore({
           appSettings,
           clusters,
-          components
+          components,
+          appState,
+          hosts
         }),
         ...TranslationModules
       ],
@@ -48,9 +53,12 @@ describe('DropdownButtonComponent', () => {
         AppSettingsService,
         ClustersService,
         ComponentsService,
+        AppStateService,
+        HostsService,
         FilteringService,
         UtilsService,
-        ComponentActionsService
+        ComponentActionsService,
+        HttpClientService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
index 5800190..42b9451 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
@@ -38,6 +38,15 @@ export class DropdownButtonComponent implements OnInit {
   label?: string;
 
   @Input()
+  iconClass?: string;
+
+  @Input()
+  hideCaret: boolean = false;
+
+  @Input()
+  showSelectedValue: boolean = true;
+
+  @Input()
   options?: any[];
 
   @Input()

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
index 22e4fca..fddf645 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
@@ -23,9 +23,12 @@ import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
 import {ComponentsService, components} from '@app/services/storage/components.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {UtilsService} from '@app/services/utils.service';
+import {HttpClientService} from '@app/services/http-client.service';
 
 import {FilterButtonComponent} from './filter-button.component';
 
@@ -40,7 +43,9 @@ describe('FilterButtonComponent', () => {
         StoreModule.provideStore({
           appSettings,
           clusters,
-          components
+          components,
+          appState,
+          hosts
         }),
         ...TranslationModules
       ],
@@ -48,9 +53,12 @@ describe('FilterButtonComponent', () => {
         AppSettingsService,
         ClustersService,
         ComponentsService,
+        AppStateService,
+        HostsService,
         ComponentActionsService,
         FilteringService,
-        UtilsService
+        UtilsService,
+        HttpClientService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
index fb40a1c..dc76e79 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
@@ -20,7 +20,8 @@
     <filter-dropdown [label]="filters.clusters.label" formControlName="clusters" [options]="filters.clusters.options"
                      [defaultLabel]="filters.clusters.defaultLabel" [isMultipleChoice]="true"
                      class="filter-input"></filter-dropdown>
-    <search-box formControlName="query" [items]="searchBoxItems" class="filter-input"></search-box>
+    <search-box formControlName="query" [items]="searchBoxItemsTranslated" class="filter-input"
+                [parameterNameChangeSubject]="queryParameterNameChange"></search-box>
     <time-range-picker formControlName="timeRange" [defaultLabel]="filters.timeRange.defaultLabel"
                        class="filter-input"></time-range-picker>
     <timezone-picker class="filter-input"></timezone-picker>
@@ -29,9 +30,8 @@
     </button-->
   </div>
   <div class="default-flex col-md-4">
-    <a href="#">
-      <span class="fa fa-search-minus"></span> {{'filter.excluded' | translate}}
-    </a>
+    <dropdown-button [options]="searchBoxItems" iconClass="fa fa-search-minus" label="filter.excluded"
+                     [hideCaret]="true" [showSelectedValue]="false" action="proceedWithExclude"></dropdown-button>
     <filter-button formControlName="hosts" [label]="filters.hosts.label"
                    [iconClass]="filters.hosts.iconClass" [subItems]="filters.hosts.options"
                    [isMultipleChoice]="true" [isRightAlign]="true"

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
index 644048f..72ab222 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
@@ -18,6 +18,7 @@
 
 import {Component} from '@angular/core';
 import {FormGroup} from '@angular/forms';
+import {Subject} from 'rxjs/Subject';
 import {TranslateService} from '@ngx-translate/core';
 import {FilteringService} from '@app/services/filtering.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
@@ -42,7 +43,13 @@ export class FiltersPanelComponent {
               };
             }),
             labelKeys = items.map(item => item.name);
-          translate.get(labelKeys).first().subscribe(translation => this.searchBoxItems = items.map(item => {
+          this.searchBoxItems = items.map(item => {
+            return {
+              label: item.name,
+              value: item.value
+            };
+          });
+          translate.get(labelKeys).first().subscribe(translation => this.searchBoxItemsTranslated = items.map(item => {
             return {
               name: translation[item.name],
               value: item.value
@@ -62,6 +69,8 @@ export class FiltersPanelComponent {
 
   searchBoxItems: any[] = [];
 
+  searchBoxItemsTranslated: any[] = [];
+
   get filters(): any {
     return this.filtering.filters;
   }
@@ -70,4 +79,8 @@ export class FiltersPanelComponent {
     return this.filtering.filtersForm;
   }
 
+  get queryParameterNameChange(): Subject<any> {
+    return this.filtering.queryParameterNameChange;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
index c57c11d..65f0ee6 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
@@ -21,8 +21,13 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
+import {HttpClientService} from '@app/services/http-client.service';
 
 import {MenuButtonComponent} from './menu-button.component';
 
@@ -35,14 +40,23 @@ describe('MenuButtonComponent', () => {
       declarations: [MenuButtonComponent],
       imports: [
         StoreModule.provideStore({
-          appSettings
+          appSettings,
+          appState,
+          clusters,
+          components,
+          hosts
         }),
         ...TranslationModules
       ],
       providers: [
         AppSettingsService,
+        AppStateService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
         ComponentActionsService,
-        FilteringService
+        FilteringService,
+        HttpClientService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
index 64e15dc..e88159c 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
@@ -16,6 +16,7 @@
 -->
 
 <label class="parameter-label" *ngFor="let parameter of parameters">
+  <span *ngIf="parameter.isExclude" class="fa fa-search-minus exclude-icon"></span>
   {{parameter.label | translate}}:
   <span class="parameter-value">{{parameter.value}}</span>
   <span class="remove-parameter" (click)="removeParameter($event, parameter.id)">&times;</span>
@@ -23,7 +24,7 @@
 <span class="active-parameter-label" *ngIf="isActive && activeItem">{{activeItem.name | translate}}:</span>
 <div [ngClass]="{'search-item-container': true, 'active': isActive, 'value': isValueInput}">
   <input #parameterInput auto-complete [(ngModel)]="currentValue" [source]="items" [list-formatter]="itemsListFormatter"
-         display-property-name="name" (valueChanged)="onParameterNameChange($event)"
+         display-property-name="name" (valueChanged)="changeParameterName({item: $event, isExclude: false})"
          class="search-item-input parameter-input form-control">
   <input #valueInput type="text" [(ngModel)]="currentValue" class="search-item-input value-input form-control"
          (keyup)="onParameterValueChange($event)">

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.less
index cccf5d5..6d4378b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.less
@@ -41,6 +41,10 @@
     background-color: @main-background-color;
     font-size: 0.8em;
 
+    .exclude-icon {
+      color: @exclude-color;
+    }
+
     .parameter-value {
       font-weight: normal;
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
index 82c455e..4730190 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
@@ -18,6 +18,7 @@
 
 import {Component, OnInit, OnDestroy, Input, ViewChild, ElementRef, forwardRef} from '@angular/core';
 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
+import {Subject} from 'rxjs/Subject';
 import {UtilsService} from '@app/services/utils.service';
 
 @Component({
@@ -46,6 +47,7 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     this.parameterInput.addEventListener('focus', this.onParameterInputFocus);
     this.parameterInput.addEventListener('blur', this.onParameterInputBlur);
     this.valueInput.addEventListener('blur', this.onValueInputBlur);
+    this.parameterNameChangeSubject.subscribe(this.onParameterNameChange);
   }
 
   ngOnDestroy() {
@@ -54,10 +56,15 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     this.parameterInput.removeEventListener('focus', this.onParameterInputFocus);
     this.parameterInput.removeEventListener('blur', this.onParameterInputBlur);
     this.valueInput.removeEventListener('blur', this.onValueInputBlur);
+    this.parameterNameChangeSubject.unsubscribe();
   }
 
   private currentId: number = 0;
 
+  private isExclude: boolean = false;
+
+  private defaultSubject: Subject<any> = new Subject();
+
   isActive: boolean = false;
 
   isParameterInput: boolean = false;
@@ -69,6 +76,9 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
   @Input()
   items: any[] = [];
 
+  @Input()
+  parameterNameChangeSubject: Subject<any> = this.defaultSubject;
+
   @ViewChild('parameterInput')
   parameterInputRef: ElementRef;
 
@@ -127,14 +137,19 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     return item.name;
   }
 
-  onParameterNameChange(item: any): void {
-    if (item) {
-      this.isParameterInput = false;
-      this.isValueInput = true;
-      this.activeItem = item;
-      this.currentValue = '';
-      setTimeout(() => this.valueInput.focus(), 0);
-    }
+  changeParameterName(item: any): void {
+    this.parameterNameChangeSubject.next(item);
+  }
+
+  onParameterNameChange = (options: any): void => {
+    this.activeItem = typeof options.item === 'string' ?
+      this.items.find(field => field.value === options.item) : options.item;
+    this.isExclude = options.isExclude;
+    this.isActive = true;
+    this.isParameterInput = false;
+    this.isValueInput = true;
+    this.currentValue = '';
+    setTimeout(() => this.valueInput.focus(), 0);
   }
 
   onParameterValueChange(event: KeyboardEvent): void {
@@ -144,7 +159,7 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
         name: this.activeItem.value,
         label: this.activeItem.name,
         value: this.currentValue,
-        isExclude: false
+        isExclude: this.isExclude
       });
       this.currentValue = '';
       this.activeItem = null;

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
index 380f030..abbc9ce 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
@@ -20,7 +20,13 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {HttpClientService} from '@app/services/http-client.service';
 import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
 import {ModalComponent} from '@app/components/modal/modal.component';
 
@@ -39,13 +45,23 @@ describe('TimeZonePickerComponent', () => {
       ],
       imports: [
         StoreModule.provideStore({
-          appSettings
+          appSettings,
+          appState,
+          clusters,
+          components,
+          hosts
         }),
         ...TranslationModules
       ],
       providers: [
         AppSettingsService,
-        ComponentActionsService
+        AppStateService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        ComponentActionsService,
+        FilteringService,
+        HttpClientService
       ],
     })
     .compileComponents();

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
index 8dba5b3..ab95030 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
@@ -23,7 +23,7 @@
 @input-border-width: 1px;
 @input-border: @input-border-width solid #CFD3D7;
 @button-border-radius: 4px;
-@input-group-addon-padding: 6px 0 6px 12px;
+@input-group-addon-padding: 6px 12px 6px 0;
 @block-margin-top: 20px;
 @link-color: #1491C1;
 @link-hover-color: #23527C;
@@ -49,6 +49,7 @@
 @unknown-color: #BDBDBD;
 @submit-color: #5CB85C;
 @submit-hover-color: #449D44;
+@exclude-color: #EF6162;
 
 // Mixins
 .flex-vertical-align {

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
index ff0ee37..f961907 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
@@ -19,20 +19,45 @@
 import {TestBed, inject} from '@angular/core/testing';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {HttpClientService} from '@app/services/http-client.service';
 
 import {ComponentActionsService} from './component-actions.service';
 
 describe('ComponentActionsService', () => {
+  const httpClient = {
+    get: () => {
+      return {
+        subscribe: () => {
+        }
+      };
+    }
+  };
+
   beforeEach(() => {
     TestBed.configureTestingModule({
       imports: [
         StoreModule.provideStore({
-          appSettings
+          appSettings,
+          clusters,
+          components,
+          hosts
         })
       ],
       providers: [
+        ComponentActionsService,
         AppSettingsService,
-        ComponentActionsService
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        FilteringService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        }
       ]
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
index a8235fa..f29705c 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
@@ -19,11 +19,12 @@
 import {Injectable} from '@angular/core';
 import {AppSettingsService} from '@app/services/storage/app-settings.service';
 import {CollectionModelService} from '@app/models/store.model';
+import {FilteringService} from '@app/services/filtering.service';
 
 @Injectable()
 export class ComponentActionsService {
 
-  constructor(private appSettings: AppSettingsService) {
+  constructor(private appSettings: AppSettingsService, private filtering: FilteringService) {
   }
 
   //TODO implement actions
@@ -50,4 +51,9 @@ export class ComponentActionsService {
     }));
   }
 
+  proceedWithExclude = (item: string): void => this.filtering.queryParameterNameChange.next({
+    item: item,
+    isExclude: true
+  });
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/260c75fc/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
index cf82ff6..2d3f640 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -18,6 +18,7 @@
 
 import {Injectable} from '@angular/core';
 import {FormControl, FormGroup} from '@angular/forms';
+import {Subject} from 'rxjs/Subject';
 import * as moment from 'moment-timezone';
 import {AppSettingsService} from '@app/services/storage/app-settings.service';
 import {ClustersService} from '@app/services/storage/clusters.service';
@@ -432,6 +433,8 @@ export class FilteringService {
 
   filtersForm = new FormGroup(this.filtersFormItems);
 
+  queryParameterNameChange: Subject<any> = new Subject();
+
   loadClusters(): void {
     this.httpClient.get('clusters').subscribe(response => {
       const clusterNames = response.json();


[17/50] [abbrv] ambari git commit: AMBARI-21919. Kerberos identity references should use the "reference" attribute (rlevas)

Posted by jl...@apache.org.
AMBARI-21919. Kerberos identity references should use the "reference" attribute (rlevas)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 2a0602104f719d8dec7cc34f9a10fe885d55a551
Parents: 2e170e4
Author: Robert Levas <rl...@hortonworks.com>
Authored: Thu Sep 21 12:01:15 2017 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Thu Sep 21 12:01:29 2017 -0400

----------------------------------------------------------------------
 .../HDP/2.0.8/services/HDFS/kerberos.json       |  12 +-
 .../AbstractKerberosDescriptorContainer.java    |   9 +-
 .../state/kerberos/KerberosDescriptor.java      |   2 +-
 .../server/upgrade/UpgradeCatalog260.java       | 220 +++++++++++++++++--
 .../ACCUMULO/1.6.1.2.2.0/kerberos.json          |   6 +-
 .../AMBARI_INFRA/0.1.0/kerberos.json            |   6 +-
 .../AMBARI_METRICS/0.1.0/kerberos.json          |   6 +-
 .../ATLAS/0.1.0.2.3/kerberos.json               |   6 +-
 .../ATLAS/0.7.0.2.5/kerberos.json               |   9 +-
 .../ATLAS/0.7.0.3.0/kerberos.json               |   9 +-
 .../FALCON/0.5.0.2.1/kerberos.json              |  12 +-
 .../common-services/HAWQ/2.0.0/kerberos.json    |   9 +-
 .../HBASE/0.96.0.2.0/kerberos.json              |   9 +-
 .../HBASE/2.0.0.3.0/kerberos.json               |  15 +-
 .../HDFS/2.1.0.2.0/kerberos.json                |  18 +-
 .../HDFS/3.0.0.3.0/kerberos.json                |  21 +-
 .../HIVE/0.12.0.2.0/kerberos.json               |  15 +-
 .../HIVE/2.1.0.3.0/kerberos.json                |  30 ++-
 .../KAFKA/0.10.0.3.0/kerberos.json              |   9 +-
 .../common-services/KAFKA/0.10.0/kerberos.json  |   9 +-
 .../common-services/KAFKA/0.9.0/kerberos.json   |   6 +-
 .../KERBEROS/1.10.3-10/kerberos.json            |   3 +-
 .../KERBEROS/1.10.3-30/kerberos.json            |   3 +-
 .../KNOX/0.5.0.3.0/kerberos.json                |   3 +-
 .../LOGSEARCH/0.5.0/kerberos.json               |   6 +-
 .../MAHOUT/1.0.0.2.3/kerberos.json              |   6 +-
 .../OOZIE/4.0.0.2.0/kerberos.json               |  12 +-
 .../OOZIE/4.2.0.2.3/kerberos.json               |  12 +-
 .../OOZIE/4.2.0.3.0/kerberos.json               |  12 +-
 .../PIG/0.12.0.2.0/kerberos.json                |   3 +-
 .../PIG/0.16.1.3.0/kerberos.json                |   3 +-
 .../common-services/RANGER/0.6.0/kerberos.json  |  18 +-
 .../RANGER/1.0.0.3.0/kerberos.json              |  18 +-
 .../RANGER_KMS/0.5.0.2.3/kerberos.json          |   6 +-
 .../RANGER_KMS/1.0.0.3.0/kerberos.json          |   9 +-
 .../SLIDER/0.60.0.2.2/kerberos.json             |   3 +-
 .../SLIDER/0.91.0.3.0/kerberos.json             |   3 +-
 .../common-services/SPARK/1.2.1/kerberos.json   |   6 +-
 .../common-services/SPARK/1.4.1/kerberos.json   |  12 +-
 .../common-services/SPARK/2.2.0/kerberos.json   |   3 +-
 .../common-services/SPARK2/2.0.0/kerberos.json  |  12 +-
 .../common-services/STORM/0.9.1/kerberos.json   |   9 +-
 .../STORM/1.0.1.3.0/kerberos.json               |  15 +-
 .../common-services/STORM/1.0.1/kerberos.json   |  15 +-
 .../common-services/STORM/1.1.0/kerberos.json   |  15 +-
 .../common-services/TEZ/0.4.0.2.1/kerberos.json |   3 +-
 .../common-services/TEZ/0.9.0.3.0/kerberos.json |   3 +-
 .../YARN/2.1.0.2.0/kerberos.json                |  30 ++-
 .../YARN/3.0.0.3.0/kerberos.json                |  36 ++-
 .../ZEPPELIN/0.6.0/kerberos.json                |   3 +-
 .../ZEPPELIN/0.7.0/kerberos.json                |   3 +-
 .../ZOOKEEPER/3.4.5/kerberos.json               |   3 +-
 .../resources/kerberos_descriptor_schema.json   |   5 +-
 .../stacks/HDP/2.2/services/YARN/kerberos.json  |  30 ++-
 .../HDP/2.3.ECS/services/ECS/kerberos.json      |   3 +-
 .../HDP/2.3.ECS/services/HBASE/kerberos.json    |   9 +-
 .../HDP/2.3.ECS/services/YARN/kerberos.json     |  33 ++-
 .../services/ACCUMULO/kerberos.json             |  27 ++-
 .../HDP/2.3/services/ACCUMULO/kerberos.json     |   6 +-
 .../stacks/HDP/2.3/services/TEZ/kerberos.json   |   3 +-
 .../stacks/HDP/2.3/services/YARN/kerberos.json  |  30 ++-
 .../HDP/2.5/services/FALCON/kerberos.json       |  15 +-
 .../stacks/HDP/2.5/services/HBASE/kerberos.json |  15 +-
 .../stacks/HDP/2.5/services/HDFS/kerberos.json  |  21 +-
 .../stacks/HDP/2.5/services/HIVE/kerberos.json  |  30 ++-
 .../stacks/HDP/2.5/services/KNOX/kerberos.json  |   3 +-
 .../HDP/2.5/services/RANGER_KMS/kerberos.json   |   9 +-
 .../stacks/HDP/2.5/services/SPARK/kerberos.json |  18 +-
 .../stacks/HDP/2.5/services/YARN/kerberos.json  |  36 ++-
 .../HDP/2.5/services/ZEPPELIN/kerberos.json     |   3 +-
 .../stacks/HDP/2.6/services/ATLAS/kerberos.json |   9 +-
 .../stacks/HDP/2.6/services/DRUID/kerberos.json |  24 +-
 .../stacks/HDP/2.6/services/HDFS/kerberos.json  |  21 +-
 .../stacks/HDP/2.6/services/OOZIE/kerberos.json |  12 +-
 .../stacks/HDP/2.6/services/SPARK/kerberos.json |   3 +-
 .../HDP/2.6/services/SPARK2/kerberos.json       |   3 +-
 .../HDP/2.6/services/SUPERSET/kerberos.json     |   6 +-
 .../stacks/HDP/2.6/services/YARN/kerberos.json  |  36 ++-
 .../HDP/2.6/services/ZEPPELIN/kerberos.json     |   3 +-
 .../PERF/1.0/services/FAKEHBASE/kerberos.json   |  15 +-
 .../PERF/1.0/services/FAKEHDFS/kerberos.json    |  21 +-
 .../PERF/1.0/services/FAKEYARN/kerberos.json    |  36 ++-
 .../1.0/services/FAKEZOOKEEPER/kerberos.json    |   3 +-
 .../PERF/1.0/services/GRUMPY/kerberos.json      |  12 +-
 .../PERF/1.0/services/HAPPY/kerberos.json       |  12 +-
 .../PERF/1.0/services/KERBEROS/kerberos.json    |   3 +-
 .../PERF/1.0/services/SLEEPY/kerberos.json      |  12 +-
 .../stacks/PERF/1.0/services/SNOW/kerberos.json |  12 +-
 .../server/upgrade/UpgradeCatalog260Test.java   | 163 ++++++++------
 .../test_kerberos_descriptor_ranger_kms.json    |   1 +
 .../HDP/2.0.8/services/HDFS/kerberos.json       |  12 +-
 .../common-services/NIFI/1.0.0/kerberos.json    |   6 +-
 .../stacks/HDF/2.0/services/KAFKA/kerberos.json |   6 +-
 .../MICROSOFT_R_SERVER/8.0.5/kerberos.json      |   6 +-
 .../stacks/ODPi/2.0/services/HIVE/kerberos.json |  18 +-
 .../stacks/ODPi/2.0/services/YARN/kerberos.json |  30 ++-
 96 files changed, 1039 insertions(+), 468 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-funtest/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json b/ambari-funtest/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
index a555bb5..ecbdfe9 100644
--- a/ambari-funtest/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
+++ b/ambari-funtest/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "hdfs",
@@ -63,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
@@ -128,7 +131,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/AbstractKerberosDescriptorContainer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/AbstractKerberosDescriptorContainer.java b/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/AbstractKerberosDescriptorContainer.java
index 85d4f69..4255dd1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/AbstractKerberosDescriptorContainer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/AbstractKerberosDescriptorContainer.java
@@ -640,7 +640,7 @@ public abstract class AbstractKerberosDescriptorContainer extends AbstractKerber
    * @param path a String declaring the path to a KerberosIdentityDescriptor
    * @return a KerberosIdentityDescriptor identified by the path or null if not found
    */
-  protected KerberosIdentityDescriptor getReferencedIdentityDescriptor(String path)
+  public KerberosIdentityDescriptor getReferencedIdentityDescriptor(String path)
       throws AmbariException {
     KerberosIdentityDescriptor identityDescriptor = null;
 
@@ -855,12 +855,7 @@ public abstract class AbstractKerberosDescriptorContainer extends AbstractKerber
     if (identity != null) {
       KerberosIdentityDescriptor referencedIdentity;
       try {
-        if (identity.getReference() != null) {
-          referencedIdentity = getReferencedIdentityDescriptor(identity.getReference());
-        } else {
-          // For backwards compatibility, see if the identity's name indicates a reference...
-          referencedIdentity = getReferencedIdentityDescriptor(identity.getName());
-        }
+        referencedIdentity = getReferencedIdentityDescriptor(identity.getReference());
       } catch (AmbariException e) {
         throw new AmbariException(String.format("Invalid Kerberos identity reference: %s", identity.getReference()), e);
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptor.java
index a1d373b..0c7a9a9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/kerberos/KerberosDescriptor.java
@@ -456,7 +456,7 @@ public class KerberosDescriptor extends AbstractKerberosDescriptorContainer {
 
   private static void collectFromIdentities(String service, String component, Collection<KerberosIdentityDescriptor> identities, Map<String, String> result) {
     for (KerberosIdentityDescriptor each : identities) {
-      if (each.getPrincipalDescriptor() != null && !each.getReferencedServiceName().isPresent() && !each.getName().startsWith("/")) {
+      if (each.getPrincipalDescriptor() != null && !each.getReferencedServiceName().isPresent()) {
         String path = StringUtils.isBlank(component)
             ? String.format("%s/%s", service, each.getName())
             : String.format("%s/%s/%s", service, component, each.getName());

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
index c92b3dc..5003c13 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -6,9 +6,9 @@
  * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
+ *
+ *     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.
@@ -41,10 +41,13 @@ import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.kerberos.AbstractKerberosDescriptor;
+import org.apache.ambari.server.state.kerberos.AbstractKerberosDescriptorContainer;
 import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
 import org.apache.ambari.server.state.kerberos.KerberosIdentityDescriptor;
+import org.apache.ambari.server.state.kerberos.KerberosPrincipalDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -541,21 +544,9 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
       if (data != null) {
         final KerberosDescriptor kerberosDescriptor = new KerberosDescriptorFactory().createInstance(data);
         if (kerberosDescriptor != null) {
-          KerberosServiceDescriptor rangerKmsServiceDescriptor = kerberosDescriptor.getService("RANGER_KMS");
-          if (rangerKmsServiceDescriptor != null) {
+          fixRangerKMSKerberosDescriptor(kerberosDescriptor);
+          fixIdentityReferences(getCluster(artifactEntity), kerberosDescriptor);
 
-            KerberosIdentityDescriptor rangerKmsServiceIdentity = rangerKmsServiceDescriptor.getIdentity("/smokeuser");
-            if (rangerKmsServiceIdentity != null) {
-              rangerKmsServiceDescriptor.removeIdentity("/smokeuser");
-            }
-            KerberosComponentDescriptor rangerKmscomponentDescriptor = rangerKmsServiceDescriptor.getComponent("RANGER_KMS_SERVER");
-            if (rangerKmscomponentDescriptor != null) {
-              KerberosIdentityDescriptor rangerKmsComponentIdentity = rangerKmscomponentDescriptor.getIdentity("/smokeuser");
-              if (rangerKmsComponentIdentity != null) {
-                rangerKmscomponentDescriptor.removeIdentity("/smokeuser");
-              }
-            }
-          }
           artifactEntity.setArtifactData(kerberosDescriptor.toMap());
           artifactDAO.merge(artifactEntity);
         }
@@ -563,6 +554,24 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
     }
   }
 
+  protected void fixRangerKMSKerberosDescriptor(KerberosDescriptor kerberosDescriptor) {
+    KerberosServiceDescriptor rangerKmsServiceDescriptor = kerberosDescriptor.getService("RANGER_KMS");
+    if (rangerKmsServiceDescriptor != null) {
+
+      KerberosIdentityDescriptor rangerKmsServiceIdentity = rangerKmsServiceDescriptor.getIdentity("/smokeuser");
+      if (rangerKmsServiceIdentity != null) {
+        rangerKmsServiceDescriptor.removeIdentity("/smokeuser");
+      }
+      KerberosComponentDescriptor rangerKmscomponentDescriptor = rangerKmsServiceDescriptor.getComponent("RANGER_KMS_SERVER");
+      if (rangerKmscomponentDescriptor != null) {
+        KerberosIdentityDescriptor rangerKmsComponentIdentity = rangerKmscomponentDescriptor.getIdentity("/smokeuser");
+        if (rangerKmsComponentIdentity != null) {
+          rangerKmscomponentDescriptor.removeIdentity("/smokeuser");
+        }
+      }
+    }
+  }
+
   protected void updateAmsConfigs() throws AmbariException {
     AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
     Clusters clusters = ambariManagementController.getClusters();
@@ -602,6 +611,181 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
   }
 
   /**
+   * Retrieves the relevant {@link Cluster} given information from the suppliied {@link ArtifactEntity}.
+   * <p>
+   * The cluster id value is taken from the entity's foreign key value and then used to obtain the cluster object.
+   *
+   * @param artifactEntity an {@link ArtifactEntity}
+   * @return a {@link Cluster}
+   */
+  private Cluster getCluster(ArtifactEntity artifactEntity) {
+    if (artifactEntity != null) {
+      Map<String, String> keys = artifactEntity.getForeignKeys();
+      if (keys != null) {
+        String clusterId = keys.get("cluster");
+        if (StringUtils.isNumeric(clusterId)) {
+          Clusters clusters = injector.getInstance(Clusters.class);
+          try {
+            return clusters.getCluster(Long.valueOf(clusterId));
+          } catch (AmbariException e) {
+            LOG.error(String.format("Failed to obtain cluster using cluster id %s -  %s", clusterId, e.getMessage()), e);
+          }
+        } else {
+          LOG.error(String.format("Failed to obtain cluster id from artifact entity with foreign keys: %s", keys));
+        }
+      }
+    }
+
+    return null;
+  }
+
+  /**
+   * Recursively traverses the Kerberos descriptor to find and fix the identity references.
+   * <p>
+   * Each found identity descriptor that indicates it is a reference by having a <code>name</code>
+   * value that starts with a "/" or a "./" is fixed by clearing the <code>principal name</code>value,
+   * setting the <code>reference</code> value to the <code>name</code> value and changing the
+   * <code>name</code> value to a name with the following pattern:
+   * <code>SERVICE_COMPONENT_IDENTITY</code>
+   * <p>
+   * For example, if the identity is for the "SERVICE1" service and is a reference to "HDFS/NAMENODE/hdfs";
+   * then the name is set to "<code>service1_hdfs</code>"
+   * <p>
+   * For example, if the identity is for the "COMPONENT21" component of the "SERVICE2" service and is a reference to "HDFS/NAMENODE/hdfs";
+   * then the name is set to "<code>service2_component21_hdfs</code>"
+   * <p>
+   * Once the identity descriptor properties of the identity are fixed, the relevant configuration
+   * value is fixed to match the value if the referenced identity. This may lead to a new version
+   * of the relevant configuration type.
+   *
+   * @param cluster   the cluster
+   * @param container the current Kerberos descriptor container
+   * @throws AmbariException if an error occurs
+   */
+  private void fixIdentityReferences(Cluster cluster, AbstractKerberosDescriptorContainer container)
+      throws AmbariException {
+    List<KerberosIdentityDescriptor> identities = container.getIdentities();
+    if (identities != null) {
+      for (KerberosIdentityDescriptor identity : identities) {
+        String name = identity.getName();
+
+        if (!StringUtils.isEmpty(name) && (name.startsWith("/") || name.startsWith("./"))) {
+          String[] parts = name.split("/");
+          String newName = buildName(identity.getParent(), parts[parts.length - 1]);
+
+          identity.setName(newName);
+          identity.setReference(name);
+        }
+
+        String identityReference = identity.getReference();
+        if (!StringUtils.isEmpty(identityReference)) {
+          // If this identity references another identity:
+          //  * The principal name needs to be the same as the referenced identity
+          //    - ensure that no principal name is being set for this identity
+          //  * Any configuration set to contain the reference principal name needs to be fixed to
+          //    be the correct principal name
+          KerberosPrincipalDescriptor principal = identity.getPrincipalDescriptor();
+          if (principal != null) {
+            // Fix the value
+            principal.setValue(null);
+
+            // Fix the relative configuration
+            if (!StringUtils.isEmpty(principal.getConfiguration())) {
+              String referencedPrincipalName = getConfiguredPrincipalNameFromReference(cluster, container, identityReference);
+
+              if(!StringUtils.isEmpty(referencedPrincipalName)) {
+                String[] parts = principal.getConfiguration().split("/");
+                if (parts.length == 2) {
+                  String type = parts[0];
+                  String property = parts[1];
+
+                  updateConfigurationPropertiesForCluster(cluster,
+                      type,
+                      Collections.singletonMap(property, referencedPrincipalName),
+                      true,
+                      false);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    if (container instanceof KerberosDescriptor) {
+      Map<String, KerberosServiceDescriptor> services = ((KerberosDescriptor) container).getServices();
+      if (services != null) {
+        for (KerberosServiceDescriptor serviceDescriptor : services.values()) {
+          fixIdentityReferences(cluster, serviceDescriptor);
+        }
+      }
+    } else if (container instanceof KerberosServiceDescriptor) {
+      Map<String, KerberosComponentDescriptor> components = ((KerberosServiceDescriptor) container).getComponents();
+      if (components != null) {
+        for (KerberosComponentDescriptor componentDescriptor : components.values()) {
+          fixIdentityReferences(cluster, componentDescriptor);
+        }
+      }
+    }
+  }
+
+  /**
+   * Finds the value of the configuration found for the principal in the referenced identity
+   * descriptor.
+   *
+   * @param cluster           the cluster
+   * @param container         the current {@link KerberosIdentityDescriptor}, ideally the identity's parent descriptor
+   * @param identityReference the path to the referenced identity
+   * @return the value of the configuration specified in the referenced identity's principal descriptor
+   * @throws AmbariException if an error occurs
+   */
+  private String getConfiguredPrincipalNameFromReference(Cluster cluster,
+                                                         AbstractKerberosDescriptorContainer container,
+                                                         String identityReference)
+      throws AmbariException {
+    KerberosIdentityDescriptor identityDescriptor = container.getReferencedIdentityDescriptor(identityReference);
+
+    if (identityDescriptor != null) {
+      KerberosPrincipalDescriptor principal = identityDescriptor.getPrincipalDescriptor();
+      if ((principal != null) && (!StringUtils.isEmpty(principal.getConfiguration()))) {
+        String[] parts = principal.getConfiguration().split("/");
+        if (parts.length == 2) {
+          String type = parts[0];
+          String property = parts[1];
+
+          Config config = cluster.getDesiredConfigByType(type);
+
+          if (config != null) {
+            return config.getProperties().get(property);
+          }
+        }
+      }
+    }
+
+    return null;
+  }
+
+  /**
+   * Builds the name of an identity based on the identity's container and the referenced identity's name.
+   * <p>
+   * The calculated name will be in the following format and converted to all lowercase characters:
+   * <code>SERVICE_COMPONENT_IDENTITY</code>
+   *
+   * @param container    the current {@link KerberosIdentityDescriptor}, ideally the identity's parent descriptor
+   * @param identityName the referenced identity's name
+   * @return a name
+   */
+  private String buildName(AbstractKerberosDescriptor container, String identityName) {
+    if (container instanceof KerberosServiceDescriptor) {
+      return container.getName().toLowerCase() + "_" + identityName;
+    } else if (container instanceof KerberosComponentDescriptor) {
+      return container.getParent().getName().toLowerCase() + "_" + container.getName().toLowerCase() + "_" + identityName;
+    } else {
+      return identityName;
+    }
+  }
+
+  /**
    * Sets all existing repository versions to be resolved (we have to assume
    * that they are good since they've been using them to run stuff).
    *

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/kerberos.json
index 7e3f449..ed9c0fb 100644
--- a/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ACCUMULO/1.6.1.2.2.0/kerberos.json
@@ -47,7 +47,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "accumulo_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -55,7 +56,8 @@
           "name": "ACCUMULO_MASTER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "accumulo_accumulo_master_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/kerberos.json b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/kerberos.json
index 94b1b14..46183ee 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "AMBARI_INFRA",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "ambari_infra_smokeuser",
+          "reference": "/smokeuser"
         },
         {
-          "name": "/spnego",
+          "name": "ambari_infra_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "infra-solr-env/infra_solr_web_kerberos_principal"
           },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/kerberos.json b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/kerberos.json
index a6afda5..675de45 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "AMBARI_METRICS",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "ambari_metrics_spnego",
+          "reference": "/spnego"
         }
       ],
       "components": [
@@ -38,7 +39,8 @@
           "name": "METRICS_COLLECTOR",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs",
+              "name": "ambari_metrics_metrics_collector_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs",
               "when" : {
                 "contains" : ["services", "HDFS"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ATLAS/0.1.0.2.3/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ATLAS/0.1.0.2.3/kerberos.json b/ambari-server/src/main/resources/common-services/ATLAS/0.1.0.2.3/kerberos.json
index 4fe4d32..3246a83 100644
--- a/ambari-server/src/main/resources/common-services/ATLAS/0.1.0.2.3/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ATLAS/0.1.0.2.3/kerberos.json
@@ -40,7 +40,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "atlas_atlas_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "application-properties/atlas.http.authentication.kerberos.principal"
@@ -50,7 +51,8 @@
               }
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
+              "name": "atlas_atlas_server_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
               "when" : {
                 "contains" : ["services", "AMBARI_INFRA"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.2.5/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.2.5/kerberos.json b/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.2.5/kerberos.json
index e136bcf..22dba86 100644
--- a/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.2.5/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.2.5/kerberos.json
@@ -66,7 +66,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "atlas_atlas_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "application-properties/atlas.authentication.method.kerberos.principal"
@@ -86,10 +87,12 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker"
+              "name": "atlas_atlas_server_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker"
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
+              "name": "atlas_atlas_server_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
               "when" : {
                 "contains" : ["services", "AMBARI_INFRA"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.3.0/kerberos.json
index 7d10ccc..6600534 100644
--- a/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ATLAS/0.7.0.3.0/kerberos.json
@@ -67,7 +67,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "atlas_atlas_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "application-properties/atlas.authentication.method.kerberos.principal"
@@ -87,10 +88,12 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker"
+              "name": "atlas_atlas_server_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker"
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr"
+              "name": "atlas_atlas_server_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/kerberos.json b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/kerberos.json
index 08af720..902d9ae 100644
--- a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/kerberos.json
@@ -4,10 +4,12 @@
       "name": "FALCON",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "falcon_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "falcon_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -27,7 +29,8 @@
           "name": "FALCON_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "falcon_falcon_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "falcon_server",
@@ -51,7 +54,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "falcon_falcon_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "falcon-startup.properties/*.falcon.http.authentication.kerberos.principal"

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/kerberos.json b/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/kerberos.json
index 4ed6b78..0a0fb99 100644
--- a/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HAWQ/2.0.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HAWQ",
       "identities": [
         {
-          "name": "/HDFS/NAMENODE/hdfs"
+          "name": "hawq_hdfs",
+          "reference": "/HDFS/NAMENODE/hdfs"
         },
         {
           "name": "hawq_identity",
@@ -53,7 +54,8 @@
           "name": "HAWQMASTER",
           "identities": [
             {
-              "name": "/HAWQ/hawq_identity"
+              "name": "hawq_hawqmaster_hawq_identity",
+              "reference": "/HAWQ/hawq_identity"
             }
           ]
         },
@@ -61,7 +63,8 @@
           "name": "HAWQSTANDBY",
           "identities": [
             {
-              "name": "/HAWQ/hawq_identity"
+              "name": "hawq_hawqstandby_hawq_identity",
+              "reference": "/HAWQ/hawq_identity"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/kerberos.json
index 63e9298..7988801 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HBASE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hbase_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "hbase",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hbase_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -49,7 +51,8 @@
           "name": "HBASE_MASTER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hbase_hbase_master_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hbase_master_hbase",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HBASE/2.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/2.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/HBASE/2.0.0.3.0/kerberos.json
index 011921b..0b06003 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/2.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HBASE/2.0.0.3.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HBASE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hbase_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "hbase",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hbase_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -60,7 +62,8 @@
           "name": "HBASE_MASTER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hbase_hbase_master_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hbase_master_hbase",
@@ -84,7 +87,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hbase_hbase_master_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },
@@ -129,7 +133,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hbase_hbase_regionserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
index 1cf1603..1cce2cc 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -33,7 +35,8 @@
           "name":  "HDFS_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hdfs_hdfs_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -83,7 +86,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
@@ -156,7 +160,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }
@@ -214,7 +219,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_journalnode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.journalnode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/kerberos.json
index b5acf92..f8bdc5c 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -44,7 +46,8 @@
           "name":  "HDFS_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hdfs_hdfs_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -94,13 +97,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
             },
             {
-              "name": "/HDFS/NAMENODE/namenode_nn",
+              "name": "hdfs_namenode_namenode_nn",
+              "reference": "/HDFS/NAMENODE/namenode_nn",
               "principal": {
                 "configuration": "ranger-hdfs-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -176,7 +181,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }
@@ -234,7 +240,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_journalnode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.journalnode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/kerberos.json
index c34026a..e25fa03 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "HIVE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hive_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "hive_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -49,7 +51,8 @@
           "name": "HIVE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hive_hive_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hive_server_hive",
@@ -73,7 +76,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hive_hive_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hive-site/hive.server2.authentication.spnego.principal"
               },
@@ -87,7 +91,8 @@
           "name": "WEBHCAT_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "hive_webhcat_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "webhcat-site/templeton.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/HIVE/2.1.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/2.1.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/HIVE/2.1.0.3.0/kerberos.json
index af1130d..5650498 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/2.1.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HIVE/2.1.0.3.0/kerberos.json
@@ -4,10 +4,12 @@
             "name": "HIVE",
             "identities": [
                 {
-                    "name": "/spnego"
+                    "name": "hive_spnego",
+                    "reference": "/spnego"
                 },
                 {
-                    "name": "/smokeuser"
+                    "name": "hive_smokeuser",
+                    "reference": "/smokeuser"
                 }
             ],
             "configurations": [
@@ -33,7 +35,8 @@
                     "name": "HIVE_METASTORE",
                     "identities": [
                         {
-                            "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+                            "name": "hive_hive_metastore_hive_server_hive",
+                            "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
                             "principal": {
                                 "configuration": "hive-site/hive.metastore.kerberos.principal"
                             },
@@ -47,7 +50,8 @@
                     "name": "HIVE_SERVER",
                     "identities": [
                         {
-                            "name": "/HDFS/NAMENODE/hdfs"
+                            "name": "hive_hive_server_hdfs",
+                            "reference": "/HDFS/NAMENODE/hdfs"
                         },
                         {
                             "name": "hive_server_hive",
@@ -81,7 +85,8 @@
                             }
                         },
                         {
-                            "name": "/spnego",
+                            "name": "hive_hive_server_spnego",
+                            "reference": "/spnego",
                             "principal": {
                                 "configuration": "hive-site/hive.server2.authentication.spnego.principal"
                             },
@@ -105,16 +110,20 @@
                     "name": "HIVE_SERVER_INTERACTIVE",
                     "identities": [
                         {
-                            "name": "/HDFS/NAMENODE/hdfs"
+                            "name": "hive_hive_server_interactive_hdfs",
+                            "reference": "/HDFS/NAMENODE/hdfs"
                         },
                         {
-                            "name": "/HIVE/HIVE_SERVER/hive_server_hive"
+                            "name": "hive_hive_server_interactive_hive_server_hive",
+                            "reference": "/HIVE/HIVE_SERVER/hive_server_hive"
                         },
                         {
-                            "name": "/HIVE/HIVE_SERVER/spnego"
+                            "name": "hive_hive_server_interactive_spnego",
+                            "reference": "/HIVE/HIVE_SERVER/spnego"
                         },
                         {
-                            "name": "/YARN/NODEMANAGER/llap_zk_hive"
+                            "name": "hive_hive_server_interactive_llap_zk_hive",
+                            "reference": "/YARN/NODEMANAGER/llap_zk_hive"
                         }
                     ]
                 },
@@ -122,7 +131,8 @@
                     "name": "WEBHCAT_SERVER",
                     "identities": [
                         {
-                            "name": "/spnego",
+                            "name": "hive_webhcat_server_spnego",
+                            "reference": "/spnego",
                             "principal": {
                                 "configuration": "webhcat-site/templeton.kerberos.principal"
                             },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/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 b4d0018..2f8d20c 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
@@ -4,7 +4,8 @@
       "name": "KAFKA",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kafka_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -57,7 +58,8 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker",
+              "name": "kafka_kafka_broker_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker",
               "principal": {
                 "configuration": "ranger-kafka-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -66,7 +68,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs",
+              "name": "kafka_kafka_broker_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs",
               "when" : {
                 "contains" : ["services", "HDFS"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/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 b4d0018..2f8d20c 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
@@ -4,7 +4,8 @@
       "name": "KAFKA",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kafka_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -57,7 +58,8 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker",
+              "name": "kafka_kafka_broker_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker",
               "principal": {
                 "configuration": "ranger-kafka-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -66,7 +68,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs",
+              "name": "kafka_kafka_broker_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs",
               "when" : {
                 "contains" : ["services", "HDFS"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/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 247a602..7f33abe 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
@@ -4,7 +4,8 @@
       "name": "KAFKA",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kafka_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -47,7 +48,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs",
+              "name": "kafka_kafka_broker_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs",
               "when" : {
                 "contains" : ["services", "HDFS"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/kerberos.json b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/kerberos.json
index 6ab7610..e5860cf 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/kerberos.json
@@ -4,7 +4,8 @@
       "name": "KERBEROS",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kerberos_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-30/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-30/kerberos.json b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-30/kerberos.json
index 6ab7610..e5860cf 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-30/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-30/kerberos.json
@@ -4,7 +4,8 @@
       "name": "KERBEROS",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kerberos_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/KNOX/0.5.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.3.0/kerberos.json
index 2d8aa0d..c205d7d 100644
--- a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.3.0/kerberos.json
@@ -29,7 +29,8 @@
               }
             },
             {
-              "name": "/KNOX/KNOX_GATEWAY/knox_principal",
+              "name": "knox_knox_gateway_knox_principal",
+              "reference": "/KNOX/KNOX_GATEWAY/knox_principal",
               "principal": {
                 "configuration": "ranger-knox-audit/xasecure.audit.jaas.Client.option.principal"                
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/kerberos.json b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/kerberos.json
index 9e0f12d..e4be47f 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "LOGSEARCH",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "logsearch_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -32,7 +33,8 @@
               }
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
+              "name": "logsearch_logsearch_server_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
               "when" : {
                 "contains" : ["services", "AMBARI_INFRA"]
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/kerberos.json b/ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/kerberos.json
index 1f87a6c..bcbc129 100644
--- a/ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/kerberos.json
@@ -4,7 +4,8 @@
     "name": "MAHOUT",
     "identities": [
       {
-        "name": "/smokeuser"
+        "name": "mahout_smokeuser",
+        "reference": "/smokeuser"
       }
     ],
     "components": [
@@ -12,7 +13,8 @@
         "name": "MAHOUT",
         "identities": [
           {
-            "name": "/HDFS/NAMENODE/hdfs"
+            "name": "mahout_mahout_hdfs",
+            "reference": "/HDFS/NAMENODE/hdfs"
           }
         ]
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/kerberos.json
index b3f932b..e9419bb 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "OOZIE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "oozie_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "oozie_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -28,7 +30,8 @@
           "name": "OOZIE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "oozie_oozie_server_hdfs",
+              "reference" : "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "oozie_server",
@@ -52,7 +55,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "oozie_oozie_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "oozie-site/oozie.authentication.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/kerberos.json b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/kerberos.json
index d2e2ab8..a322358 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/kerberos.json
@@ -4,10 +4,12 @@
       "name": "OOZIE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "oozie_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "oozie_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -29,7 +31,8 @@
           "name": "OOZIE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "oozie_oozie_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "oozie_server",
@@ -53,7 +56,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "oozie_oozie_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "oozie-site/oozie.authentication.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/kerberos.json
index f1092f5..ca21770 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "OOZIE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "oozie_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "oozie_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -30,7 +32,8 @@
           "name": "OOZIE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "oozie_oozie_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "oozie_server",
@@ -54,7 +57,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "oozie_oozie_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "oozie-site/oozie.authentication.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/kerberos.json
index 22dd6cb..4599396 100644
--- a/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/kerberos.json
@@ -7,7 +7,8 @@
           "name": "PIG",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "pig_pig_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/PIG/0.16.1.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PIG/0.16.1.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/PIG/0.16.1.3.0/kerberos.json
index 22dd6cb..4599396 100644
--- a/ambari-server/src/main/resources/common-services/PIG/0.16.1.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/PIG/0.16.1.3.0/kerberos.json
@@ -7,7 +7,8 @@
           "name": "PIG",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "pig_pig_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/RANGER/0.6.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.6.0/kerberos.json b/ambari-server/src/main/resources/common-services/RANGER/0.6.0/kerberos.json
index 1fc8acf..9d86bb4 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.6.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.6.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "RANGER",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "ranger_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "ranger_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -59,13 +61,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "ranger_ranger_admin_spnego",
+              "reference": "/spnego",
               "keytab": {
                 "configuration": "ranger-admin-site/ranger.spnego.kerberos.keytab"
               }
             },
             {
-              "name": "/RANGER/RANGER_ADMIN/rangeradmin",
+              "name": "ranger_ranger_admin_rangeradmin",
+              "reference": "/RANGER/RANGER_ADMIN/rangeradmin",
               "principal": {
                 "configuration": "ranger-admin-site/xasecure.audit.jaas.Client.option.principal"
               },
@@ -74,7 +78,8 @@
               }
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
+              "name": "ranger_ranger_admin_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
               "when" : {
                 "contains" : ["services", "AMBARI_INFRA"]
               }
@@ -124,7 +129,8 @@
               }
             },
             {
-              "name": "/RANGER/RANGER_TAGSYNC/rangertagsync",
+              "name": "ranger_ranger_tagsync_rangertagsync",
+              "reference": "/RANGER/RANGER_TAGSYNC/rangertagsync",
               "principal": {
                 "configuration": "tagsync-application-properties/atlas.jaas.KafkaClient.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/kerberos.json
index 1fc8acf..9d86bb4 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "RANGER",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "ranger_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "ranger_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -59,13 +61,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "ranger_ranger_admin_spnego",
+              "reference": "/spnego",
               "keytab": {
                 "configuration": "ranger-admin-site/ranger.spnego.kerberos.keytab"
               }
             },
             {
-              "name": "/RANGER/RANGER_ADMIN/rangeradmin",
+              "name": "ranger_ranger_admin_rangeradmin",
+              "reference": "/RANGER/RANGER_ADMIN/rangeradmin",
               "principal": {
                 "configuration": "ranger-admin-site/xasecure.audit.jaas.Client.option.principal"
               },
@@ -74,7 +78,8 @@
               }
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
+              "name": "ranger_ranger_admin_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr",
               "when" : {
                 "contains" : ["services", "AMBARI_INFRA"]
               }
@@ -124,7 +129,8 @@
               }
             },
             {
-              "name": "/RANGER/RANGER_TAGSYNC/rangertagsync",
+              "name": "ranger_ranger_tagsync_rangertagsync",
+              "reference": "/RANGER/RANGER_TAGSYNC/rangertagsync",
               "principal": {
                 "configuration": "tagsync-application-properties/atlas.jaas.KafkaClient.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/kerberos.json b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/kerberos.json
index 208a04d..9ff5277 100644
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/kerberos.json
@@ -4,7 +4,8 @@
       "name": "RANGER_KMS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "ranger_kms_spnego",
+          "reference": "/spnego",
           "keytab": {
             "configuration": "kms-site/hadoop.kms.authentication.kerberos.keytab"
           }
@@ -23,7 +24,8 @@
           "name": "RANGER_KMS_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "ranger_kms_ranger_kms_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "kms-site/hadoop.kms.authentication.signer.secret.provider.zookeeper.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/RANGER_KMS/1.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/1.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/RANGER_KMS/1.0.0.3.0/kerberos.json
index 8bf4cd8..1ef4568 100644
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/1.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/1.0.0.3.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "RANGER_KMS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "ranger_kms_spnego",
+          "reference": "/spnego",
           "keytab": {
             "configuration": "kms-site/hadoop.kms.authentication.kerberos.keytab"
           }
@@ -36,7 +37,8 @@
           "name": "RANGER_KMS_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "ranger_kms_ranger_kms_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "kms-site/hadoop.kms.authentication.signer.secret.provider.zookeeper.kerberos.principal"
               },
@@ -62,7 +64,8 @@
               }
             },
             {
-              "name": "/RANGER_KMS/RANGER_KMS_SERVER/rangerkms",
+              "name": "ranger_kms_ranger_kms_server_rangerkms",
+              "reference": "/RANGER_KMS/RANGER_KMS_SERVER/rangerkms",
               "principal": {
                 "configuration": "ranger-kms-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/kerberos.json b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/kerberos.json
index 0ebeb7d..8f07b42 100644
--- a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/kerberos.json
@@ -7,7 +7,8 @@
           "name": "SLIDER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "slider_slider_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SLIDER/0.91.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SLIDER/0.91.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/SLIDER/0.91.0.3.0/kerberos.json
index 0ebeb7d..8f07b42 100644
--- a/ambari-server/src/main/resources/common-services/SLIDER/0.91.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SLIDER/0.91.0.3.0/kerberos.json
@@ -7,7 +7,8 @@
           "name": "SLIDER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "slider_slider_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SPARK/1.2.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SPARK/1.2.1/kerberos.json b/ambari-server/src/main/resources/common-services/SPARK/1.2.1/kerberos.json
index 96df126..166adbd 100644
--- a/ambari-server/src/main/resources/common-services/SPARK/1.2.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SPARK/1.2.1/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "sparkuser",
@@ -40,7 +41,8 @@
           "name": "SPARK_JOBHISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_spark_jobhistoryserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SPARK/1.4.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SPARK/1.4.1/kerberos.json b/ambari-server/src/main/resources/common-services/SPARK/1.4.1/kerberos.json
index fb43657..f2dd9e7 100644
--- a/ambari-server/src/main/resources/common-services/SPARK/1.4.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SPARK/1.4.1/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "sparkuser",
@@ -46,7 +47,8 @@
           "name": "SPARK_JOBHISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_spark_jobhistoryserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -57,10 +59,12 @@
           "name": "SPARK_THRIFTSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_spark_thriftserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive"
+              "name": "spark_spark_thriftserver_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SPARK/2.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SPARK/2.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/SPARK/2.2.0/kerberos.json
index 9912af1..bf763de 100644
--- a/ambari-server/src/main/resources/common-services/SPARK/2.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SPARK/2.2.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "sparkuser",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/SPARK2/2.0.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SPARK2/2.0.0/kerberos.json b/ambari-server/src/main/resources/common-services/SPARK2/2.0.0/kerberos.json
index a787d33..95d735b 100755
--- a/ambari-server/src/main/resources/common-services/SPARK2/2.0.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/SPARK2/2.0.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK2",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark2_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "spark2user",
@@ -46,7 +47,8 @@
           "name": "SPARK2_JOBHISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark2_spark2_jobhistoryserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -57,10 +59,12 @@
           "name": "SPARK2_THRIFTSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark2_spark2_thriftserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive"
+              "name": "spark2_spark2_thriftserver_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/STORM/0.9.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1/kerberos.json b/ambari-server/src/main/resources/common-services/STORM/0.9.1/kerberos.json
index 692b557..592e4cf 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1/kerberos.json
@@ -4,10 +4,12 @@
       "name": "STORM",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "storm_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "storm_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "storm_components",
@@ -51,7 +53,8 @@
           "name": "STORM_UI_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "storm_storm_ui_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "storm-env/storm_ui_principal_name"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/kerberos.json
index a034411..8964c26 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "STORM",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "storm_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "storm_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "storm_components",
@@ -30,7 +32,8 @@
           }
         },
         {
-          "name": "/STORM/storm_components",
+          "name": "storm_storm_components",
+          "reference": "/STORM/storm_components",
           "principal": {
             "configuration": "storm-atlas-application.properties/atlas.jaas.KafkaClient.option.principal"
           },
@@ -72,7 +75,8 @@
           "name": "STORM_UI_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "storm_storm_ui_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "storm-env/storm_ui_principal_name"
               },
@@ -106,7 +110,8 @@
               }
             },
             {
-              "name": "/STORM/storm_components",
+              "name": "storm_nimbus_storm_components",
+              "reference": "/STORM/storm_components",
               "principal": {
                 "configuration": "ranger-storm-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/STORM/1.0.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.0.1/kerberos.json b/ambari-server/src/main/resources/common-services/STORM/1.0.1/kerberos.json
index a034411..f885500 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.0.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/STORM/1.0.1/kerberos.json
@@ -4,10 +4,12 @@
       "name": "STORM",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "storm_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "storm_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "storm_components",
@@ -30,7 +32,8 @@
           }
         },
         {
-          "name": "/STORM/storm_components",
+          "name": "storm_storm_components",
+          "reference": "/STORM/storm_components",
           "principal": {
             "configuration": "storm-atlas-application.properties/atlas.jaas.KafkaClient.option.principal"
           },
@@ -72,7 +75,8 @@
           "name": "STORM_UI_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "storm_storm_ui_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "storm-env/storm_ui_principal_name"
               },
@@ -106,7 +110,8 @@
               }
             },
             {
-              "name": "/STORM/storm_components",
+              "name": "storm_numbus_storm_components",
+              "reference": "/STORM/storm_components",
               "principal": {
                 "configuration": "ranger-storm-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/STORM/1.1.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.1.0/kerberos.json b/ambari-server/src/main/resources/common-services/STORM/1.1.0/kerberos.json
index a034411..f885500 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.1.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/STORM/1.1.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "STORM",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "storm_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "storm_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "storm_components",
@@ -30,7 +32,8 @@
           }
         },
         {
-          "name": "/STORM/storm_components",
+          "name": "storm_storm_components",
+          "reference": "/STORM/storm_components",
           "principal": {
             "configuration": "storm-atlas-application.properties/atlas.jaas.KafkaClient.option.principal"
           },
@@ -72,7 +75,8 @@
           "name": "STORM_UI_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "storm_storm_ui_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "storm-env/storm_ui_principal_name"
               },
@@ -106,7 +110,8 @@
               }
             },
             {
-              "name": "/STORM/storm_components",
+              "name": "storm_numbus_storm_components",
+              "reference": "/STORM/storm_components",
               "principal": {
                 "configuration": "ranger-storm-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/kerberos.json b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/kerberos.json
index 65dcd33..2a14a65 100644
--- a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/kerberos.json
@@ -7,7 +7,8 @@
           "name": "TEZ_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "tez_tez_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/TEZ/0.9.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/TEZ/0.9.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/TEZ/0.9.0.3.0/kerberos.json
index 00c8ac5..6be8292 100644
--- a/ambari-server/src/main/resources/common-services/TEZ/0.9.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/TEZ/0.9.0.3.0/kerberos.json
@@ -7,7 +7,8 @@
                     "name": "TEZ_CLIENT",
                     "identities": [
                         {
-                            "name": "/HDFS/NAMENODE/hdfs"
+                            "name": "tez_tez_client_hdfs",
+                            "reference": "/HDFS/NAMENODE/hdfs"
                         }
                     ],
                     "configurations": [


[23/50] [abbrv] ambari git commit: AMBARI-22021.Livy not working with the default configuration(Prabhjyot Singh via Venkata Sairam)

Posted by jl...@apache.org.
AMBARI-22021.Livy not working with the default configuration(Prabhjyot Singh via Venkata Sairam)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: d221ab786277abf6d8e9e8dbc9442e37423484a4
Parents: 5d5f974
Author: Venkata Sairam <ve...@gmail.com>
Authored: Fri Sep 22 12:46:55 2017 +0530
Committer: Venkata Sairam <ve...@gmail.com>
Committed: Fri Sep 22 12:46:55 2017 +0530

----------------------------------------------------------------------
 .../0.7.0/package/scripts/interpreter_json_template.py        | 7 ++++++-
 .../ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py   | 7 ++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d221ab78/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/interpreter_json_template.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/interpreter_json_template.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/interpreter_json_template.py
index 6a98919..d5a70a7 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/interpreter_json_template.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/interpreter_json_template.py
@@ -182,7 +182,7 @@ template = '''
         "zeppelin.livy.concurrentSQL": "false",
         "zeppelin.livy.spark.sql.field.truncate": "true",
         "livy.spark.executor.cores": "",
-        "zeppelin.livy.displayAppInfo": "false",
+        "zeppelin.livy.displayAppInfo": "true",
         "zeppelin.livy.url": "http://localhost:8998",
         "livy.spark.dynamicAllocation.minExecutors": "",
         "livy.spark.driver.cores": "",
@@ -240,6 +240,11 @@ template = '''
             "language": "r",
             "editOnDblClick": false
           }
+        },
+        {
+          "name": "shared",
+          "class": "org.apache.zeppelin.livy.LivySharedInterpreter",
+          "defaultInterpreter": false
         }
       ],
       "dependencies": [],

http://git-wip-us.apache.org/repos/asf/ambari/blob/d221ab78/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py
index 71d3817..c9030bd 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/livy2_config_template.py
@@ -34,7 +34,7 @@ template = '''
     "livy.spark.dynamicAllocation.initialExecutors": "",
     "zeppelin.livy.session.create_timeout": "120",
     "livy.spark.driver.memory": "",
-    "zeppelin.livy.displayAppInfo": "false",
+    "zeppelin.livy.displayAppInfo": "true",
     "livy.spark.jars.packages": "",
     "livy.spark.dynamicAllocation.maxExecutors": "",
     "zeppelin.livy.concurrentSQL": "false",
@@ -90,6 +90,11 @@ template = '''
       },
       "name": "sparkr",
       "defaultInterpreter": false
+    },
+    {
+      "name": "shared",
+      "class": "org.apache.zeppelin.livy.LivySharedInterpreter",
+      "defaultInterpreter": false
     }
   ],
   "dependencies": [],


[21/50] [abbrv] ambari git commit: AMBARI-22025. Service auto start broken due to incomplete execution command

Posted by jl...@apache.org.
AMBARI-22025. Service auto start broken due to incomplete execution command


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 7c687bbc226b19f85a6f6f292537760e5d6d8048
Parents: f9c0c90
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Thu Sep 21 16:24:04 2017 +0200
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Thu Sep 21 23:22:19 2017 +0200

----------------------------------------------------------------------
 .../actionmanager/ExecutionCommandWrapper.java  | 122 ++++++++++---------
 .../AmbariManagementControllerImpl.java         |   8 +-
 .../server/agent/TestHeartbeatMonitor.java      |  20 ++-
 3 files changed, 87 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7c687bbc/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 5f9300a..47aa093 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
@@ -19,6 +19,7 @@ package org.apache.ambari.server.actionmanager;
 
 import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER;
 import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -30,7 +31,6 @@ import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
 import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
@@ -206,89 +206,93 @@ public class ExecutionCommandWrapper {
         }
       }
 
-      // 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();
-          }
+      setVersions(cluster);
+
+      // provide some basic information about a cluster upgrade if there is one
+      // in progress
+      UpgradeEntity upgrade = cluster.getUpgradeInProgress();
+      if (null != upgrade) {
+        UpgradeContext upgradeContext = upgradeContextFactory.create(cluster, upgrade);
+        UpgradeSummary upgradeSummary = upgradeContext.getUpgradeSummary();
+        executionCommand.setUpgradeSummary(upgradeSummary);
+      }
+
+    } 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
+      LOG.warn(
+          "Unable to lookup the cluster by ID; assuming that there is no cluster and therefore no configs for this execution command: {}",
+          cnfe.getMessage());
+
+      return executionCommand;
+    } catch (AmbariException e) {
+      throw new RuntimeException(e);
+    }
+
+    return executionCommand;
+  }
+
+  public void setVersions(Cluster cluster) {
+    // set the repository version for the component this command is for -
+    // always use the current desired version
+    String serviceName = executionCommand.getServiceName();
+    try {
+      RepositoryVersionEntity repositoryVersion = null;
+      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());
-
+            ServiceComponent serviceComponent = service.getServiceComponent(componentName);
             if (null != serviceComponent) {
               repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
             }
           }
         }
+      }
 
-        Map<String, String> commandParams = executionCommand.getCommandParams();
+      Map<String, String> commandParams = executionCommand.getCommandParams();
 
-        if (null != repositoryVersion) {
-          // only set the version if it's not set and this is NOT an install
-          // command
-          if (!commandParams.containsKey(KeyNames.VERSION)
-              && executionCommand.getRoleCommand() != RoleCommand.INSTALL) {
-            commandParams.put(KeyNames.VERSION, repositoryVersion.getVersion());
-          }
+      if (null != repositoryVersion) {
+        // only set the version if it's not set and this is NOT an install
+        // command
+        if (!commandParams.containsKey(VERSION)
+          && executionCommand.getRoleCommand() != RoleCommand.INSTALL) {
+          commandParams.put(VERSION, repositoryVersion.getVersion());
+        }
 
-          StackId stackId = repositoryVersion.getStackId();
-          StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(),
-              stackId.getStackVersion());
+        StackId stackId = repositoryVersion.getStackId();
+        StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(),
+          stackId.getStackVersion());
 
-          if (!commandParams.containsKey(HOOKS_FOLDER)) {
-            commandParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder());
-          }
+        if (!commandParams.containsKey(HOOKS_FOLDER)) {
+          commandParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder());
+        }
 
-          if (!commandParams.containsKey(SERVICE_PACKAGE_FOLDER)) {
-            if (!StringUtils.isEmpty(serviceName)) {
-              ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
-                  stackId.getStackVersion(), serviceName);
+        if (!commandParams.containsKey(SERVICE_PACKAGE_FOLDER)) {
+          if (!StringUtils.isEmpty(serviceName)) {
+            ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(),
+              stackId.getStackVersion(), serviceName);
 
-              commandParams.put(SERVICE_PACKAGE_FOLDER, serviceInfo.getServicePackageFolder());
-            }
+            commandParams.put(SERVICE_PACKAGE_FOLDER, serviceInfo.getServicePackageFolder());
           }
         }
-      } 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);
-
-      // provide some basic information about a cluster upgrade if there is one
-      // in progress
-      UpgradeEntity upgrade = cluster.getUpgradeInProgress();
-      if (null != upgrade) {
-        UpgradeContext upgradeContext = upgradeContextFactory.create(cluster, upgrade);
-        UpgradeSummary upgradeSummary = upgradeContext.getUpgradeSummary();
-        executionCommand.setUpgradeSummary(upgradeSummary);
-      }
-
-    } 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
+    } catch (ServiceNotFoundException serviceNotFoundException) {
+      // it's possible that there are commands specified for a service where
+      // the service doesn't exist yet
       LOG.warn(
-          "Unable to lookup the cluster by ID; assuming that there is no cluster and therefore no configs for this execution command: {}",
-          cnfe.getMessage());
-
-      return executionCommand;
+        "The service {} is not installed in the cluster. No repository version will be sent for this command.",
+        serviceName);
     } catch (AmbariException e) {
       throw new RuntimeException(e);
     }
-
-    return executionCommand;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/7c687bbc/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 d458675..b2993e3 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
@@ -82,6 +82,7 @@ import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.StackAccessException;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.CommandExecutionType;
+import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.actionmanager.Stage;
@@ -2323,8 +2324,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
         stackId.getStackVersion());
     Map<String, ServiceInfo> servicesMap = ambariMetaInfo.getServices(stackInfo.getName(), stackInfo.getVersion());
 
-    ExecutionCommand execCmd = stage.getExecutionCommandWrapper(scHost.getHostName(),
-      scHost.getServiceComponentName()).getExecutionCommand();
+    ExecutionCommandWrapper execCmdWrapper = stage.getExecutionCommandWrapper(hostname, componentName);
+    ExecutionCommand execCmd = execCmdWrapper.getExecutionCommand();
 
     execCmd.setConfigurations(configurations);
     execCmd.setConfigurationAttributes(configurationAttributes);
@@ -2552,8 +2553,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     execCmd.setCommandParams(commandParams);
 
     execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
+    execCmdWrapper.setVersions(cluster);
 
-    if ((execCmd != null) && (execCmd.getConfigurationTags().containsKey("cluster-env"))) {
+    if (execCmd.getConfigurationTags().containsKey("cluster-env")) {
       LOG.debug("AmbariManagementControllerImpl.createHostAction: created ExecutionCommand for host {}, role {}, roleCommand {}, and command ID {}, with cluster-env tags {}",
         execCmd.getHostname(), execCmd.getRole(), execCmd.getRoleCommand(), execCmd.getCommandId(), execCmd.getConfigurationTags().get("cluster-env").get("tag"));
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/7c687bbc/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
index 1021175..374774a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
@@ -17,6 +17,8 @@
  */
 package org.apache.ambari.server.agent;
 
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -38,6 +40,7 @@ import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -58,6 +61,8 @@ import org.apache.ambari.server.state.svccomphost.ServiceComponentHostDisableEve
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostInstallEvent;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpSucceededEvent;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartedEvent;
+import org.apache.ambari.server.topology.TopologyManager;
+import org.apache.ambari.server.utils.StageUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -89,6 +94,8 @@ public class TestHeartbeatMonitor {
     injector.getInstance(GuiceJpaInitializer.class);
     helper = injector.getInstance(OrmTestHelper.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
+    StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
   }
 
   @After
@@ -200,6 +207,8 @@ public class TestHeartbeatMonitor {
     hb.setResponseId(12);
     handler.handleHeartBeat(hb);
 
+    hm.getAgentRequests().setExecutionDetailsRequest(hostname1, "DATANODE", Boolean.TRUE.toString());
+
     List<StatusCommand> cmds = hm.generateStatusCommands(hostname1);
     assertTrue("HeartbeatMonitor should generate StatusCommands for host1", cmds.size() == 3);
     assertEquals("HDFS", cmds.get(0).getServiceName());
@@ -208,10 +217,19 @@ public class TestHeartbeatMonitor {
     boolean  containsSECONDARY_NAMENODEStatus = false;
 
     for (StatusCommand cmd : cmds) {
-      containsDATANODEStatus |= cmd.getComponentName().equals("DATANODE");
+      boolean isDataNode = cmd.getComponentName().equals("DATANODE");
+      containsDATANODEStatus |= isDataNode;
       containsNAMENODEStatus |= cmd.getComponentName().equals("NAMENODE");
       containsSECONDARY_NAMENODEStatus |= cmd.getComponentName().equals("SECONDARY_NAMENODE");
       assertTrue(cmd.getConfigurations().size() > 0);
+
+      ExecutionCommand execCmd = cmd.getExecutionCommand();
+      assertEquals(isDataNode, execCmd != null);
+      if (execCmd != null) {
+        Map<String, String> commandParams = execCmd.getCommandParams();
+        assertTrue(SERVICE_PACKAGE_FOLDER + " should be included", commandParams.containsKey(SERVICE_PACKAGE_FOLDER));
+        assertTrue(HOOKS_FOLDER + " should be included", commandParams.containsKey(HOOKS_FOLDER));
+      }
     }
 
     assertEquals(true, containsDATANODEStatus);


[31/50] [abbrv] ambari git commit: AMBARI-22035. Stack and Versions page is stuck while trying to install a new stack (alexantonenko)

Posted by jl...@apache.org.
AMBARI-22035. Stack and Versions page is stuck while trying to install a new stack (alexantonenko)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 19b16073c50556de666c17b3749ff6a0c1dae398
Parents: ea89244
Author: Alex Antonenko <aa...@hortonworks.com>
Authored: Fri Sep 22 19:25:38 2017 +0300
Committer: Alex Antonenko <aa...@hortonworks.com>
Committed: Fri Sep 22 19:25:38 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/mappers/repository_version_mapper.js | 2 +-
 ambari-web/app/mappers/stack_version_mapper.js      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/19b16073/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 746fc53..61056ae 100644
--- a/ambari-web/app/mappers/repository_version_mapper.js
+++ b/ambari-web/app/mappers/repository_version_mapper.js
@@ -123,7 +123,7 @@ App.repoVersionMapper = App.QuickDataMapper.create({
                 display_name: service.display_name,
                 latest_version: service.versions[0] ? service.versions[0] : '',
                 is_available: item[repoVersionsKey].services.someProperty('name', service.name),
-                is_upgradable: json.stackServices[service.name] && json.stackServices[service.name].upgrade
+                is_upgradable: json.stackServices ? json.stackServices[service.name] && json.stackServices[service.name].upgrade : true
               };
               resultService.push(serviceObj);
             }, this);

http://git-wip-us.apache.org/repos/asf/ambari/blob/19b16073/ambari-web/app/mappers/stack_version_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_version_mapper.js b/ambari-web/app/mappers/stack_version_mapper.js
index 9fa0b78..7612674 100644
--- a/ambari-web/app/mappers/stack_version_mapper.js
+++ b/ambari-web/app/mappers/stack_version_mapper.js
@@ -81,7 +81,7 @@ App.stackVersionMapper = App.QuickDataMapper.create({
           item.repository_versions[0].RepositoryVersions.stackVersionId = item.ClusterStackVersions.id;
           App.repoVersionMapper.map({
             "items": item.repository_versions,
-            "stackServices": item.ClusterStackVersions.repository_summary.services
+            "stackServices": item.ClusterStackVersions.repository_summary && item.ClusterStackVersions.repository_summary.services
           }, true, true);
         }
         resultStack.push(this.parseIt(stack, this.get('modelStack')));


[34/50] [abbrv] ambari git commit: AMBARI-22040. configs.py does not work properly when dealing with files (aonishuk)

Posted by jl...@apache.org.
AMBARI-22040. configs.py does not work properly when dealing with files (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 12abba0b743ec198067001a64608ccbcc904a869
Parents: 50b6475
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Mon Sep 25 12:38:39 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Mon Sep 25 12:38:39 2017 +0300

----------------------------------------------------------------------
 ambari-server/src/test/python/TestConfigs.py    | 38 ++++++++++++++++----
 .../src/test/resources/TestConfigs-content.xml  | 28 +++++++++++++++
 2 files changed, 60 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/12abba0b/ambari-server/src/test/python/TestConfigs.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestConfigs.py b/ambari-server/src/test/python/TestConfigs.py
index cc6cb31..6d2ab34 100644
--- a/ambari-server/src/test/python/TestConfigs.py
+++ b/ambari-server/src/test/python/TestConfigs.py
@@ -73,7 +73,7 @@ class TestConfigs(TestCase):
       self.assertEquals(config['properties'], {'config1': 'value1', 'config2': 'value2'})
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
     to_file_method.return_value = config_assertion
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'http', 'get', 'localhost', 'cluster1', 'hdfs-site', '1.conf']
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'http', '-a', 'get', '-l','localhost','-n', 'cluster1', '-c','hdfs-site']
     configs.main()
 
   @patch.object(configs, 'output_to_file')
@@ -94,7 +94,7 @@ class TestConfigs(TestCase):
       }
     }
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'https', 'set', 'localhost', 'cluster1', 'hdfs-site', 'config1', 'value3']
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'set', '-l','localhost','-n', 'cluster1', '-c','hdfs-site', '-k', 'config1', '-v', 'value3']
     configs.main()
 
   @patch.object(configs, 'output_to_file')
@@ -115,7 +115,7 @@ class TestConfigs(TestCase):
       }
     }
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'https', 'set', 'localhost', 'cluster1', 'hdfs-site', 'config1', 'value3']
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'set', '-l','localhost','-n', 'cluster1', '-c','hdfs-site', '-k', 'config1', '-v', 'value3']
     configs.main()
 
   @patch.object(configs, 'output_to_file')
@@ -138,7 +138,7 @@ class TestConfigs(TestCase):
       }
     }
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'https', 'set', 'localhost', 'cluster2', 'hdfs-site', 'config1', 'value4']
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'set', '-l','localhost','-n', 'cluster2', '-c','hdfs-site', '-k', 'config1', '-v', 'value4']
     configs.main()
 
   @patch.object(configs, 'output_to_file')
@@ -159,7 +159,8 @@ class TestConfigs(TestCase):
       }
     }
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'https', 'delete', 'localhost', 'cluster1', 'hdfs-site', 'config1']
+
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'delete', '-l','localhost','-n', 'cluster1', '-c','hdfs-site', '-k', 'config1']
     configs.main()
 
   @patch.object(configs, 'output_to_file')
@@ -182,5 +183,30 @@ class TestConfigs(TestCase):
       }
     }
     urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
-    sys.argv = ['configs.py', 'user', 'password', '8081', 'https', 'delete', 'localhost', 'cluster2', 'hdfs-site', 'config1']
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'delete', '-l','localhost','-n', 'cluster2', '-c','hdfs-site', '-k', 'config1']
+    configs.main()
+
+  @patch.object(configs, 'output_to_file')
+  @patch('urllib2.urlopen')
+  def test_set_properties_from_xml(self, urlopen_method, to_file_method):
+    response_mapping = {
+      'GET': {
+        'body': {
+          'https://localhost:8081/api/v1/clusters/cluster1?fields=Clusters/desired_configs' : '{"Clusters":{"desired_configs":{"hdfs-site":{"tag":"version1"}}}}',
+          'https://localhost:8081/api/v1/clusters/cluster1/configurations?type=hdfs-site&tag=version1': '{"items":[{"properties":{"config3": "value3", "config4": "value4"}}]}'
+        }
+      },
+      'PUT': {
+        'request_assertion': {
+          'https://localhost:8081/api/v1/clusters/cluster1':
+            lambda request_body: self.assertEquals(request_body['Clusters']['desired_configs']['properties'], {"config1": "value1", "config2": "value2"})
+        }
+      }
+    }
+    urlopen_method.side_effect = self.get_url_open_side_effect(response_mapping)
+
+    test_directory = os.path.dirname(os.path.abspath(__file__))
+    configs_path = os.path.join(test_directory, '../resources/TestConfigs-content.xml')
+
+    sys.argv = ['configs.py', '-u', 'user', '-p', 'password', '-t', '8081', '-s', 'https', '-a', 'set', '-l','localhost','-n', 'cluster1', '-c','hdfs-site', '-f', configs_path]
     configs.main()

http://git-wip-us.apache.org/repos/asf/ambari/blob/12abba0b/ambari-server/src/test/resources/TestConfigs-content.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/TestConfigs-content.xml b/ambari-server/src/test/resources/TestConfigs-content.xml
new file mode 100644
index 0000000..4039da9
--- /dev/null
+++ b/ambari-server/src/test/resources/TestConfigs-content.xml
@@ -0,0 +1,28 @@
+<!--
+   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>
+  <property>
+    <name>config1</name>
+    <value>value1</value>
+    <final>true</final>
+  </property>
+  <property>
+    <name>config2</name>
+    <value>value2</value>
+  </property>
+</configuration>
\ No newline at end of file


[49/50] [abbrv] ambari git commit: AMBARI-19135 : AMS build artifacts are not uploaded to maven central. (avijayan)

Posted by jl...@apache.org.
AMBARI-19135 : AMS build artifacts are not uploaded to maven central. (avijayan)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 84fed85ac9019a9b72d3db1619c7dbdf18e1d078
Parents: 12c9ca7
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Mon Sep 25 16:26:28 2017 -0700
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Mon Sep 25 16:26:28 2017 -0700

----------------------------------------------------------------------
 ambari-metrics/pom.xml | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/84fed85a/ambari-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/pom.xml b/ambari-metrics/pom.xml
index 560ef11..a14b8fd 100644
--- a/ambari-metrics/pom.xml
+++ b/ambari-metrics/pom.xml
@@ -317,5 +317,32 @@
         </dependency>
       </dependencies>
     </profile>
+    <profile>
+      <id>sign-artifacts</id>
+      <activation>
+        <property>
+          <name>performRelease</name>
+          <value>true</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <version>1.6</version>
+            <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
   </profiles>
 </project>


[09/50] [abbrv] ambari git commit: AMBARI-22007 - Addition of service component after patching a service still keeps the component at base version (jonathanhurley)

Posted by jl...@apache.org.
AMBARI-22007 - Addition of service component after patching a service still keeps the component at base version (jonathanhurley)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 5c0a3546e70e71366c51ef4e3b3ef9f2319865d8
Parents: 25c1f21
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Sep 20 16:59:48 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Sep 20 17:02:39 2017 -0400

----------------------------------------------------------------------
 .../ambari/server/agent/CommandRepository.java  | 28 +++++++++++++++
 .../AmbariCustomCommandExecutionHelper.java     |  1 +
 .../RepositoryVersionResourceProvider.java      |  6 ++--
 .../DistributeRepositoriesActionListener.java   |  1 +
 .../listeners/upgrade/StackVersionListener.java |  5 +--
 .../orm/entities/RepositoryVersionEntity.java   | 37 ++++++++++++++++++++
 .../stack/upgrade/RepositoryVersionHelper.java  |  1 +
 .../server/upgrade/UpgradeCatalog260.java       | 29 +++++++++++++--
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  |  1 +
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |  1 +
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |  1 +
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |  1 +
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql |  1 +
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |  1 +
 .../upgrade/StackVersionListenerTest.java       |  5 +++
 .../server/upgrade/UpgradeCatalog260Test.java   | 17 ++++++---
 .../src/test/python/TestVersionSelectUtil.py    | 14 ++++----
 17 files changed, 133 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
index 1351713..301f475 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
@@ -46,6 +46,13 @@ public class CommandRepository {
   private String m_stackName;
 
   /**
+   * {@code true} if Ambari believes that this repository has reported back it's
+   * version after distribution.
+   */
+  @SerializedName("resolved")
+  private boolean m_resolved;
+
+  /**
    * @param version the repo version
    */
   public void setRepositoryVersion(String version) {
@@ -119,6 +126,27 @@ public class CommandRepository {
   }
 
   /**
+   * Gets whether this repository has been marked as having its version
+   * resolved.
+   *
+   * @return {@code true} if this repository has been confirmed to have the
+   *         right version.
+   */
+  public boolean isResolved() {
+    return m_resolved;
+  }
+
+  /**
+   * Gets whether this repository has had its version resolved.
+   *
+   * @param resolved
+   *          {@code true} to mark this repository as being resolved.
+   */
+  public void setResolved(boolean resolved) {
+    m_resolved = resolved;
+  }
+
+  /**
    * Minimal information required to generate repo files on the agent.  These are copies
    * of the repository objects from repo versions that can be changed for URL overrides, etc.
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 822539f..38a02ef 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
@@ -1285,6 +1285,7 @@ public class AmbariCustomCommandExecutionHelper {
       public Void apply(RepositoryVersionEntity rve) {
         command.setRepositoryVersionId(rve.getId());
         command.setRepositoryVersion(rve.getVersion());
+        command.setResolved(rve.isResolved());
         command.setStackName(rve.getStackName());
 
         // !!! a repository version entity has all the repos worked out.  We shouldn't use

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index 44ef9f7..6455805 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -87,6 +87,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
   public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "repository_version");
   public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID       = PropertyHelper.getPropertyId("RepositoryVersions", "display_name");
   public static final String REPOSITORY_VERSION_HIDDEN_PROPERTY_ID             = PropertyHelper.getPropertyId("RepositoryVersions", "hidden");
+  public static final String REPOSITORY_VERSION_RESOLVED_PROPERTY_ID           = PropertyHelper.getPropertyId("RepositoryVersions", "resolved");
   public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID         = new OperatingSystemResourceDefinition().getPluralName();
   public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID              = new RepositoryResourceDefinition().getPluralName();
 
@@ -121,7 +122,8 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
       REPOSITORY_VERSION_PARENT_ID,
       REPOSITORY_VERSION_HAS_CHILDREN,
       REPOSITORY_VERSION_AVAILABLE_SERVICES,
-      REPOSITORY_VERSION_STACK_SERVICES);
+      REPOSITORY_VERSION_STACK_SERVICES,
+      REPOSITORY_VERSION_RESOLVED_PROPERTY_ID);
 
   @SuppressWarnings("serial")
   public static Map<Type, String> keyPropertyIds = new ImmutableMap.Builder<Type, String>()
@@ -257,7 +259,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc
       setResourceProperty(resource, REPOSITORY_VERSION_HIDDEN_PROPERTY_ID, entity.isHidden(), requestedIds);
       setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds);
       setResourceProperty(resource, REPOSITORY_VERSION_TYPE_PROPERTY_ID, entity.getType(), requestedIds);
-
+      setResourceProperty(resource, REPOSITORY_VERSION_RESOLVED_PROPERTY_ID, entity.isResolved(), requestedIds);
       setResourceProperty(resource, REPOSITORY_VERSION_PARENT_ID, entity.getParentId(), requestedIds);
 
       List<RepositoryVersionEntity> children = entity.getChildren();

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
index aa29894..376e20d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
@@ -124,6 +124,7 @@ public class DistributeRepositoriesActionListener {
         if (null != repoVersion && StringUtils.isNotBlank(actualVersion)) {
           if (!StringUtils.equals(repoVersion.getVersion(), actualVersion)) {
             repoVersion.setVersion(actualVersion);
+            repoVersion.setResolved(true);
             repoVersionDAO.merge(repoVersion);
             repositoryVersion = actualVersion;
           }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 394e9f9..0ce64bf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -98,8 +98,9 @@ public class StackVersionListener {
       if (null != rve) {
         String currentRepoVersion = rve.getVersion();
         if (!StringUtils.equals(currentRepoVersion, newVersion)) {
-            rve.setVersion(newVersion);
-            repositoryVersionDAO.merge(rve);
+          rve.setVersion(newVersion);
+          rve.setResolved(true);
+          repositoryVersionDAO.merge(rve);
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index bf9e678..2b56b11 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -147,6 +147,16 @@ public class RepositoryVersionEntity {
   @Column(name = "hidden", nullable = false, insertable = true, updatable = true)
   private short isHidden = 0;
 
+  /**
+   * Repositories can't be trusted until they have been deployed and we've
+   * detected their actual version. Most of the time, things match up, but
+   * editing a VDF could causes the version to be misrepresented. Once we have
+   * received the correct version of the repository (normally after it's been
+   * installed), then we can set this flag to {@code true}.
+   */
+  @Column(name = "resolved", nullable = false)
+  private short resolved = 0;
+
   @ManyToOne
   @JoinColumn(name = "parent_id")
   private RepositoryVersionEntity parent;
@@ -217,6 +227,13 @@ public class RepositoryVersionEntity {
     return version;
   }
 
+  /**
+   * Sets the version on this repository version entity. If the version is
+   * confirmed as correct, then the called should also set
+   * {@link #setResolved(boolean)}.
+   *
+   * @param version
+   */
   public void setVersion(String version) {
     this.version = version;
   }
@@ -459,4 +476,24 @@ public class RepositoryVersionEntity {
     this.isHidden = (short) (isHidden ? 1 : 0);
   }
 
+  /**
+   * Gets whether this repository has been installed and has reported back its
+   * actual version.
+   *
+   * @return {@code true} if the version for this repository can be trusted,
+   *         {@code false} otherwise.
+   */
+  public boolean isResolved() {
+    return resolved == 1;
+  }
+
+  /**
+   * Sets whether this repository has been installed and has reported back its
+   * actual version.
+   *
+   * @param resolved
+   */
+  public void setResolved(boolean resolved) {
+    this.resolved = resolved ? (short) 1 : (short) 0;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
index c137515..f540d8d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
@@ -320,6 +320,7 @@ public class RepositoryVersionHelper {
     commandRepo.setRepositories(osEntity.getOsType(), osEntity.getRepositories());
     commandRepo.setRepositoryVersion(repoVersion.getVersion());
     commandRepo.setRepositoryVersionId(repoVersion.getId());
+    commandRepo.setResolved(repoVersion.isResolved());
     commandRepo.setStackName(repoVersion.getStackId().getStackName());
 
     if (!osEntity.isAmbariManagedRepos()) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
index 0b9f2c4..c92b3dc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
@@ -34,8 +34,10 @@ import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.dao.ArtifactDAO;
+import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.orm.entities.ArtifactEntity;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -80,6 +82,7 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
 
   public static final String REPO_VERSION_TABLE = "repo_version";
   public static final String REPO_VERSION_ID_COLUMN = "repo_version_id";
+  public static final String REPO_VERSION_RESOLVED_COLUMN = "resolved";
   public static final String REPO_VERSION_HIDDEN_COLUMN = "hidden";
 
   public static final String HOST_COMPONENT_DESIRED_STATE_TABLE = "hostcomponentdesiredstate";
@@ -383,14 +386,20 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
   }
 
   /**
-   * Updates {@value #REPO_VERSION_TABLE} table. Adds
-   * {@value #REPO_VERSION_HIDDEN_COLUMN} column.
+   * Updates {@value #REPO_VERSION_TABLE} table. Adds the following columns:
+   * <ul>
+   * <li>{@value #REPO_VERSION_HIDDEN_COLUMN}
+   * <li>{@value #REPO_VERSION_RESOLVED_COLUMN}
+   * </ul>
    *
    * @throws java.sql.SQLException
    */
   private void updateRepositoryVersionTable() throws SQLException {
     dbAccessor.addColumn(REPO_VERSION_TABLE,
         new DBAccessor.DBColumnInfo(REPO_VERSION_HIDDEN_COLUMN, Short.class, null, 0, false));
+
+    dbAccessor.addColumn(REPO_VERSION_TABLE,
+        new DBAccessor.DBColumnInfo(REPO_VERSION_RESOLVED_COLUMN, Short.class, null, 0, false));
   }
 
   /**
@@ -412,6 +421,7 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
     updateKerberosDescriptorArtifacts();
     updateAmsConfigs();
     updateHDFSWidgetDefinition();
+    updateExistingRepositoriesToBeResolved();
   }
 
   public int getCurrentVersionID() throws AmbariException, SQLException {
@@ -590,4 +600,19 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog {
 
     updateWidgetDefinitionsForService("HDFS", widgetMap, sectionLayoutMap);
   }
+
+  /**
+   * Sets all existing repository versions to be resolved (we have to assume
+   * that they are good since they've been using them to run stuff).
+   *
+   * @throws AmbariException
+   */
+  protected void updateExistingRepositoriesToBeResolved() throws AmbariException {
+    RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+    List<RepositoryVersionEntity> repositoryVersions = repositoryVersionDAO.findAll();
+    for (RepositoryVersionEntity repositoryVersion : repositoryVersions) {
+      repositoryVersion.setResolved(true);
+      repositoryVersionDAO.merge(repositoryVersion);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 74fff6c..614af1e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -155,6 +155,7 @@ CREATE TABLE repo_version (
   repositories VARCHAR(3000) NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
   hidden SMALLINT NOT NULL DEFAULT 0,
+  resolved SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml CLOB,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 beda848..530411a 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -175,6 +175,7 @@ CREATE TABLE repo_version (
   repositories MEDIUMTEXT NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
   hidden SMALLINT NOT NULL DEFAULT 0,
+  resolved TINYINT(1) NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml MEDIUMTEXT,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 4f27dfb..02f6e3e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -156,6 +156,7 @@ CREATE TABLE repo_version (
   repositories CLOB NOT NULL,
   repo_type VARCHAR2(255) DEFAULT 'STANDARD' NOT NULL,
   hidden NUMBER(1) DEFAULT 0 NOT NULL,
+  resolved NUMBER(1) DEFAULT 0 NOT NULL,
   version_url VARCHAR(1024),
   version_xml CLOB,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 355ee80..634db95 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -159,6 +159,7 @@ CREATE TABLE repo_version (
   version_xml TEXT,
   version_xsd VARCHAR(512),
   parent_id BIGINT,
+  resolved SMALLINT NOT NULL DEFAULT 0,
   CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
   CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
   CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 76d4441..f64ff80 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -154,6 +154,7 @@ CREATE TABLE repo_version (
   repositories TEXT NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
   hidden SMALLINT NOT NULL DEFAULT 0,
+  resolved BIT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml TEXT,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/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 f54a232..7a3feaf 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -168,6 +168,7 @@ CREATE TABLE repo_version (
   repositories VARCHAR(MAX) NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
   hidden SMALLINT NOT NULL DEFAULT 0,
+  resolved BIT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml VARCHAR(MAX),
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index ff6fab9..68d9c56 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -306,6 +306,11 @@ public class StackVersionListenerTest extends EasyMockSupport {
     RepositoryVersionDAO dao = createNiceMock(RepositoryVersionDAO.class);
     RepositoryVersionEntity entity = createNiceMock(RepositoryVersionEntity.class);
     expect(entity.getVersion()).andReturn("2.4.0.0").once();
+
+    // when the version gets reported back, we set this repo to resolved
+    entity.setResolved(true);
+    expectLastCall().once();
+
     expect(dao.findByPK(1L)).andReturn(entity).once();
     expect(dao.merge(entity)).andReturn(entity).once();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
index d7210c6..c03b400 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
@@ -219,7 +219,8 @@ public class UpgradeCatalog260Test {
     expectDropStaleTables();
 
     Capture<DBColumnInfo> repoVersionHiddenColumnCapture = newCapture();
-    expectUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture);
+    Capture<DBColumnInfo> repoVersionResolvedColumnCapture = newCapture();
+    expectUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture, repoVersionResolvedColumnCapture);
 
     Capture<DBColumnInfo> unapped = newCapture();
     expectRenameServiceDeletedColumn(unapped);
@@ -248,7 +249,7 @@ public class UpgradeCatalog260Test {
     verifyAddSelectedCollumsToClusterconfigTable(selectedColumnInfo, selectedmappingColumnInfo, selectedTimestampColumnInfo, createTimestampColumnInfo);
     verifyUpdateUpgradeTable(rvid, orchestration, revertAllowed);
     verifyCreateUpgradeHistoryTable(columns);
-    verifyUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture);
+    verifyUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture, repoVersionResolvedColumnCapture);
   }
 
   public void expectDropStaleTables() throws SQLException {
@@ -581,16 +582,24 @@ public class UpgradeCatalog260Test {
    * @param hiddenColumnCapture
    * @throws SQLException
    */
-  public void expectUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture) throws SQLException {
+  public void expectUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture,
+      Capture<DBColumnInfo> repoVersionResolvedColumnCapture) throws SQLException {
     dbAccessor.addColumn(eq(UpgradeCatalog260.REPO_VERSION_TABLE), capture(hiddenColumnCapture));
+    dbAccessor.addColumn(eq(UpgradeCatalog260.REPO_VERSION_TABLE), capture(repoVersionResolvedColumnCapture));
     expectLastCall().once();
   }
 
-  public void verifyUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture) {
+  public void verifyUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture,
+      Capture<DBColumnInfo> resolvedColumnCapture) {
     DBColumnInfo hiddenColumn = hiddenColumnCapture.getValue();
     Assert.assertEquals(0, hiddenColumn.getDefaultValue());
     Assert.assertEquals(UpgradeCatalog260.REPO_VERSION_HIDDEN_COLUMN, hiddenColumn.getName());
     Assert.assertEquals(false, hiddenColumn.isNullable());
+
+    DBColumnInfo resolvedColumn = resolvedColumnCapture.getValue();
+    Assert.assertEquals(0, resolvedColumn.getDefaultValue());
+    Assert.assertEquals(UpgradeCatalog260.REPO_VERSION_RESOLVED_COLUMN, resolvedColumn.getName());
+    Assert.assertEquals(false, resolvedColumn.isNullable());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c0a3546/ambari-server/src/test/python/TestVersionSelectUtil.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestVersionSelectUtil.py b/ambari-server/src/test/python/TestVersionSelectUtil.py
index 5097fac..5195dca 100644
--- a/ambari-server/src/test/python/TestVersionSelectUtil.py
+++ b/ambari-server/src/test/python/TestVersionSelectUtil.py
@@ -40,7 +40,7 @@ class TestVersionSelectUtil(TestCase):
   @patch("resource_management.core.shell.call")
   @patch('os.path.exists')
   @patch("resource_management.libraries.functions.stack_tools.get_stack_tool")
-  def test_get_component_version(self, get_stack_tool_mock, os_path_exists_mock, call_mock, open_mock):
+  def test_get_component_version_from_symlink(self, get_stack_tool_mock, os_path_exists_mock, call_mock, open_mock):
     stack_expected_version = "2.2.1.0-2175"
 
     # Mock classes for reading from a file
@@ -79,23 +79,23 @@ class TestVersionSelectUtil(TestCase):
     call_mock.side_effect = [(0, "value will come from MagicFile"), ] * 3
 
     # Missing stack name
-    version = self.module.get_component_version(None, "hadoop-hdfs-datanode")
+    version = self.module.get_component_version_from_symlink(None, "hadoop-hdfs-datanode")
     self.assertEquals(version, None)
     # Missing component name
-    version = self.module.get_component_version("HDP", None)
+    version = self.module.get_component_version_from_symlink("HDP", None)
     self.assertEquals(version, None)
 
     # Invalid stack name
-    version = self.module.get_component_version("StackDoesNotExist", "hadoop-hdfs-datanode")
+    version = self.module.get_component_version_from_symlink("StackDoesNotExist", "hadoop-hdfs-datanode")
     self.assertEquals(version, None)
     # Invalid component name
-    version = self.module.get_component_version("HDP", "hadoop-nonexistent-component-name")
+    version = self.module.get_component_version_from_symlink("HDP", "hadoop-nonexistent-component-name")
     self.assertEquals(version, None)
 
     # Pass
-    version = self.module.get_component_version("HDP", "hadoop-hdfs-namenode")
+    version = self.module.get_component_version_from_symlink("HDP", "hadoop-hdfs-namenode")
     self.assertEquals(version, stack_expected_version)
-    version = self.module.get_component_version("HDP", "hadoop-hdfs-datanode")
+    version = self.module.get_component_version_from_symlink("HDP", "hadoop-hdfs-datanode")
     self.assertEquals(version, stack_expected_version)
 
   @patch('__builtin__.open')


[06/50] [abbrv] ambari git commit: AMBARI-22006 Log Search UI: implement grouping of service logs by day. (ababiichuk)

Posted by jl...@apache.org.
AMBARI-22006 Log Search UI: implement grouping of service logs by day. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 0f1099b9a9887c3a6b05753a00ce88c9d9c4f497
Parents: 56c3da7
Author: ababiichuk <ab...@hortonworks.com>
Authored: Wed Sep 20 17:07:36 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Wed Sep 20 17:37:42 2017 +0300

----------------------------------------------------------------------
 .../logs-list/logs-list.component.html          | 52 +++++++++++---------
 .../logs-list/logs-list.component.less          |  1 -
 .../components/logs-list/logs-list.component.ts | 11 ++++-
 .../ambari-logsearch-web/src/app/mock-data.ts   |  2 +-
 .../src/app/services/filtering.service.ts       | 28 -----------
 .../src/app/services/utils.service.ts           |  7 +++
 .../src/assets/i18n/en.json                     |  4 --
 7 files changed, 46 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
index 888c524..29a85c5 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
@@ -25,30 +25,36 @@
     <div class="col-md-11">{{'logs.details' | translate}}</div>
   </div>
 </div>
-<accordion-panel *ngFor="let log of logs; let i = index" [toggleId]="'details-' + i" class="col-md-12">
-  <ng-template>
-    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'hexagon ' + log.className"></div>
-    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'col-md-1 log-status ' + log.className">{{log.level}}</div>
-    <div *ngIf="isColumnDisplayed('type') || isColumnDisplayed('logtime')" class="col-md-3">
-      <div *ngIf="isColumnDisplayed('type')" class="log-type">{{log.type}}</div>
-      <time *ngIf="isColumnDisplayed('logtime')" class="log-time">
-        {{log.logtime | amTz: timeZone | amDateFormat: timeFormat}}
-      </time>
-    </div>
-    <div class="col-md-6 log-content-wrapper">
-      <div class="collapse log-actions" attr.id="details-{{i}}">
-        <span class="action-icon fa fa-search"></span>
-        <span class="action-icon fa fa-external-link"></span>
-        <span class="action-icon fa fa-bullseye"></span>
+<div *ngFor="let log of logs; let i = index">
+  <div *ngIf="i === 0 || isDifferentDates(log.logtime, logs[i - 1].logtime)" class="col-md-12">
+    <div class="logs-header">{{log.logtime | amTz: timeZone | amDateFormat: dateFormat}}</div>
+  </div>
+  <accordion-panel [toggleId]="'details-' + i" class="col-md-12">
+    <ng-template>
+      <div *ngIf="isColumnDisplayed('level')" [ngClass]="'hexagon ' + log.className"></div>
+      <div *ngIf="isColumnDisplayed('level')" [ngClass]="'col-md-1 log-status ' + log.className">{{log.level}}</div>
+      <div *ngIf="isColumnDisplayed('type') || isColumnDisplayed('logtime')" class="col-md-3">
+        <div *ngIf="isColumnDisplayed('type')" class="log-type">{{log.type}}</div>
+        <time *ngIf="isColumnDisplayed('logtime')" class="log-time">
+          {{log.logtime | amTz: timeZone | amDateFormat: timeFormat}}
+        </time>
+      </div>
+      <div class="col-md-6 log-content-wrapper">
+        <div class="collapse log-actions" attr.id="details-{{i}}">
+          <span class="action-icon fa fa-search"></span>
+          <span class="action-icon fa fa-external-link"></span>
+          <span class="action-icon fa fa-crosshairs"></span>
+        </div>
+        <div class="log-content-inner-wrapper">
+          <div class="log-content" *ngIf="isColumnDisplayed('log_message')">{{log.log_message}}</div>
+        </div>
       </div>
-      <div class="log-content-inner-wrapper">
-        <div class="log-content" *ngIf="isColumnDisplayed('log_message')">{{log.log_message}}</div>
+      <div *ngFor="let column of displayedColumns">
+        <div *ngIf="customStyledColumns.indexOf(column.name) === -1" [innerHTML]="log[column.name]"
+             class="col-md-1"></div>
       </div>
-    </div>
-    <div *ngFor="let column of displayedColumns">
-      <div *ngIf="customStyledColumns.indexOf(column.name) === -1" [innerHTML]="log[column.name]" class="col-md-1"></div>
-    </div>
-  </ng-template>
-</accordion-panel>
+    </ng-template>
+  </accordion-panel>
+</div>
 <pagination class="col-md-12" *ngIf="logs && logs.length" [totalCount]="totalCount" [filtersForm]="filtersForm"
             [filterInstance]="filters.pageSize" [currentCount]="logs.length"></pagination>

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
index 91d796f..584c1a7 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
@@ -23,7 +23,6 @@
   padding: 5px 0;
   background-color: @list-header-background-color; // TODO implement actual color
   overflow: hidden;
-  text-transform: uppercase;
 }
 
 /deep/ filter-dropdown {

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
index 6d73dcb..a081e1b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
@@ -19,6 +19,7 @@ import {Component, Input} from '@angular/core';
 import {FormGroup} from '@angular/forms';
 import 'rxjs/add/operator/map';
 import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
 
 @Component({
   selector: 'logs-list',
@@ -27,7 +28,7 @@ import {FilteringService} from '@app/services/filtering.service';
 })
 export class LogsListComponent {
 
-  constructor(private filtering: FilteringService) {
+  constructor(private filtering: FilteringService, private utils: UtilsService) {
   }
 
   @Input()
@@ -41,7 +42,9 @@ export class LogsListComponent {
 
   readonly customStyledColumns = ['level', 'type', 'logtime', 'log_message'];
 
-  timeFormat: string = 'DD/MM/YYYY HH:mm:ss';
+  readonly dateFormat: string = 'dddd, MMMM Do';
+
+  readonly timeFormat: string = 'h:mm:ss A';
 
   get timeZone(): string {
     return this.filtering.timeZone;
@@ -55,6 +58,10 @@ export class LogsListComponent {
     return this.filtering.filtersForm;
   }
 
+  isDifferentDates(dateA, dateB): boolean {
+    return this.utils.isDifferentDates(dateA, dateB, this.timeZone);
+  }
+
   isColumnDisplayed(key: string): boolean {
     return this.displayedColumns.some(column => column.name === key);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts b/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
index f23139b..4325f5b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
@@ -322,7 +322,7 @@ export const mockData = {
               path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
               host: 'h1',
               level: 'ERROR',
-              logtime: moment().subtract(2, 'd'),
+              logtime: moment().subtract(2, 'd').valueOf(),
               ip: '192.168.0.2',
               type: 'ams_collector',
               _version_: 14,

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
index 2d3f640..718149e 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -360,34 +360,6 @@ export class FilteringService {
       label: 'sorting.title',
       options: [
         {
-          label: 'sorting.level.asc',
-          value: {
-            key: 'level',
-            type: 'asc'
-          }
-        },
-        {
-          label: 'sorting.level.desc',
-          value: {
-            key: 'level',
-            type: 'desc'
-          }
-        },
-        {
-          label: 'sorting.component.asc',
-          value: {
-            key: 'type',
-            type: 'asc'
-          }
-        },
-        {
-          label: 'sorting.component.desc',
-          value: {
-            key: 'type',
-            type: 'desc'
-          }
-        },
-        {
           label: 'sorting.time.asc',
           value: {
             key: 'logtime',

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
index 0f90ba3..773172b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
@@ -17,6 +17,7 @@
  */
 
 import {Injectable} from '@angular/core';
+import * as moment from 'moment-timezone';
 
 @Injectable()
 export class UtilsService {
@@ -47,4 +48,10 @@ export class UtilsService {
     return event.keyCode === 13;
   }
 
+  isDifferentDates(dateA, dateB, timeZone): boolean {
+    const momentA = moment(dateA).tz(timeZone),
+      momentB = moment(dateB).tz(timeZone);
+    return !momentA.isSame(momentB, 'day');
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/0f1099b9/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
index e7126f0..e3f4c69 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -68,10 +68,6 @@
   "levels.unknown": "Unknown",
 
   "sorting.title": "Sort By",
-  "sorting.level.asc": "Ascending Level",
-  "sorting.level.desc": "Descending Level",
-  "sorting.component.asc": "Ascending Component",
-  "sorting.component.desc": "Descending Component",
   "sorting.time.asc": "Ascending Time",
   "sorting.time.desc": "Descending Time",
 


[02/50] [abbrv] ambari git commit: AMBARI-22002.Ambari Unit Tests Fail In trunk(Prabhjyot Singh via Venkata Sairam)

Posted by jl...@apache.org.
AMBARI-22002.Ambari Unit Tests Fail In trunk(Prabhjyot Singh via Venkata Sairam)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 8467a2048300ac54caf84ad785a8cc0a96f3cb65
Parents: c883272
Author: Venkata Sairam <ve...@gmail.com>
Authored: Wed Sep 20 15:21:27 2017 +0530
Committer: Venkata Sairam <ve...@gmail.com>
Committed: Wed Sep 20 15:21:27 2017 +0530

----------------------------------------------------------------------
 .../stacks/2.6/ZEPPELIN/test_zeppelin_070.py    | 135 +++++++++++++++++--
 1 file changed, 125 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8467a204/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py b/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
index 9a28e68..b9b34e8 100644
--- a/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
+++ b/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
@@ -21,8 +21,7 @@ from ambari_commons import OSCheck
 
 import glob
 
-import time
-from mock.mock import MagicMock, patch, call
+from mock.mock import MagicMock, patch
 from resource_management.core import sudo
 from stacks.utils.RMFTestCase import *
 
@@ -34,7 +33,7 @@ import interpreter_json_generated
               new=MagicMock(return_value=interpreter_json_generated.template))
 class TestZeppelin070(RMFTestCase):
   COMMON_SERVICES_PACKAGE_DIR = "ZEPPELIN/0.7.0/package"
-  STACK_VERSION = "2.5"
+  STACK_VERSION = "2.6"
 
   def assert_configure_default(self):
     self.assertResourceCalled('Directory', '/var/log/zeppelin',
@@ -59,7 +58,7 @@ class TestZeppelin070(RMFTestCase):
                               cd_access='a',
                               )
     self.assertResourceCalled('Execute', (
-    'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'), sudo=True)
+      'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'), sudo=True)
     self.assertResourceCalled('XmlConfig', 'zeppelin-site.xml',
                               owner='zeppelin',
                               group='zeppelin',
@@ -118,7 +117,7 @@ class TestZeppelin070(RMFTestCase):
                               cd_access='a',
                               )
     self.assertResourceCalled('Execute', (
-    'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'), sudo=True)
+      'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'), sudo=True)
     self.assertResourceCalled('XmlConfig', 'zeppelin-site.xml',
                               owner='zeppelin',
                               group='zeppelin',
@@ -181,7 +180,7 @@ class TestZeppelin070(RMFTestCase):
                               cd_access='a',
                               )
     self.assertResourceCalled('Execute', (
-    'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'),
+      'chown', '-R', u'zeppelin:zeppelin', '/var/run/zeppelin'),
                               sudo=True,
                               )
     self.assertResourceCalled('Execute',
@@ -200,7 +199,7 @@ class TestZeppelin070(RMFTestCase):
                        )
     self.assert_configure_default()
     self.assertResourceCalled('Execute', (
-    'chown', '-R', u'zeppelin:zeppelin', '/etc/zeppelin'),
+      'chown', '-R', u'zeppelin:zeppelin', '/etc/zeppelin'),
                               sudo=True,
                               )
 
@@ -215,7 +214,7 @@ class TestZeppelin070(RMFTestCase):
                        )
     self.assert_configure_secured()
     self.assertResourceCalled('Execute', (
-    'chown', '-R', u'zeppelin:zeppelin', '/etc/zeppelin'),
+      'chown', '-R', u'zeppelin:zeppelin', '/etc/zeppelin'),
                               sudo=True,
                               )
     self.assertResourceCalled('Execute', ('chown', '-R', 'zeppelin:zeppelin',
@@ -305,23 +304,139 @@ class TestZeppelin070(RMFTestCase):
                               principal_name=UnknownConfigurationMock(),
                               security_enabled=False,
                               )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/etc/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['download_on_execute'],
+                              source="/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json",
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
+
     self.assertResourceCalled('File', '/etc/zeppelin/conf/interpreter.json',
                               content=interpreter_json_generated.template_after_base,
                               owner='zeppelin',
                               group='zeppelin',
                               )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['create_on_execute'],
+                              source="/etc/zeppelin/conf/interpreter.json",
+                              replace_existing_files=True,
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/etc/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['download_on_execute'],
+                              source="/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json",
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
+
     self.assertResourceCalled('File', '/etc/zeppelin/conf/interpreter.json',
                               content=interpreter_json_generated.template_after_without_spark_and_livy,
                               owner='zeppelin',
-                              group='zeppelin')
+                              group='zeppelin',
+                              )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['create_on_execute'],
+                              source="/etc/zeppelin/conf/interpreter.json",
+                              replace_existing_files=True,
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/etc/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['download_on_execute'],
+                              source="/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json",
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
 
     self.assertResourceCalled('File', '/etc/zeppelin/conf/interpreter.json',
                               content=interpreter_json_generated.template_after_kerberos,
                               owner='zeppelin',
-                              group='zeppelin')
+                              group='zeppelin',
+                              )
+
+    self.assertResourceCalled('HdfsResource',
+                              '/user/zeppelin/hdfs:///user/zeppelin/conf/interpreter.json',
+                              hadoop_bin_dir='/usr/hdp/current/hadoop-client/bin',
+                              default_fs=u'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
+                              hdfs_site={u'a': u'b'},
+                              kinit_path_local='/usr/bin/kinit',
+                              user="zeppelin",
+                              group="zeppelin",
+                              type='file',
+                              action=['create_on_execute'],
+                              source="/etc/zeppelin/conf/interpreter.json",
+                              replace_existing_files=True,
+                              hadoop_conf_dir='/usr/hdp/current/hadoop-client/conf',
+                              keytab=UnknownConfigurationMock(),
+                              principal_name=UnknownConfigurationMock(),
+                              security_enabled=False,
+                              )
 
     self.assertResourceCalled('Execute',
                               '/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh restart >> /var/log/zeppelin/zeppelin-setup.log',
                               user='zeppelin'
                               )
+
     self.assertNoMoreResources()


[25/50] [abbrv] ambari git commit: AMBARI-22039. File "hdfs.headless.keytab" has incorrect permission (aonishuk)

Posted by jl...@apache.org.
AMBARI-22039. File "hdfs.headless.keytab" has incorrect permission  (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: e4cadbb15876e635b6831d2a488edda80d2d0554
Parents: d966298
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Sep 22 13:42:26 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Sep 22 13:42:26 2017 +0300

----------------------------------------------------------------------
 .../common-services/ZEPPELIN/0.7.0/package/scripts/master.py     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e4cadbb1/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/master.py b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/master.py
index 7d44d16..382566e 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/master.py
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/package/scripts/master.py
@@ -327,7 +327,7 @@ class Master(Script):
                               action="download_on_execute",
                               source=self.getZeppelinConfFS(params),
                               group=params.zeppelin_group,
-                              user=params.zeppelin_user)
+                              owner=params.zeppelin_user)
         except Fail as fail:
           if "doesn't exist" not in fail.args[0]:
             print "Error getting interpreter.json from HDFS"
@@ -357,7 +357,7 @@ class Master(Script):
                             action="create_on_execute",
                             source=interpreter_config,
                             group=params.zeppelin_group,
-                            user=params.zeppelin_user,
+                            owner=params.zeppelin_user,
                             replace_existing_files=True)
 
   def update_kerberos_properties(self):


[32/50] [abbrv] ambari git commit: AMBARI-22034. AMS: Add smart configs support for service. Addendum fix (swagle)

Posted by jl...@apache.org.
AMBARI-22034. AMS: Add smart configs support for service. Addendum fix (swagle)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 5d5cc4ff024965210aaa4fcccb17d694b69c9927
Parents: 19b1607
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Fri Sep 22 14:19:31 2017 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Fri Sep 22 14:19:31 2017 -0700

----------------------------------------------------------------------
 .../AMBARI_METRICS/0.1.0/configuration/ams-site.xml                | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5d5cc4ff/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
index ab14f18..b7ae456 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
@@ -31,8 +31,6 @@
       2) distributed: HBase daemons writing to HDFS
     </description>
     <on-ambari-upgrade add="true"/>
-    <display-name>Operation Mode</display-name>
-    <description>Metrics service Operation mode</description>
     <value-attributes>
       <overridable>false</overridable>
       <type>value-list</type>


[30/50] [abbrv] ambari git commit: AMBARI-21910 Ranger Usersync config to support nested group evaluation for LDAP Sync source property (mugdha)

Posted by jl...@apache.org.
AMBARI-21910 Ranger Usersync config to support nested group evaluation for LDAP Sync source property (mugdha)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: ea892443513fa730dad2ef3af06069ef618e0225
Parents: f067ec8
Author: Mugdha Varadkar <mu...@apache.org>
Authored: Fri Sep 22 18:03:25 2017 +0530
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Fri Sep 22 18:14:00 2017 +0530

----------------------------------------------------------------------
 .../RangerUsersyncConfigCalculation.java        |  96 ++++++++++++++
 .../RANGER/0.7.0/configuration/ranger-env.xml   |  23 ++++
 .../0.7.0/configuration/ranger-ugsync-site.xml  |   7 ++
 .../RANGER/0.7.0/themes/theme_version_5.json    |  40 ++++++
 .../1.0.0.3.0/configuration/ranger-env.xml      |  23 ++++
 .../configuration/ranger-ugsync-site.xml        |   7 ++
 .../1.0.0.3.0/themes/theme_version_1.json       |  40 ++++++
 .../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml |   7 ++
 .../stacks/HDP/2.6/upgrades/upgrade-2.6.xml     |   8 ++
 .../RangerUsersyncConfigCalculationTest.java    | 126 +++++++++++++++++++
 10 files changed, 377 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculation.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculation.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculation.java
new file mode 100644
index 0000000..3573748
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculation.java
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.serveraction.upgrades;
+
+import java.text.MessageFormat;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.serveraction.AbstractServerAction;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+
+import com.google.inject.Inject;
+
+/**
+ * Computes Ranger Usersync ldap grouphierarchylevels property. This class is only used when upgrading from
+ * HDP-2.6.x to HDP-2.6.y.
+ */
+
+public class RangerUsersyncConfigCalculation extends AbstractServerAction {
+  private static final String RANGER_USERSYNC_CONFIG_TYPE = "ranger-ugsync-site";
+  private static final String RANGER_ENV_CONFIG_TYPE = "ranger-env";
+
+  @Inject
+  private Clusters m_clusters;
+
+  @Override
+  public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext) throws AmbariException, InterruptedException {
+
+  String clusterName = getExecutionCommand().getClusterName();
+  Cluster cluster = m_clusters.getCluster(clusterName);
+  String outputMsg = "";
+
+  Config rangerUsersyncConfig = cluster.getDesiredConfigByType(RANGER_USERSYNC_CONFIG_TYPE);
+
+  if (null == rangerUsersyncConfig) {
+    return createCommandReport(0, HostRoleStatus.COMPLETED, "{}",
+      MessageFormat.format("Config type {0} not found, skipping updating property in same.", RANGER_USERSYNC_CONFIG_TYPE), "");
+  }
+
+  String ldapGroupHierarchy = "0";
+
+  if (rangerUsersyncConfig.getProperties().containsKey("ranger.usersync.ldap.grouphierarchylevels")) {
+    ldapGroupHierarchy = rangerUsersyncConfig.getProperties().get("ranger.usersync.ldap.grouphierarchylevels");
+  } else {
+    Map<String, String> targetRangerUsersyncConfig = rangerUsersyncConfig.getProperties();
+    targetRangerUsersyncConfig.put("ranger.usersync.ldap.grouphierarchylevels", ldapGroupHierarchy);
+    rangerUsersyncConfig.setProperties(targetRangerUsersyncConfig);
+    rangerUsersyncConfig.save();
+
+    outputMsg = outputMsg + MessageFormat.format("Successfully updated {0} config type.\n", RANGER_USERSYNC_CONFIG_TYPE);
+  }
+
+  Config rangerEnvConfig = cluster.getDesiredConfigByType(RANGER_ENV_CONFIG_TYPE);
+
+  if (null == rangerEnvConfig) {
+    return createCommandReport(0, HostRoleStatus.COMPLETED, "{}",
+      MessageFormat.format("Config type {0} not found, skipping updating property in same.", RANGER_ENV_CONFIG_TYPE), "");
+  }
+
+  String enableSyncNestedGroup = "false";
+
+  if (!ldapGroupHierarchy.equals("0") ) {
+    enableSyncNestedGroup = "true";
+  }
+
+  Map<String, String> targetRangerEnvConfig = rangerEnvConfig.getProperties();
+  targetRangerEnvConfig.put("is_nested_groupsync_enabled", enableSyncNestedGroup);
+  rangerEnvConfig.setProperties(targetRangerEnvConfig);
+  rangerEnvConfig.save();
+
+  outputMsg = outputMsg + MessageFormat.format("Successfully updated {0} config type.\n", RANGER_ENV_CONFIG_TYPE);
+
+  return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outputMsg, "");
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-env.xml b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-env.xml
index 627216e..dfc9ca9 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-env.xml
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-env.xml
@@ -47,4 +47,27 @@
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
+  <property>
+    <name>is_nested_groupsync_enabled</name>
+    <display-name>Sync Nested Groups</display-name>
+    <description/>
+    <value>false</value>
+    <value-attributes>
+      <type>value-list</type>
+      <overridable>false</overridable>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>Yes</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>No</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
 </configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-ugsync-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-ugsync-site.xml b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-ugsync-site.xml
index a994856..6c244f2 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-ugsync-site.xml
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/configuration/ranger-ugsync-site.xml
@@ -72,4 +72,11 @@
     </depends-on>
     <on-ambari-upgrade add="true"/>
   </property>
+  <property>
+    <name>ranger.usersync.ldap.grouphierarchylevels</name>
+    <display-name>Group Hierarchy Levels</display-name>
+    <value>0</value>
+    <description/>
+    <on-ambari-upgrade add="false"/>
+  </property>
 </configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/0.7.0/themes/theme_version_5.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/themes/theme_version_5.json b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/themes/theme_version_5.json
index 8068a38..ed073b4 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.7.0/themes/theme_version_5.json
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.7.0/themes/theme_version_5.json
@@ -9,6 +9,34 @@
           "subsection-tab-name": "ldap-common-configs"
         },
         {
+          "config": "ranger-env/is_nested_groupsync_enabled",
+          "subsection-name": "subsection-ranger-user-row2-col1",
+          "subsection-tab-name": "ldap-group-configs"
+        },
+        {
+          "config": "ranger-ugsync-site/ranger.usersync.ldap.grouphierarchylevels",
+          "subsection-name": "subsection-ranger-user-row2-col1",
+          "subsection-tab-name": "ldap-group-configs",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-env/is_nested_groupsync_enabled"
+              ],
+              "if": "${ranger-env/is_nested_groupsync_enabled}",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
           "config": "ranger-env/ranger-nifi-plugin-enabled",
           "subsection-name": "section-ranger-plugin-row1-col1",
           "depends-on": [
@@ -38,6 +66,18 @@
         }
       },
       {
+        "config": "ranger-env/is_nested_groupsync_enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "ranger-ugsync-site/ranger.usersync.ldap.grouphierarchylevels",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
         "config": "ranger-env/ranger-nifi-plugin-enabled",
         "widget": {
           "type": "toggle"

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-env.xml b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-env.xml
index ff44901..764e73e 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-env.xml
+++ b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-env.xml
@@ -500,4 +500,27 @@
     </value-attributes>
     <on-ambari-upgrade add="false"/>
   </property>
+  <property>
+    <name>is_nested_groupsync_enabled</name>
+    <display-name>Sync Nested Groups</display-name>
+    <description/>
+    <value>false</value>
+    <value-attributes>
+      <type>value-list</type>
+      <overridable>false</overridable>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>Yes</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>No</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-ugsync-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-ugsync-site.xml b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-ugsync-site.xml
index 80babd6..0d3ad26 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-ugsync-site.xml
+++ b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/configuration/ranger-ugsync-site.xml
@@ -568,4 +568,11 @@
     <description/>
     <on-ambari-upgrade add="false"/>
   </property>
+  <property>
+    <name>ranger.usersync.ldap.grouphierarchylevels</name>
+    <display-name>Group Hierarchy Levels</display-name>
+    <value>0</value>
+    <description/>
+    <on-ambari-upgrade add="false"/>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/themes/theme_version_1.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/themes/theme_version_1.json b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/themes/theme_version_1.json
index a307f56..679ee3d 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/themes/theme_version_1.json
+++ b/ambari-server/src/main/resources/common-services/RANGER/1.0.0.3.0/themes/theme_version_1.json
@@ -842,6 +842,34 @@
           ]
         },
         {
+          "config": "ranger-env/is_nested_groupsync_enabled",
+          "subsection-name": "subsection-ranger-user-row2-col1",
+          "subsection-tab-name": "ldap-group-configs"
+        },
+        {
+          "config": "ranger-ugsync-site/ranger.usersync.ldap.grouphierarchylevels",
+          "subsection-name": "subsection-ranger-user-row2-col1",
+          "subsection-tab-name": "ldap-group-configs",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-env/is_nested_groupsync_enabled"
+              ],
+              "if": "${ranger-env/is_nested_groupsync_enabled}",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
           "config": "ranger-env/ranger-hdfs-plugin-enabled",
           "subsection-name": "section-ranger-plugin-row1-col1",
           "depends-on": [
@@ -1643,6 +1671,18 @@
         }
       },
       {
+        "config": "ranger-env/is_nested_groupsync_enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "ranger-ugsync-site/ranger.usersync.ldap.grouphierarchylevels",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
         "config": "ranger-env/ranger-hdfs-plugin-enabled",
         "widget": {
           "type": "toggle"

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/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 bce1e86..ebb81d9 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
@@ -391,6 +391,13 @@
         <task xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver"/>
       </execute-stage>
 
+      <!-- RANGER -->
+      <execute-stage service="RANGER" component="RANGER_USERSYNC" title="Enabling Nested Group Sync for Ranger">
+        <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.RangerUsersyncConfigCalculation">
+          <summary>Enabling Nested Group Sync for Ranger</summary>
+        </task>
+      </execute-stage>
+
     </group>
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/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 d5f2324..ae5972e 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
@@ -555,6 +555,14 @@
       </component>
 
       <component name="RANGER_USERSYNC">
+        <pre-upgrade>
+          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.RangerUsersyncConfigCalculation">
+            <summary>Enabling Nested Group Sync for Ranger</summary>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->
+
         <upgrade>
           <task xsi:type="restart-task" />
         </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ea892443/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculationTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculationTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculationTest.java
new file mode 100644
index 0000000..427fb33
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculationTest.java
@@ -0,0 +1,126 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.serveraction.upgrades;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.inject.Injector;
+
+public class RangerUsersyncConfigCalculationTest {
+
+  private Injector m_injector;
+  private Clusters m_clusters;
+  private Field m_clusterField;
+
+  @Before
+  public void setup() throws Exception {
+    m_injector = createMock(Injector.class);
+    m_clusters = createMock(Clusters.class);
+    Cluster cluster = createMock(Cluster.class);
+
+    Map<String, String> mockRangerUsersyncProperties = new HashMap<String, String>() {
+      {
+        put("ranger.usersync.ldap.grouphierarchylevels", "2");
+      }
+    };
+
+    Map<String, String> mockRangerEnvProperties = new HashMap<String, String>();
+
+    Config rangerUsersyncConfig = createMock(Config.class);
+    expect(rangerUsersyncConfig.getType()).andReturn("ranger-ugsync-site").anyTimes();
+    expect(rangerUsersyncConfig.getProperties()).andReturn(mockRangerUsersyncProperties).anyTimes();
+
+    Config rangerEnvConfig = createMock(Config.class);
+    expect(rangerEnvConfig.getType()).andReturn("ranger-env").anyTimes();
+    expect(rangerEnvConfig.getProperties()).andReturn(mockRangerEnvProperties).anyTimes();
+
+    rangerEnvConfig.setProperties(anyObject(Map.class));
+    expectLastCall().atLeastOnce();
+
+    rangerEnvConfig.save();
+    expectLastCall().atLeastOnce();
+
+    expect(cluster.getDesiredConfigByType("ranger-ugsync-site")).andReturn(rangerUsersyncConfig).atLeastOnce();
+    expect(cluster.getDesiredConfigByType("ranger-env")).andReturn(rangerEnvConfig).atLeastOnce();
+    expect(m_clusters.getCluster((String) anyObject())).andReturn(cluster).anyTimes();
+    expect(m_injector.getInstance(Clusters.class)).andReturn(m_clusters).atLeastOnce();
+
+    replay(m_injector, m_clusters, cluster, rangerUsersyncConfig, rangerEnvConfig);
+
+    m_clusterField = RangerUsersyncConfigCalculation.class.getDeclaredField("m_clusters");
+    m_clusterField.setAccessible(true);
+
+  }
+
+  @Test
+  public void testAction() throws Exception {
+
+    Map<String, String> commandParams = new HashMap<String, String>();
+    commandParams.put("clusterName", "cl1");
+
+    ExecutionCommand executionCommand = new ExecutionCommand();
+    executionCommand.setCommandParams(commandParams);
+    executionCommand.setClusterName("cl1");
+
+    HostRoleCommand hrc = createMock(HostRoleCommand.class);
+    expect(hrc.getRequestId()).andReturn(1L).anyTimes();
+    expect(hrc.getStageId()).andReturn(2L).anyTimes();
+    expect(hrc.getExecutionCommandWrapper()).andReturn(new ExecutionCommandWrapper(executionCommand)).anyTimes();
+    replay(hrc);
+
+    RangerUsersyncConfigCalculation action = new RangerUsersyncConfigCalculation();
+    m_clusterField.set(action, m_clusters);
+
+    action.setExecutionCommand(executionCommand);
+    action.setHostRoleCommand(hrc);
+
+    CommandReport report = action.execute(null);
+    Assert.assertNotNull(report);
+
+    Cluster cl = m_clusters.getCluster("cl1");
+    Config config = cl.getDesiredConfigByType("ranger-env");
+
+    Map<String, String> map = config.getProperties();
+
+    Assert.assertTrue(map.containsKey("is_nested_groupsync_enabled"));
+    Assert.assertEquals("true", map.get("is_nested_groupsync_enabled"));
+
+    report = action.execute(null);
+    Assert.assertNotNull(report);
+
+  }
+}
\ No newline at end of file


[08/50] [abbrv] ambari git commit: AMBARI-22010 - Incorrect symlink for storm after patch upgrade (jonathanhurley)

Posted by jl...@apache.org.
AMBARI-22010 - Incorrect symlink for storm after patch upgrade (jonathanhurley)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 25c1f211ef165611fcf52bd75b7a851c857f04a9
Parents: 73bd428
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Sep 20 15:51:38 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Sep 20 16:24:30 2017 -0400

----------------------------------------------------------------------
 .../main/resources/stacks/HDP/2.0.6/properties/stack_packages.json | 2 ++
 .../main/resources/stacks/HDP/3.0/properties/stack_packages.json   | 2 ++
 2 files changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/25c1f211/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json
index ec35f2b..2db0a74 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_packages.json
@@ -796,9 +796,11 @@
         "SUPERVISOR": {
           "STACK-SELECT-PACKAGE": "storm-supervisor",
           "INSTALL": [
+            "storm-client",
             "storm-supervisor"
           ],
           "PATCH": [
+            "storm-client",
             "storm-supervisor"
           ],
           "STANDARD": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/25c1f211/ambari-server/src/main/resources/stacks/HDP/3.0/properties/stack_packages.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/3.0/properties/stack_packages.json b/ambari-server/src/main/resources/stacks/HDP/3.0/properties/stack_packages.json
index 9012e92..be4c718 100644
--- a/ambari-server/src/main/resources/stacks/HDP/3.0/properties/stack_packages.json
+++ b/ambari-server/src/main/resources/stacks/HDP/3.0/properties/stack_packages.json
@@ -716,9 +716,11 @@
         "SUPERVISOR": {
           "STACK-SELECT-PACKAGE": "storm-supervisor",
           "INSTALL": [
+            "storm-client",
             "storm-supervisor"
           ],
           "PATCH": [
+            "storm-client",
             "storm-supervisor"
           ],
           "STANDARD": [


[18/50] [abbrv] ambari git commit: AMBARI-22027. Add UID/GID related issue with external users not listed in /etc/passwd (echekanskiy)

Posted by jl...@apache.org.
AMBARI-22027. Add UID/GID related issue with external users not listed in /etc/passwd (echekanskiy)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: f1b53000c65a97ac7784d51c9a648e7e135acaab
Parents: 2a06021
Author: Eugene Chekanskiy <ec...@apache.org>
Authored: Thu Sep 21 21:07:03 2017 +0300
Committer: Eugene Chekanskiy <ec...@apache.org>
Committed: Thu Sep 21 21:07:03 2017 +0300

----------------------------------------------------------------------
 .../before-ANY/scripts/shared_initialization.py | 29 +++++--
 .../2.0.6/hooks/before-ANY/test_before_any.py   | 85 ++++----------------
 2 files changed, 36 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f1b53000/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/shared_initialization.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/shared_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/shared_initialization.py
index ee950e8..11593fe 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/shared_initialization.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/shared_initialization.py
@@ -139,11 +139,19 @@ def set_uid(user, user_dirs):
        content=StaticFile("changeToSecureUid.sh"),
        mode=0555)
   ignore_groupsusers_create_str = str(params.ignore_groupsusers_create).lower()
-  uid = get_uid(user)
+  uid = get_uid(user, return_existing=True)
   Execute(format("{tmp_dir}/changeUid.sh {user} {user_dirs} {new_uid}", new_uid=0 if uid is None else uid),
           not_if = format("(test $(id -u {user}) -gt 1000) || ({ignore_groupsusers_create_str})"))
 
-def get_uid(user):
+def get_uid(user, return_existing=False):
+  """
+  Tries to get UID for username. It will try to find UID in custom properties in *cluster_env* and, if *return_existing=True*,
+  it will try to return UID of existing *user*.
+
+  :param user: username to get UID for
+  :param return_existing: return UID for existing user
+  :return:
+  """
   import params
   user_str = str(user) + "_uid"
   service_env = [ serviceEnv for serviceEnv in params.config['configurations'] if user_str in params.config['configurations'][serviceEnv]]
@@ -155,13 +163,18 @@ def get_uid(user):
       Logger.warning("Multiple values found for %s, using %s"  % (user_str, uid))
     return uid
   else:
-    if user == params.smoke_user:
+    if return_existing:
+      # pick up existing UID or try to find available UID in /etc/passwd, see changeToSecureUid.sh for more info
+      if user == params.smoke_user:
+        return None
+      File(format("{tmp_dir}/changeUid.sh"),
+           content=StaticFile("changeToSecureUid.sh"),
+           mode=0555)
+      code, newUid = shell.call(format("{tmp_dir}/changeUid.sh {user}"))
+      return int(newUid)
+    else:
+      # do not return UID for existing user, used in User resource call to let OS to choose UID for us
       return None
-    File(format("{tmp_dir}/changeUid.sh"),
-         content=StaticFile("changeToSecureUid.sh"),
-         mode=0555)
-    code, newUid = shell.call(format("{tmp_dir}/changeUid.sh {user}"))
-    return int(newUid)
 
 def setup_hadoop_env():
   import params

http://git-wip-us.apache.org/repos/asf/ambari/blob/f1b53000/ambari-server/src/test/python/stacks/2.0.6/hooks/before-ANY/test_before_any.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-ANY/test_before_any.py b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-ANY/test_before_any.py
index a13ac24..9dceb69 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-ANY/test_before_any.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-ANY/test_before_any.py
@@ -52,33 +52,22 @@ class TestHookBeforeInstall(RMFTestCase):
     self.assertResourceCalled('Group', 'hadoop',)
     self.assertResourceCalled('Group', 'nobody',)
     self.assertResourceCalled('Group', 'users',)
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
+
     self.assertResourceCalled('User', 'hive',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'oozie',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'users'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'nobody',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'nobody'],
                               fetch_nonlocal_groups = True,
                               )
@@ -88,113 +77,69 @@ class TestHookBeforeInstall(RMFTestCase):
                               groups = [u'users'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'flume',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'hdfs',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'storm',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'mapred',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'hbase',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'tez',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'users'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'zookeeper',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'falcon',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'users'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'sqoop',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'yarn',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )
-    self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
     self.assertResourceCalled('User', 'hcat',
                               gid = 'hadoop',
-                              uid = 1000,
+                              uid = None,
                               groups = [u'hadoop'],
                               fetch_nonlocal_groups = True,
                               )


[11/50] [abbrv] ambari git commit: AMBARI-22022. NullPointerException in ActionScheduler when using DEPENDENCY_ORDERED execution (magyari_sandor)

Posted by jl...@apache.org.
AMBARI-22022. NullPointerException in ActionScheduler when using DEPENDENCY_ORDERED execution (magyari_sandor)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 3e5f60ab9d30761df08923c4e56dd518fc71d271
Parents: 1a5b494
Author: Sandor Magyari <sm...@hortonworks.com>
Authored: Thu Sep 21 14:35:51 2017 +0200
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Thu Sep 21 15:44:54 2017 +0200

----------------------------------------------------------------------
 .../ambari/server/actionmanager/ActionScheduler.java      | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3e5f60ab/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
index 00e4184..0157f8b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
@@ -921,12 +921,14 @@ class ActionScheduler implements Runnable {
       RoleCommandPair roleCommand = new
               RoleCommandPair(Role.valueOf(command.getRole()), command.getRoleCommand());
       Set<RoleCommandPair> roleCommandDependencies = rco.getDependencies().get(roleCommand);
-      // remove eventual references to the same RoleCommand
-      roleCommandDependencies.remove(roleCommand);
 
       // check if there are any dependencies IN_PROGRESS
-      if (roleCommandDependencies != null && CollectionUtils.containsAny(rolesCommandsInProgress, roleCommandDependencies)) {
-        areCommandDependenciesFinished = false;
+      if (roleCommandDependencies != null) {
+        // remove eventual references to the same RoleCommand
+        roleCommandDependencies.remove(roleCommand);
+        if (CollectionUtils.containsAny(rolesCommandsInProgress, roleCommandDependencies)) {
+          areCommandDependenciesFinished = false;
+        }
       }
     }
 


[43/50] [abbrv] ambari git commit: AMBARI-22054 Log Search UI: implement 'Capture' functionality. (ababiichuk)

Posted by jl...@apache.org.
AMBARI-22054 Log Search UI: implement 'Capture' functionality. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 653d2f260c05ea0e8efa4400b9d5accb5e5b39b7
Parents: 08da961
Author: ababiichuk <ab...@hortonworks.com>
Authored: Mon Sep 25 20:00:41 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Mon Sep 25 20:00:41 2017 +0300

----------------------------------------------------------------------
 .../ambari-logsearch-web/src/app/app.module.ts  |  6 +-
 .../queries/audit-logs-query-params.class.ts    |  2 -
 .../dropdown-button.component.spec.ts           | 21 ++++++-
 .../filter-button.component.spec.ts             | 21 ++++++-
 .../filter-dropdown.component.spec.ts           | 26 +++++++-
 .../filters-panel/filters-panel.component.html  | 11 ++--
 .../filters-panel/filters-panel.component.less  |  4 ++
 .../filters-panel.component.spec.ts             |  6 +-
 .../filters-panel/filters-panel.component.ts    |  4 ++
 .../logs-container.component.html               |  5 ++
 .../logs-container.component.less               |  4 ++
 .../logs-container.component.spec.ts            |  4 +-
 .../logs-container/logs-container.component.ts  | 10 ++++
 .../menu-button/menu-button.component.html      |  2 +-
 .../menu-button/menu-button.component.spec.ts   | 22 ++++++-
 .../app/components/modal/modal.component.html   |  2 +-
 .../search-box/search-box.component.html        |  2 +-
 .../time-range-picker.component.html            |  4 +-
 .../time-range-picker.component.ts              | 13 ++--
 .../timezone-picker.component.spec.ts           | 21 ++++++-
 .../components/top-menu/top-menu.component.html |  2 +-
 .../top-menu/top-menu.component.spec.ts         |  2 +
 .../src/app/components/variables.less           |  2 +-
 .../src/app/pipes/timer-seconds.pipe.spec.ts    | 37 ++++++++++++
 .../src/app/pipes/timer-seconds.pipe.ts         | 41 +++++++++++++
 .../services/component-actions.service.spec.ts  | 21 ++++++-
 .../app/services/component-actions.service.ts   | 15 ++++-
 .../src/app/services/filtering.service.ts       | 63 +++++++++++++-------
 .../src/app/services/logs-container.service.ts  |  6 +-
 .../src/app/services/mock-api-data.service.ts   |  4 +-
 .../src/app/services/utils.service.ts           |  6 ++
 .../src/assets/i18n/en.json                     | 10 ++--
 32 files changed, 328 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
index fca68b5..c4dc698 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
@@ -78,8 +78,9 @@ import {TimeRangePickerComponent} from '@app/components/time-range-picker/time-r
 import {DatePickerComponent} from '@app/components/date-picker/date-picker.component';
 
 import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
+import {TimerSecondsPipe} from '@app/pipes/timer-seconds.pipe';
 
-export function HttpLoaderFactory(http: Http) {
+export function HttpLoaderFactory(http: Http): TranslateHttpLoader {
   // adding 'static' parameter to step over mock data request
   return new TranslateHttpLoader(http, 'resources/assets/i18n/', '.json?static=true');
 }
@@ -123,7 +124,8 @@ export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSR
     SearchBoxComponent,
     TimeRangePickerComponent,
     DatePickerComponent,
-    TimeZoneAbbrPipe
+    TimeZoneAbbrPipe,
+    TimerSecondsPipe
   ],
   imports: [
     BrowserModule,

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
index d179376..e36bf18 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
@@ -36,8 +36,6 @@ export class AuditLogsQueryParams extends QueryParams {
   startIndex: string;
   sortBy?: string;
   sortType?: string;
-  start_time?: string;
-  end_time?: string;
   clusters?: string;
   mustBe?: string;
   mustNot?: string;

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
index 04730ef..f7227b1 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
@@ -25,10 +25,16 @@ import {ClustersService, clusters} from '@app/services/storage/clusters.service'
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {UtilsService} from '@app/services/utils.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {HttpClientService} from '@app/services/http-client.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
 
 import {DropdownButtonComponent} from './dropdown-button.component';
 
@@ -45,7 +51,12 @@ describe('DropdownButtonComponent', () => {
           clusters,
           components,
           appState,
-          hosts
+          hosts,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData
         }),
         ...TranslationModules
       ],
@@ -55,10 +66,16 @@ describe('DropdownButtonComponent', () => {
         ComponentsService,
         AppStateService,
         HostsService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         FilteringService,
         UtilsService,
         ComponentActionsService,
-        HttpClientService
+        HttpClientService,
+        LogsContainerService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
index fddf645..a01a3f3 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
@@ -25,10 +25,16 @@ import {ClustersService, clusters} from '@app/services/storage/clusters.service'
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {UtilsService} from '@app/services/utils.service';
 import {HttpClientService} from '@app/services/http-client.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
 
 import {FilterButtonComponent} from './filter-button.component';
 
@@ -45,7 +51,12 @@ describe('FilterButtonComponent', () => {
           clusters,
           components,
           appState,
-          hosts
+          hosts,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData
         }),
         ...TranslationModules
       ],
@@ -55,10 +66,16 @@ describe('FilterButtonComponent', () => {
         ComponentsService,
         AppStateService,
         HostsService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         ComponentActionsService,
         FilteringService,
         UtilsService,
-        HttpClientService
+        HttpClientService,
+        LogsContainerService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
index 8620607..85e7ecb 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
@@ -20,9 +20,17 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {UtilsService} from '@app/services/utils.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {HttpClientService} from '@app/services/http-client.service';
 
 import {FilterDropdownComponent} from './filter-dropdown.component';
 
@@ -51,18 +59,32 @@ describe('FilterDropdownComponent', () => {
       declarations: [FilterDropdownComponent],
       imports: [
         StoreModule.provideStore({
-          appSettings
+          appSettings,
+          appState,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData
         }),
         ...TranslationModules
       ],
       providers: [
         AppSettingsService,
+        AppStateService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         {
           provide: FilteringService,
           useValue: filtering
         },
         UtilsService,
-        ComponentActionsService
+        ComponentActionsService,
+        LogsContainerService,
+        HttpClientService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
index 99dd43d..fc3dac8 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
@@ -33,15 +33,18 @@
   <div class="default-flex col-md-4">
     <dropdown-button [options]="searchBoxItems" iconClass="fa fa-search-minus" label="filter.excluded"
                      [hideCaret]="true" [showSelectedValue]="false" action="proceedWithExclude"></dropdown-button>
-    <filter-button formControlName="hosts" [label]="filters.hosts.label"
+    <filter-button formControlName="hosts" label="{{filters.hosts.label | translate}}"
                    [iconClass]="filters.hosts.iconClass" [subItems]="filters.hosts.options"
                    [isMultipleChoice]="true" [isRightAlign]="true"
                    additionalLabelComponentSetter="getDataForHostsNodeBar"></filter-button>
-    <filter-button formControlName="components" [label]="filters.components.label"
+    <filter-button formControlName="components" label="{{filters.components.label | translate}}"
                    [iconClass]="filters.components.iconClass" [subItems]="filters.components.options"
                    [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
-    <filter-button formControlName="levels" [label]="filters.levels.label" [iconClass]="filters.levels.iconClass"
+    <filter-button formControlName="levels" label="{{filters.levels.label | translate}}" [iconClass]="filters.levels.iconClass"
                    [subItems]="filters.levels.options" [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
-    <menu-button label="filter.capture" iconClass="fa fa-caret-right"></menu-button>
+    <menu-button *ngIf="!captureSeconds" label="{{'filter.capture' | translate}}" iconClass="fa fa-caret-right"
+                 action="startCapture"></menu-button>
+    <menu-button *ngIf="captureSeconds" label="{{captureSeconds | timerSeconds}}" iconClass="fa fa-stop stop-icon"
+                 action="stopCapture"></menu-button>
   </div>
 </form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
index 9d901ca..4607d34 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
@@ -62,4 +62,8 @@
       }
     }
   }
+
+  /deep/ .stop-icon {
+    color: @error-color;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
index fe2e40a..ae5a4af 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
@@ -34,6 +34,7 @@ import {FilteringService} from '@app/services/filtering.service';
 import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
+import {TimerSecondsPipe} from '@app/pipes/timer-seconds.pipe';
 
 import {FiltersPanelComponent} from './filters-panel.component';
 
@@ -51,7 +52,10 @@ describe('FiltersPanelComponent', () => {
       }
     };
     TestBed.configureTestingModule({
-      declarations: [FiltersPanelComponent],
+      declarations: [
+        FiltersPanelComponent,
+        TimerSecondsPipe
+      ],
       imports: [
         StoreModule.provideStore({
           appSettings,

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
index 42056c6..c345c81 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
@@ -89,4 +89,8 @@ export class FiltersPanelComponent {
     return this.filtering.queryParameterAdd;
   }
 
+  get captureSeconds(): number {
+    return this.filtering.captureSeconds;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
index a43f6c0..5145b76 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
@@ -15,6 +15,11 @@
   limitations under the License.
 -->
 
+<div *ngIf="autoRefreshRemainingSeconds" class="col-md-12">
+  <div class="auto-refresh-message pull-right">
+    {{'filter.capture.triggeringRefresh' | translate: autoRefreshMessageParams}}
+  </div>
+</div>
 <time-histogram class="col-md-12" [data]="histogramData" [customOptions]="histogramOptions"></time-histogram>
 <dropdown-button class="pull-right" label="logs.columns" [options]="availableColumns | async" [isRightAlign]="true"
                  isMultipleChoice="true" action="updateSelectedColumns"

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
index 60082d6..cd28efc 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
@@ -22,4 +22,8 @@
   display: block;
   overflow: hidden;
   padding-top: @block-margin-top;
+
+  .auto-refresh-message {
+    background-color: @filters-panel-background-color;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
index 30c6a33..811c6e6 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
@@ -19,6 +19,7 @@
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {StoreModule} from '@ngrx/store';
+import {TranslationModules} from '@app/test-config.spec';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
@@ -63,7 +64,8 @@ describe('LogsContainerComponent', () => {
           serviceLogsFields,
           serviceLogsHistogramData,
           hosts
-        })
+        }),
+        ...TranslationModules
       ],
       providers: [
         {

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
index 3e2a6c7..b1fad17 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
@@ -102,4 +102,14 @@ export class LogsContainerComponent implements OnInit {
     return this.filtering.filtersForm;
   }
 
+  get autoRefreshRemainingSeconds(): number {
+    return this.filtering.autoRefreshRemainingSeconds;
+  }
+
+  get autoRefreshMessageParams(): any {
+    return {
+      remainingSeconds: this.autoRefreshRemainingSeconds
+    };
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
index 2f05656..ca70927 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
@@ -21,7 +21,7 @@
   <a #dropdownToggle class="dropdown-toggle caret" data-toggle="dropdown" *ngIf="hasCaret"></a>
   <br>
   <a *ngIf="label" (mousedown)="onMouseDown($event)" [ngClass]="labelClass" (mouseup)="onMouseUp($event)"
-     (click)="$event.stopPropagation()">{{label | translate}}</a>
+     (click)="$event.stopPropagation()">{{label}}</a>
   <ul data-component="dropdown-list" *ngIf="hasSubItems" [items]="subItems" (selectedItemChange)="updateValue($event)"
       [isMultipleChoice]="isMultipleChoice" [additionalLabelComponentSetter]="additionalLabelComponentSetter"
       [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"></ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
index f736fd5..f92961e 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
@@ -25,10 +25,15 @@ import {AppStateService, appState} from '@app/services/storage/app-state.service
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {HttpClientService} from '@app/services/http-client.service';
-import {ListItem} from "@app/classes/list-item.class";
+import {LogsContainerService} from '@app/services/logs-container.service';
 
 import {MenuButtonComponent} from './menu-button.component';
 
@@ -45,7 +50,12 @@ describe('MenuButtonComponent', () => {
           appState,
           clusters,
           components,
-          hosts
+          hosts,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData
         }),
         ...TranslationModules
       ],
@@ -55,9 +65,15 @@ describe('MenuButtonComponent', () => {
         ClustersService,
         ComponentsService,
         HostsService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         ComponentActionsService,
         FilteringService,
-        HttpClientService
+        HttpClientService,
+        LogsContainerService
       ],
       schemas: [NO_ERRORS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
index abd7bc8..398a429 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
@@ -21,7 +21,7 @@
     <div class="modal-content">
       <div *ngIf="showHeader" class="modal-header">
         <button *ngIf="showCloseButton" type="button" class="close" data-dismiss="modal" (click)="onClose()">
-          <span>&times;</span>
+          <span class="fa fa-times"></span>
         </button>
         <h4 *ngIf="title">{{title}}</h4>
       </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
index e88159c..92f9520 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.html
@@ -19,7 +19,7 @@
   <span *ngIf="parameter.isExclude" class="fa fa-search-minus exclude-icon"></span>
   {{parameter.label | translate}}:
   <span class="parameter-value">{{parameter.value}}</span>
-  <span class="remove-parameter" (click)="removeParameter($event, parameter.id)">&times;</span>
+  <span class="fa fa-times remove-parameter" (click)="removeParameter($event, parameter.id)"></span>
 </label>
 <span class="active-parameter-label" *ngIf="isActive && activeItem">{{activeItem.name | translate}}:</span>
 <div [ngClass]="{'search-item-container': true, 'active': isActive, 'value': isValueInput}">

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.html
index 6921b53..973db61 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.html
@@ -20,7 +20,7 @@
 </button>
 <div class="dropdown-menu row col-md-12">
   <div class="col-md-4" (click)="$event.stopPropagation()">
-    <h4>{{'filters.timeRange' | translate}}</h4>
+    <h4>{{'filter.timeRange' | translate}}</h4>
     <date-picker (timeChange)="setStartTime($event)"></date-picker>
     <date-picker (timeChange)="setEndTime($event)"></date-picker>
     <button class="btn btn-success pull-right" type="button" (click)="setCustomTimeRange()"
@@ -29,7 +29,7 @@
     </button>
   </div>
   <div class="col-md-8 row">
-    <h4>{{'filters.timeRange.quick' | translate}}</h4>
+    <h4>{{'filter.timeRange.quick' | translate}}</h4>
     <div *ngFor="let group of quickRanges" [ngClass]="'col-md-' + 12 / quickRanges.length">
       <div *ngFor="let option of group">
         <span class="time-range-name" (click)="setTimeRange(option.value, option.label)">

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.ts
index fc740de..fc0f6ae 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.ts
@@ -18,6 +18,7 @@
 
 import {Component, OnInit, Input, forwardRef} from '@angular/core';
 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
+import {Moment} from 'moment';
 import {FilteringService} from '@app/services/filtering.service';
 
 @Component({
@@ -46,9 +47,9 @@ export class TimeRangePickerComponent implements OnInit, ControlValueAccessor {
 
   selectedLabel: string;
 
-  startTime: number;
+  startTime: Moment;
 
-  endTime: number;
+  endTime: Moment;
 
   private onChange: (fn: any) => void;
 
@@ -67,12 +68,12 @@ export class TimeRangePickerComponent implements OnInit, ControlValueAccessor {
     this.onChange(newValue);
   }
 
-  setStartTime(timeStamp: number): void {
-    this.startTime = timeStamp;
+  setStartTime(timeObject: Moment): void {
+    this.startTime = timeObject;
   }
 
-  setEndTime(timeStamp: number): void {
-    this.endTime = timeStamp;
+  setEndTime(timeObject: Moment): void {
+    this.endTime = timeObject;
   }
 
   setTimeRange(value: any, label: string) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
index abbc9ce..7d1e907 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
@@ -24,9 +24,15 @@ import {AppStateService, appState} from '@app/services/storage/app-state.service
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {HttpClientService} from '@app/services/http-client.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
 import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
 import {ModalComponent} from '@app/components/modal/modal.component';
 
@@ -49,7 +55,12 @@ describe('TimeZonePickerComponent', () => {
           appState,
           clusters,
           components,
-          hosts
+          hosts,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData
         }),
         ...TranslationModules
       ],
@@ -59,9 +70,15 @@ describe('TimeZonePickerComponent', () => {
         ClustersService,
         ComponentsService,
         HostsService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         ComponentActionsService,
         FilteringService,
-        HttpClientService
+        HttpClientService,
+        LogsContainerService
       ],
     })
     .compileComponents();

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
index 6898354..3af1a69 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
@@ -15,7 +15,7 @@
   limitations under the License.
 -->
 
-<menu-button *ngFor="let item of items" [label]="item.label" [action]="item.action"
+<menu-button *ngFor="let item of items" label="{{item.label | translate}}" [action]="item.action"
              [iconClass]="item.iconClass" [labelClass]="item.labelClass"
              [subItems]="item.subItems" [hideCaret]="item.hideCaret">
 </menu-button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
index 1649a50..6679ba1 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
@@ -18,6 +18,7 @@
 
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {TranslationModules} from '@app/test-config.spec';
 
 import {TopMenuComponent} from './top-menu.component';
 
@@ -27,6 +28,7 @@ describe('TopMenuComponent', () => {
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
+      imports: TranslationModules,
       declarations: [TopMenuComponent],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]
     })

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
index ab95030..88b0c91 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
@@ -34,7 +34,7 @@
 @filters-panel-padding: 10px 0;
 @list-header-background-color: #F2F2F2;
 @checkbox-top: 4px;
-@dropdown-min-width: 200px;
+@dropdown-min-width: 160px;
 @dropdown-max-height: 500px; // TODO get rid of magic number, base on actual design
 @input-height: 34px;
 @input-padding: 10px;

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.spec.ts
new file mode 100644
index 0000000..a81e0cc
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.spec.ts
@@ -0,0 +1,37 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {UtilsService} from '@app/services/utils.service';
+
+import {TimerSecondsPipe} from './timer-seconds.pipe';
+
+describe('TimerSecondsPipe', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [
+        UtilsService
+      ]
+    });
+  });
+
+  it('create an instance', inject([UtilsService], (utils: UtilsService) => {
+    const pipe = new TimerSecondsPipe(utils);
+    expect(pipe).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.ts b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.ts
new file mode 100644
index 0000000..1b9dc76
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timer-seconds.pipe.ts
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+
+import {Pipe, PipeTransform} from '@angular/core';
+import {UtilsService} from '@app/services/utils.service';
+
+@Pipe({
+  name: 'timerSeconds'
+})
+export class TimerSecondsPipe implements PipeTransform {
+
+  constructor(private utils: UtilsService) {
+  }
+
+  transform(value: number): string {
+    const seconds = value % 60,
+      outputSeconds = this.utils.fitIntegerDigitsCount(seconds),
+      fullMinutes = (value - seconds) / 60,
+      minutes = fullMinutes % 60,
+      outputMinutes = this.utils.fitIntegerDigitsCount(minutes),
+      hours = (fullMinutes - minutes) / 60,
+      outputHours = hours ? `${this.utils.fitIntegerDigitsCount(hours)}:` : '';
+    return `${outputHours}${outputMinutes}:${outputSeconds}`;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
index f961907..e737155 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
@@ -22,8 +22,14 @@ import {AppSettingsService, appSettings} from '@app/services/storage/app-setting
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {HttpClientService} from '@app/services/http-client.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
 
 import {ComponentActionsService} from './component-actions.service';
 
@@ -44,7 +50,12 @@ describe('ComponentActionsService', () => {
           appSettings,
           clusters,
           components,
-          hosts
+          hosts,
+          auditLogs,
+          serviceLogs,
+          auditLogsFields,
+          serviceLogsFields,
+          serviceLogsHistogramData
         })
       ],
       providers: [
@@ -53,11 +64,17 @@ describe('ComponentActionsService', () => {
         ClustersService,
         ComponentsService,
         HostsService,
+        AuditLogsService,
+        ServiceLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
         FilteringService,
         {
           provide: HttpClientService,
           useValue: httpClient
-        }
+        },
+        LogsContainerService
       ]
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
index f29705c..dba0f8f 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
@@ -20,11 +20,12 @@ import {Injectable} from '@angular/core';
 import {AppSettingsService} from '@app/services/storage/app-settings.service';
 import {CollectionModelService} from '@app/models/store.model';
 import {FilteringService} from '@app/services/filtering.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
 
 @Injectable()
 export class ComponentActionsService {
 
-  constructor(private appSettings: AppSettingsService, private filtering: FilteringService) {
+  constructor(private appSettings: AppSettingsService, private filtering: FilteringService, private logsContainer: LogsContainerService) {
   }
 
   //TODO implement actions
@@ -35,12 +36,22 @@ export class ComponentActionsService {
   redo() {
   }
 
-  refresh() {
+  refresh(): void {
+    // TODO implement dynamic definition of logs type
+    this.logsContainer.loadLogs('serviceLogs');
   }
 
   openHistory() {
   }
 
+  startCapture(): void {
+    this.filtering.startCaptureTimer();
+  }
+
+  stopCapture(): void {
+    this.filtering.stopCaptureTimer();
+  }
+
   setTimeZone(timeZone: string): void {
     this.appSettings.setParameter('timeZone', timeZone);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
index beaf91c..6697c54 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -19,6 +19,10 @@
 import {Injectable} from '@angular/core';
 import {FormControl, FormGroup} from '@angular/forms';
 import {Subject} from 'rxjs/Subject';
+import {Observable} from 'rxjs/Observable';
+import 'rxjs/add/observable/timer';
+import 'rxjs/add/operator/takeUntil';
+import {Moment} from 'moment';
 import * as moment from 'moment-timezone';
 import {ListItem} from '@app/classes/list-item.class';
 import {AppSettingsService} from '@app/services/storage/app-settings.service';
@@ -190,16 +194,6 @@ export class FilteringService {
               unit: 'd'
             }
           },
-          // TODO implement time range calculation
-          /*
-          {
-            label: 'filter.timeRange.todaySoFar',
-            value: {
-              type: 'CURRENT',
-              unit: 'd'
-            }
-          },
-          */
           {
             label: 'filter.timeRange.thisWeek',
             value: {
@@ -207,16 +201,6 @@ export class FilteringService {
               unit: 'w'
             }
           },
-          // TODO implement time range calculation
-          /*
-          {
-            label: 'filter.timeRange.thisWeekSoFar',
-            value: {
-              type: 'CURRENT',
-              unit: 'w'
-            }
-          },
-          */
           {
             label: 'filter.timeRange.thisMonth',
             value: {
@@ -406,6 +390,43 @@ export class FilteringService {
 
   queryParameterAdd: Subject<any> = new Subject();
 
+  private stopTimer: Subject<any> = new Subject();
+
+  private stopAutoRefreshCountdown: Subject<any> = new Subject();
+
+  captureSeconds: number = 0;
+
+  private readonly autoRefreshInterval: number = 30000;
+
+  autoRefreshRemainingSeconds: number = 0;
+
+  private startCaptureMoment: Moment;
+
+  private stopCaptureMoment: Moment;
+
+  startCaptureTimer(): void {
+    this.startCaptureMoment = moment();
+    Observable.timer(0, 1000).takeUntil(this.stopTimer).subscribe(seconds => this.captureSeconds = seconds);
+  }
+
+  stopCaptureTimer(): void {
+    const autoRefreshIntervalSeconds = this.autoRefreshInterval / 1000;
+    this.stopCaptureMoment = moment();
+    this.captureSeconds = 0;
+    this.stopTimer.next();
+    Observable.timer(0, 1000).takeUntil(this.stopAutoRefreshCountdown).subscribe(seconds => {
+      this.autoRefreshRemainingSeconds = autoRefreshIntervalSeconds - seconds;
+      if (!this.autoRefreshRemainingSeconds) {
+        this.stopAutoRefreshCountdown.next();
+        this.filtersForm.controls.timeRange.setValue({
+          type: 'CUSTOM',
+          start: this.startCaptureMoment,
+          end: this.stopCaptureMoment
+        });
+      }
+    });
+  }
+
   loadClusters(): void {
     this.httpClient.get('clusters').subscribe(response => {
       const clusterNames = response.json();
@@ -498,8 +519,6 @@ export class FilteringService {
   }
 
   readonly valueGetters = {
-    end_time: this.getEndTime,
-    start_time: this.getStartTime,
     to: this.getEndTime,
     from: this.getStartTime,
     sortType: value => value && value.type,

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
index 26d1b6b..bef28cf 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
@@ -43,7 +43,7 @@ export class LogsContainerService {
 
   private readonly listFilters = {
     clusters: ['clusters'],
-    timeRange: ['end_time', 'start_time'],
+    timeRange: ['to', 'from'],
     components: ['mustBe'],
     levels: ['level'],
     hosts: ['hostList'],
@@ -111,9 +111,7 @@ export class LogsContainerService {
         let value;
         const valueGetter = this.filtering.valueGetters[paramName];
         if (valueGetter) {
-          if (paramName === 'start_time') {
-            value = valueGetter(inputValue, params['end_time']);
-          } else if (paramName === 'from') {
+          if (paramName === 'from') {
             value = valueGetter(inputValue, params['to']);
           } else {
             value = valueGetter(inputValue);

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
index 937fae1..8b157df 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
@@ -52,11 +52,11 @@ export class mockApiDataService implements InMemoryDbService {
           key: 'log_message',
           filterFunction: (value, filterValue) => value.toLowerCase().indexOf(filterValue.toLowerCase()) > -1
         },
-        start_time: {
+        from: {
           key: 'logtime',
           filterFunction: (value, filterValue) => value >= moment(filterValue).valueOf()
         },
-        end_time: {
+        to: {
           key: 'logtime',
           filterFunction: (value, filterValue) => value < moment(filterValue).valueOf()
         },

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
index 773172b..3448dd4 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
@@ -54,4 +54,10 @@ export class UtilsService {
     return !momentA.isSame(momentB, 'day');
   }
 
+  fitIntegerDigitsCount(numberToFormat: number, minLength: number = 2): string {
+    return numberToFormat.toLocaleString(undefined, {
+      minimumIntegerDigits: minLength
+    });
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/653d2f26/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
index 8750d64..0d40bc7 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -20,14 +20,14 @@
   "filter.clusters": "Clusters",
   "filter.components": "Components",
   "filter.levels": "Levels",
-  "filter.capture": "Capture",
   "filter.excluded": "Excluded",
   "filter.hosts": "Hosts",
 
-  "filters.timeRange": "Time Range",
-  "filters.timeRange.from": "from",
-  "filters.timeRange.to": "to",
-  "filters.timeRange.quick": "Quick Ranges",
+  "filter.capture": "Capture",
+  "filter.capture.triggeringRefresh": "Triggering auto-refresh in {{remainingSeconds}} sec",
+
+  "filter.timeRange": "Time Range",
+  "filter.timeRange.quick": "Quick Ranges",
   "filter.timeRange.7d": "Last 7 days",
   "filter.timeRange.30d": "Last 30 days",
   "filter.timeRange.60d": "Last 60 days",


[13/50] [abbrv] ambari git commit: AMBARI-22028 Downgrade button TypeError. (atkach)

Posted by jl...@apache.org.
AMBARI-22028 Downgrade button TypeError. (atkach)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 37b847069f1d2a07ed9deb5e580ba23e90b77ade
Parents: 001c77f
Author: Andrii Tkach <at...@apache.org>
Authored: Thu Sep 21 17:50:55 2017 +0300
Committer: Andrii Tkach <at...@apache.org>
Committed: Thu Sep 21 17:54:24 2017 +0300

----------------------------------------------------------------------
 .../app/controllers/global/cluster_controller.js    |  1 +
 .../controllers/global/cluster_controller_test.js   | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/37b84706/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 d61d61b..3689ba2 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -339,6 +339,7 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
       App.stackUpgradeHistoryMapper.map(data);
       upgradeController.loadStackVersionsToModel(true).done(function () {
         upgradeController.loadCompatibleVersions();
+        upgradeController.updateCurrentStackVersion();
         App.set('stackVersionsAvailable', App.StackVersion.find().content.length > 0);
       });
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/37b84706/ambari-web/test/controllers/global/cluster_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index 7f68efc..ff8e51c 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -445,8 +445,10 @@ describe('App.clusterController', function () {
       restoreLastUpgrade: Em.K,
       initDBProperties: Em.K,
       loadUpgradeData: Em.K,
+      loadCompatibleVersions: Em.K,
+      updateCurrentStackVersion: Em.K,
       loadStackVersionsToModel: function () {
-        return {done: Em.K};
+        return {done: Em.clb};
       }
     });
 
@@ -459,6 +461,8 @@ describe('App.clusterController', function () {
       sinon.spy(upgradeController, 'initDBProperties');
       sinon.spy(upgradeController, 'loadUpgradeData');
       sinon.spy(upgradeController, 'loadStackVersionsToModel');
+      sinon.spy(upgradeController, 'loadCompatibleVersions');
+      sinon.spy(upgradeController, 'updateCurrentStackVersion');
       sinon.stub(App.stackUpgradeHistoryMapper, 'map');
     });
 
@@ -471,6 +475,8 @@ describe('App.clusterController', function () {
       upgradeController.initDBProperties.restore();
       upgradeController.loadUpgradeData.restore();
       upgradeController.loadStackVersionsToModel.restore();
+      upgradeController.loadCompatibleVersions.restore();
+      upgradeController.updateCurrentStackVersion.restore();
       App.stackUpgradeHistoryMapper.map.restore();
     });
 
@@ -503,6 +509,14 @@ describe('App.clusterController', function () {
         expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
       });
 
+      it('loadCompatibleVersions should be called', function () {
+        expect(upgradeController.loadCompatibleVersions.calledOnce).to.be.true;
+      });
+
+      it('updateCurrentStackVersion should be called', function () {
+        expect(upgradeController.updateCurrentStackVersion.calledOnce).to.be.true;
+      });
+
       it('initDBProperties is not called', function () {
         expect(upgradeController.initDBProperties.called).to.be.false;
       });


[26/50] [abbrv] ambari git commit: AMBARI-22040. configs.py does not work properly when dealing with files (aonishuk)

Posted by jl...@apache.org.
AMBARI-22040. configs.py does not work properly when dealing with files (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 9e93c476ddd8d4397f550062fd1645ac5422ed2e
Parents: e4cadbb
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Sep 22 14:06:17 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Sep 22 14:06:17 2017 +0300

----------------------------------------------------------------------
 .../src/main/resources/scripts/configs.py       | 219 +++++++++++----
 .../src/main/resources/scripts/configs.sh       | 272 +------------------
 2 files changed, 168 insertions(+), 323 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9e93c476/ambari-server/src/main/resources/scripts/configs.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/scripts/configs.py b/ambari-server/src/main/resources/scripts/configs.py
index b524461..8d4de1c 100644
--- a/ambari-server/src/main/resources/scripts/configs.py
+++ b/ambari-server/src/main/resources/scripts/configs.py
@@ -18,11 +18,19 @@ See the License for the specific language governing permissions and
 limitations under the License.
 '''
 
+import optparse
+from optparse import OptionGroup
 import sys
 import urllib2
 import time
 import json
 import base64
+import xml
+import xml.etree.ElementTree as ET
+import os
+import logging
+
+logger = logging.getLogger('AmbariConfig')
 
 HTTP_PROTOCOL = 'http'
 HTTPS_PROTOCOL = 'https'
@@ -106,14 +114,14 @@ def create_new_desired_config(cluster, config_type, properties, attributes, acce
     new_config[CLUSTERS][DESIRED_CONFIGS][ATTRIBUTES] = attributes
   request_body = json.dumps(new_config)
   new_file = 'doSet_{0}.json'.format(new_tag)
-  print '### PUTting json into: {0}'.format(new_file)
+  logger.info('### PUTting json into: {0}'.format(new_file))
   output_to_file(new_file)(new_config)
   accessor(CLUSTERS_URL.format(cluster), PUT_REQUEST_TYPE, request_body)
-  print '### NEW Site:{0}, Tag:{1}'.format(config_type, new_tag)
+  logger.info('### NEW Site:{0}, Tag:{1}'.format(config_type, new_tag))
 
 def get_current_config(cluster, config_type, accessor):
   config_tag = get_config_tag(cluster, config_type, accessor)
-  print "### on (Site:{0}, Tag:{1})".format(config_type, config_tag)
+  logger.info("### on (Site:{0}, Tag:{1})".format(config_type, config_tag))
   response = accessor(CONFIGURATION_URL.format(cluster, config_type, config_tag))
   config_by_tag = json.loads(response)
   current_config = config_by_tag[ITEMS][0]
@@ -130,6 +138,41 @@ def update_specific_property(config_name, config_value):
     return properties, attributes
   return update
 
+def update_from_xml(config_file):
+  def update(cluster, config_type, accessor):
+    return read_xml_data_to_map(config_file)
+  return update
+
+# Used DOM parser to read data into a map
+def read_xml_data_to_map(path):
+  configurations = {}
+  properties_attributes = {}
+  tree = ET.parse(path)
+  root = tree.getroot()
+  for properties in root.getiterator('property'):
+    name = properties.find('name')
+    value = properties.find('value')
+    final = properties.find('final')
+
+    if name != None:
+      name_text = name.text if name.text else ""
+    else:
+      logger.warn("No name is found for one of the properties in {0}, ignoring it".format(path))
+      continue
+
+    if value != None:
+      value_text = value.text if value.text else ""
+    else:
+      logger.warn("No value is found for \"{0}\" in {1}, using empty string for it".format(name_text, path))
+      value_text = ""
+
+    if final != None:
+      final_text = final.text if final.text else ""
+      properties_attributes[name_text] = final_text
+
+    configurations[name_text] = value_text
+  return configurations, {"final" : properties_attributes}
+
 def update_from_file(config_file):
   def update(cluster, config_type, accessor):
     try:
@@ -138,12 +181,12 @@ def update_from_file(config_file):
     except Exception as e:
       raise Exception('Cannot find file "{0}" to PUT'.format(config_file))
     try:
-      file_properties = json.loads('{' + file_content + '}')
+      file_properties = json.loads(file_content)
     except Exception as e:
       raise Exception('File "{0}" should be in the following JSON format ("properties_attributes" is optional):\n{1}'.format(config_file, FILE_FORMAT))
     new_properties = file_properties.get(PROPERTIES, {})
     new_attributes = file_properties.get(ATTRIBUTES, {})
-    print '### PUTting file: "{0}"'.format(config_file)
+    logger.info('### PUTting file: "{0}"'.format(config_file))
     return new_properties, new_attributes
   return update
 
@@ -156,26 +199,14 @@ def delete_specific_property(config_name):
     return properties, attributes
   return update
 
-def format_json(dictionary, tab_level=0):
-  output = ''
-  tab = ' ' * 2 * tab_level
-  for key, value in dictionary.iteritems():
-    output += ',\n{0}"{1}": '.format(tab, key)
-    if isinstance(value, dict):
-      output += '{\n' + format_json(value, tab_level + 1) + tab + '}'
-    else:
-      output += '"{0}"'.format(value)
-  output += '\n'
-  return output[2:]
-
 def output_to_file(filename):
   def output(config):
     with open(filename, 'w') as out_file:
-      out_file.write(format_json(config))
+      json.dump(config, out_file, indent=2)
   return output
 
 def output_to_console(config):
-  print format_json(config)
+  print json.dumps(config, indent=2)
 
 def get_config(cluster, config_type, accessor, output):
   properties, attributes = get_current_config(cluster, config_type, accessor)
@@ -185,70 +216,152 @@ def get_config(cluster, config_type, accessor, output):
   output(config)
 
 def set_properties(cluster, config_type, args, accessor):
-  print '### Performing "set" content:'
-  if len(args) == 0:
-    raise UsageException("Not enough arguments. Expected config key and value or filename.")
+  logger.info('### Performing "set":')
 
   if len(args) == 1:
     config_file = args[0]
-    updater = update_from_file(config_file)
-    print '### from file "{0}"'.format(config_file)
+    root, ext = os.path.splitext(config_file)
+    if ext == ".xml":
+      updater = update_from_xml(config_file)
+    elif ext == ".json":
+      updater = update_from_file(config_file)
+    else:
+      logger.error("File extension {0} doesn't supported".format(ext))
+      return -1
+    logger.info('### from file {0}'.format(config_file))
   else:
     config_name = args[0]
     config_value = args[1]
     updater = update_specific_property(config_name, config_value)
-    print '### new property - "{0}":"{1}"'.format(config_name, config_value)
+    logger.info('### new property - "{0}":"{1}"'.format(config_name, config_value))
   update_config(cluster, config_type, updater, accessor)
+  return 0
 
 def delete_properties(cluster, config_type, args, accessor):
-  print '### Performing "delete":'
+  logger.info('### Performing "delete":')
   if len(args) == 0:
-    raise UsageException("Not enough arguments. Expected config key.")
+    logger.error("Not enough arguments. Expected config key.")
+    return -1
 
   config_name = args[0]
-  print '### on property "{0}"'.format(config_name)
+  logger.info('### on property "{0}"'.format(config_name))
   update_config(cluster, config_type, delete_specific_property(config_name), accessor)
+  return 0
+
 
 def get_properties(cluster, config_type, args, accessor):
-  print '### Performing "get" content:'
+  logger.info("### Performing \"get\" content:")
   if len(args) > 0:
     filename = args[0]
     output = output_to_file(filename)
-    print '### to file "{0}"'.format(filename)
+    logger.info('### to file "{0}"'.format(filename))
   else:
     output = output_to_console
   get_config(cluster, config_type, accessor, output)
+  return 0
 
 def main():
-  if len(sys.argv) < 9:
-    raise UsageException('Not enough arguments.')
-  args = sys.argv[1:]
-  user = args[0]
-  password = args[1]
-  port = args[2]
-  protocol = args[3]
-  action = args[4]
-  host = args[5]
-  cluster = args[6]
-  config_type = args[7]
-  action_args = args[8:]
+
+  parser = optparse.OptionParser(usage="usage: %prog [options]")
+
+  login_options_group = OptionGroup(parser, "To specify credentials please use \"-e\" OR \"-u\" and \"-p'\"")
+  login_options_group.add_option("-u", "--user", dest="user", default="admin", help="Optional user ID to use for authentication. Default is 'admin'")
+  login_options_group.add_option("-p", "--password", dest="password", default="admin", help="Optional password to use for authentication. Default is 'admin'")
+  login_options_group.add_option("-e", "--credentials-file", dest="credentials_file", help="Optional file with user credentials separated by new line.")
+  parser.add_option_group(login_options_group)
+
+  parser.add_option("-t", "--port", dest="port", default="8080", help="Optional port number for Ambari server. Default is '8080'. Provide empty string to not use port.")
+  parser.add_option("-s", "--protocol", dest="protocol", default="http", help="Optional support of SSL. Default protocol is 'http'")
+  parser.add_option("-a", "--action", dest="action", help="Script action: <get>, <set>, <delete>")
+  parser.add_option("-l", "--host", dest="host", help="Server external host name")
+  parser.add_option("-n", "--cluster", dest="cluster", help="Name given to cluster. Ex: 'c1'")
+  parser.add_option("-c", "--config-type", dest="config_type", help="One of the various configuration types in Ambari. Ex: core-site, hdfs-site, mapred-queue-acls, etc.")
+
+  config_options_group = OptionGroup(parser, "To specify property(s) please use \"-f\" OR \"-k\" and \"-v'\"")
+  config_options_group.add_option("-f", "--file", dest="file", help="File where entire configurations are saved to, or read from. Supported extensions (.xml, .json>)")
+  config_options_group.add_option("-k", "--key", dest="key", help="Key that has to be set or deleted. Not necessary for 'get' action.")
+  config_options_group.add_option("-v", "--value", dest="value", help="Optional value to be set. Not necessary for 'get' or 'delete' actions.")
+  parser.add_option_group(config_options_group)
+
+  (options, args) = parser.parse_args()
+
+  logger.setLevel(logging.INFO)
+  formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
+  stdout_handler = logging.StreamHandler(sys.stdout)
+  stdout_handler.setLevel(logging.INFO)
+  stdout_handler.setFormatter(formatter)
+  logger.addHandler(stdout_handler)
+
+  # options with default value
+
+  if not options.credentials_file and (not options.user or not options.password):
+    parser.error("You should use option (-e) to set file with Ambari user credentials OR use (-u) username and (-p) password")
+
+  if options.credentials_file:
+    if os.path.isfile(options.credentials_file):
+      try:
+        with open(options.credentials_file) as credentials_file:
+          file_content = credentials_file.read()
+          login_lines = filter(None, file_content.splitlines())
+          if len(login_lines) == 2:
+            user = login_lines[0]
+            password = login_lines[1]
+          else:
+            logger.error("Incorrect content of {0} file. File should contain Ambari username and password separated by new line.".format(options.credentials_file))
+            return -1
+      except Exception as e:
+        logger.error("You don't have permissions to {0} file".format(options.credentials_file))
+        return -1
+    else:
+      logger.error("File {0} doesn't exist or you don't have permissions.".format(options.credentials_file))
+      return -1
+  else:
+    user = options.user
+    password = options.password
+
+  port = options.port
+  protocol = options.protocol
+
+  #options without default value
+  if None in [options.action, options.host, options.cluster, options.config_type]:
+    parser.error("One of required options is not passed")
+
+  action = options.action
+  host = options.host
+  cluster = options.cluster
+  config_type = options.config_type
+
   accessor = api_accessor(host, user, password, protocol, port)
   if action == SET_ACTION:
-    set_properties(cluster, config_type, action_args, accessor)
+
+    if not options.file and (not options.key or not options.value):
+      parser.error("You should use option (-f) to set file where entire configurations are saved OR (-k) key and (-v) value for one property")
+    if options.file:
+      action_args = [options.file]
+    else:
+      action_args = [options.key, options.value]
+    return set_properties(cluster, config_type, action_args, accessor)
+
   elif action == GET_ACTION:
-    get_properties(cluster, config_type, action_args, accessor)
+    if options.file:
+      action_args = [options.file]
+    else:
+      action_args = []
+    return get_properties(cluster, config_type, action_args, accessor)
+
   elif action == DELETE_ACTION:
-    delete_properties(cluster, config_type, action_args, accessor)
+    if not options.key:
+      parser.error("You should use option (-k) to set property name witch will be deleted")
+    else:
+      action_args = [options.key]
+    return delete_properties(cluster, config_type, action_args, accessor)
   else:
-    raise UsageException('Action "{0}" is not supported. Supported actions: "get", "set", "delete".'.format(action))
+    logger.error('Action "{0}" is not supported. Supported actions: "get", "set", "delete".'.format(action))
+    return -1
 
 if __name__ == "__main__":
   try:
-    main()
-  except UsageException as usage_exc:
-    print '[ERROR]   {0}'.format(usage_exc)
-    sys.exit(2)
-  except Exception as exc:
-    for line in str(exc).split('\n'):
-      print '[ERROR]   {0}'.format(line)
+    sys.exit(main())
+  except (KeyboardInterrupt, EOFError):
+    print("\nAborting ... Keyboard Interrupt.")
     sys.exit(1)

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e93c476/ambari-server/src/main/resources/scripts/configs.sh
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/scripts/configs.sh b/ambari-server/src/main/resources/scripts/configs.sh
index 7364d0e..4141fed 100755
--- a/ambari-server/src/main/resources/scripts/configs.sh
+++ b/ambari-server/src/main/resources/scripts/configs.sh
@@ -18,273 +18,5 @@
 # under the License.
 #
 
-usage () {
-  echo "";
-  echo "WARNING: THIS SCRIPT IS DEPRECATED AND DOESN'T SUPPORT NEW FEATURES. PLEASE USE configs.py"
-  echo "";
-  echo "Usage: configs.sh [-u userId] [-p password] [-port port] [-s] <ACTION> <AMBARI_HOST> <CLUSTER_NAME> <CONFIG_TYPE> [CONFIG_FILENAME | CONFIG_KEY [CONFIG_VALUE]]";
-  echo "";
-  echo "       [-u userId]: Optional user ID to use for authentication. Default is 'admin'.";
-  echo "       [-p password]: Optional password to use for authentication. Default is 'admin'.";
-  echo "       [-port port]: Optional port number for Ambari server. Default is '8080'. Provide empty string to not use port.";
-  echo "       [-s]: Optional support of SSL. Default is 'false'. Provide empty string to not use SSL.";
-  echo "       <ACTION>: One of 'get', 'set', 'delete'. 'Set' adds/updates as necessary.";
-  echo "       <AMBARI_HOST>: Server external host name";
-  echo "       <CLUSTER_NAME>: Name given to cluster. Ex: 'c1'"
-  echo "       <CONFIG_TYPE>: One of the various configuration types in Ambari. Ex:global, core-site, hdfs-site, mapred-queue-acls, etc.";
-  echo "       [CONFIG_FILENAME]: File where entire configurations are saved to, or read from. Only applicable to 'get' and 'set' actions";
-  echo "       [CONFIG_KEY]: Key that has to be set or deleted. Not necessary for 'get' action.";
-  echo "       [CONFIG_VALUE]: Optional value to be set. Not necessary for 'get' or 'delete' actions.";
-  exit 1;
-}
-
-USERID="admin"
-PASSWD="admin"
-PORT=":8080"
-SSL_URL_PREFIX=""
-
-if [ "$1" == "-u" ] ; then
-  USERID=$2;
-  shift 2;
-  echo "USERID=$USERID";
-fi
-
-if [ "$1" == "-p" ] ; then
-  PASSWD=$2;
-  shift 2;
-  echo "PASSWORD=$PASSWD";
-fi
-
-if [ "$1" == "-port" ] ; then
-  if [ -z $2 ]; then
-    PORT="";
-  else
-    PORT=":$2";
-  fi
-  shift 2;
-  echo "PORT=$PORT";
-fi
-
-if [ "$1" == "-s" ] ; then
-  SSL_URL_PREFIX="s"
-  shift;
-  echo "SSL is enabled";
-fi
-
-AMBARIURL="http$SSL_URL_PREFIX://$2$PORT"
-CLUSTER=$3
-SITE=$4
-SITETAG=''
-CONFIGKEY=$5
-CONFIGVALUE=$6
-
-###################
-## currentSiteTag()
-###################
-currentSiteTag () {
-  currentSiteTag=''
-  found=''
-    
-  #currentSite=`cat ds.json | grep -E "$SITE|tag"`; 
-  currentSite=`curl -k -s -u $USERID:$PASSWD "$AMBARIURL/api/v1/clusters/$CLUSTER?fields=Clusters/desired_configs" | grep -E "$SITE|tag"`;
-  for line in $currentSite; do
-    if [ $line != "{" -a $line != ":" -a $line != '"tag"' ] ; then
-      if [ -n "$found" -a -z "$currentSiteTag" ]; then
-        currentSiteTag=$line;
-      fi
-      if [ $line == "\"$SITE\"" ]; then
-        found=$SITE; 
-      fi
-    fi
-  done;
-  if [ -z $currentSiteTag ]; then
-    errOutput=`curl -k -s -u $USERID:$PASSWD "$AMBARIURL/api/v1/clusters/$CLUSTER?fields=Clusters/desired_configs"`;
-    echo "[ERROR] \"$SITE\" not found in server response.";
-    echo "[ERROR] Output of \`curl -k -s -u $USERID:$PASSWD \"$AMBARIURL/api/v1/clusters/$CLUSTER?fields=Clusters/desired_configs\"\` is:";
-    echo $errOutput | while read -r line; do
-      echo "[ERROR] $line";
-    done;
-    exit 1;
-  fi
-  currentSiteTag=`echo $currentSiteTag|cut -d \" -f 2`
-  SITETAG=$currentSiteTag;
-}
-
-#############################################
-## doConfigUpdate() 
-##  @param MODE of update. Either 'set' or 'delete'
-#############################################
-doConfigUpdate () {
-  MODE=$1
-  currentSiteTag
-  echo "########## Performing '$MODE' $CONFIGKEY:$CONFIGVALUE on (Site:$SITE, Tag:$SITETAG)";
-  propertiesStarted=0
-  attributesStarted=0
-  currentLevel=0
-  curl -k -s -u $USERID:$PASSWD "$AMBARIURL/api/v1/clusters/$CLUSTER/configurations?type=$SITE&tag=$SITETAG" | while read -r line; do
-    if [ "$propertiesStarted" -eq 0 -a "$attributesStarted" -eq 0 ]; then
-      if [ "$line" = "\"properties_attributes\" : {" ]; then
-        attributesStarted=$currentLevel
-      elif [ "$line" = "\"properties\" : {" ]; then
-        propertiesStarted=$currentLevel
-      fi
-    fi
-    if [ "$propertiesStarted" -gt 0 ]; then
-      if [ "`echo $line | grep -E "},?$"`" ]; then
-        ## Properties ended
-        ## Add property
-        propLen=${#newProperties}
-        lastChar=${newProperties:$propLen-1:1}
-        if [ "$MODE" == "delete" ]; then
-          # Remove the last ,
-          if [ "$lastChar" == "," ]; then
-            newProperties=${newProperties:0:$propLen-1}
-          fi
-        elif [ "$MODE" == "set" ]; then
-          # Add comma if required
-          if [ "$lastChar" != ","  -a "$lastChar" != "{" ]; then
-            newProperties="$newProperties,"
-          fi
-          newProperties="$newProperties \"$CONFIGKEY\" : \"$CONFIGVALUE\""
-        fi
-        newProperties=$newProperties$line
-        propertiesStarted=0
-      elif [ "`echo $line | grep "\\\"$CONFIGKEY\\\""`" ]; then
-        echo "########## Config found. Skipping origin value"
-      else
-        newProperties=$newProperties$line
-      fi
-    elif [ "$attributesStarted" -gt 0 ]; then
-      newProperties=$newProperties$line
-    fi
-    if [ "`echo $line | grep -E "{$"`" ]; then
-        currentLevel=$((currentLevel+1))
-    elif [ "`echo $line | grep -E "},?$"`" ]; then
-        currentLevel=$((currentLevel-1))
-        if [ "$currentLevel" == 1 ]; then
-          # if no properties in current config
-          if [ "$MODE" == "set" -a -z "$newProperties" ]; then
-            newProperties="\"properties\" : { \"$CONFIGKEY\" : \"$CONFIGVALUE\"}"
-          fi
-          newTag=`date "+%s%N"`
-          newTag="version${newTag}"
-          finalJson="{ \"Clusters\": { \"desired_config\": {\"type\": \"$SITE\", \"tag\":\"$newTag\", $newProperties}}}"
-          newFile="doSet_$newTag.json"
-          echo "########## PUTting json into: $newFile"
-          echo "$finalJson" > $newFile
-          curl -k -u $USERID:$PASSWD -X PUT -H "X-Requested-By: ambari" "$AMBARIURL/api/v1/clusters/$CLUSTER" --data @$newFile
-          currentSiteTag
-          echo "########## NEW Site:$SITE, Tag:$SITETAG";
-        fi
-    fi
-    if [ "$attributesStarted" -eq "$currentLevel" ]; then
-      attributesStarted=0
-    fi
-  done
-}
-
-#############################################
-## doConfigFileUpdate() 
-##  @param File name to PUT on server
-#############################################
-doConfigFileUpdate () {
-  FILENAME=$1
-  if [ -f $FILENAME ]; then
-    if [ "1" == "$(grep -En ^\"properties\" $FILENAME | cut -d : -f 1)" ]; then
-      newTag=`date "+%s%N"`
-      newTag="version${newTag}"
-      newProperties=`cat $FILENAME`;
-      finalJson="{ \"Clusters\": { \"desired_config\": {\"type\": \"$SITE\", \"tag\":\"$newTag\", $newProperties}}}"
-      newFile="doSet_$newTag.json"
-      echo "$finalJson" > $newFile
-      echo "########## PUTting file:\"$FILENAME\" into config(type:\"$SITE\", tag:$newTag) via $newFile"
-      curl -k -u $USERID:$PASSWD -X PUT -H "X-Requested-By: ambari" "$AMBARIURL/api/v1/clusters/$CLUSTER" --data @$newFile
-      currentSiteTag
-      echo "########## NEW Site:$SITE, Tag:$SITETAG";
-    else
-      echo "[ERROR] File \"$FILENAME\" should be in the following JSON format (\"properties_attributes\" is optional):";
-      echo "[ERROR]   \"properties\": {";
-      echo "[ERROR]     \"key1\": \"value1\",";
-      echo "[ERROR]     \"key2\": \"value2\",";
-      echo "[ERROR]   },";
-      echo "[ERROR]   \"properties_attributes\": {";
-      echo "[ERROR]     \"final\": {";
-      echo "[ERROR]       \"key1\": \"value1\",";
-      echo "[ERROR]       \"key2\": \"value2\",";
-      echo "[ERROR]     }";
-      echo "[ERROR]   }";
-      exit 1;
-    fi
-  else
-    echo "[ERROR] Cannot find file \"$1\"to PUT";
-    exit 1;
-  fi
-}
-
-
-#############################################
-## doGet()
-##  @param Optional filename to save to
-#############################################
-doGet () {
-  FILENAME=$1
-  if [ -n $FILENAME -a -f $FILENAME ]; then
-    rm -f $FILENAME
-  fi
-  currentSiteTag
-  echo "########## Performing 'GET' on (Site:$SITE, Tag:$SITETAG)";
-  propertiesStarted=0
-  curl -k -s -u $USERID:$PASSWD "$AMBARIURL/api/v1/clusters/$CLUSTER/configurations?type=$SITE&tag=$SITETAG" | while read -r line; do
-    # echo ">>> $line";
-    if [ "$propertiesStarted" -eq 0 ]; then
-      if [ "`echo $line | grep "\"properties\""`" -o "`echo $line | grep "\"properties_attributes\""`" ]; then
-        propertiesStarted=$currentLevel
-      fi
-    fi
-    if [ "$propertiesStarted" -gt "0" ]; then
-      if [ -z $FILENAME ]; then
-        echo "$line"
-      else
-        echo "$line" >> $FILENAME
-      fi
-    fi
-    if [ "`echo $line | grep -E "{$"`" ]; then
-        currentLevel=$((currentLevel+1))
-    elif [ "`echo $line | grep -E "},?$"`" ]; then
-        currentLevel=$((currentLevel-1))
-    fi
-    if [ "$propertiesStarted" -eq "$currentLevel" ]; then
-      propertiesStarted=0
-    fi
-  done
-}
-
-case "$1" in
-  set)
-    if (($# == 6)); then
-      doConfigUpdate "set" # Individual key
-    elif (($# == 5)); then
-      doConfigFileUpdate $5 # File based
-    else
-      usage
-    fi
-    ;;
-  get)
-    if (($# == 4)); then
-      doGet
-    elif (($# == 5)); then
-      doGet $5
-    else
-      usage
-    fi
-    ;;
-  delete)
-    if (($# != 5)); then
-      usage
-    fi
-    doConfigUpdate "delete"
-    ;;
-  *) 
-    usage
-    ;;
-esac
+echo "ERROR: THIS SCRIPT IS NO LONGER SUPPORTED. PLEASE USE configs.py INSTEAD"
+exit 1
\ No newline at end of file


[19/50] [abbrv] ambari git commit: AMBARI-220334. AMS: Add smart configs support for service. (swagle)

Posted by jl...@apache.org.
AMBARI-220334. AMS: Add smart configs support for service. (swagle)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: f095b9590afe5657b560defb3e3d5e9294c1e65d
Parents: f1b5300
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Thu Sep 21 12:56:35 2017 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Thu Sep 21 13:03:21 2017 -0700

----------------------------------------------------------------------
 .../timeline/TimelineMetricConfiguration.java   |  13 +
 .../metrics/timeline/TimelineMetricsFilter.java |  24 +-
 .../timeline/TimelineMetricsFilterTest.java     |   3 +
 .../0.1.0/configuration/ams-env.xml             |   4 +
 .../0.1.0/configuration/ams-hbase-env.xml       |  16 ++
 .../0.1.0/configuration/ams-hbase-site.xml      |  24 +-
 .../0.1.0/configuration/ams-site.xml            |  70 ++++-
 .../AMBARI_METRICS/0.1.0/metainfo.xml           |   7 +
 .../AMBARI_METRICS/0.1.0/themes/theme.json      | 288 +++++++++++++++++++
 9 files changed, 423 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java
index 44073ab..899928a 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java
@@ -254,9 +254,15 @@ public class TimelineMetricConfiguration {
   public static final String TIMELINE_METRICS_AGGREGATE_TABLES_DURABILITY =
       "timeline.metrics.aggregate.tables.durability";
 
+  public static final String TIMELINE_METRICS_WHITELIST_ENABLED =
+    "timeline.metrics.whitelisting.enabled";
+
   public static final String TIMELINE_METRICS_WHITELIST_FILE =
     "timeline.metrics.whitelist.file";
 
+  public static final String TIMELINE_METRICS_WHITELIST_FILE_LOCATION_DEFAULT =
+    "/etc/ambari-metrics-collector/conf/metrics_whitelist";
+
   public static final String TIMELINE_METRIC_METADATA_FILTERS =
     "timeline.metrics.service.metadata.filters";
 
@@ -518,4 +524,11 @@ public class TimelineMetricConfiguration {
       return false;
     }
   }
+
+  public boolean isWhitelistingEnabled() {
+    if (metricsConf != null) {
+      return Boolean.parseBoolean(metricsConf.get(TIMELINE_METRICS_WHITELIST_ENABLED, "false"));
+    }
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilter.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilter.java b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilter.java
index 1446ec2..63cc510 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilter.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilter.java
@@ -18,17 +18,14 @@
 
 package org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
+import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_APPS_BLACKLIST;
+import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_APPS_WHITELIST;
+import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_WHITELIST_FILE;
+import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_WHITELIST_FILE_LOCATION_DEFAULT;
 
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -36,9 +33,12 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_WHITELIST_FILE;
-import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_APPS_BLACKLIST;
-import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.TIMELINE_METRICS_APPS_WHITELIST;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
 
 public class TimelineMetricsFilter {
 
@@ -67,8 +67,8 @@ public class TimelineMetricsFilter {
     whitelistedApps = new HashSet<>();
     amshbaseWhitelist = new HashSet<>();
 
-    String whitelistFile = metricsConf.get(TIMELINE_METRICS_WHITELIST_FILE, "");
-    if (!StringUtils.isEmpty(whitelistFile)) {
+    if (configuration.isWhitelistingEnabled()) {
+      String whitelistFile = metricsConf.get(TIMELINE_METRICS_WHITELIST_FILE, TIMELINE_METRICS_WHITELIST_FILE_LOCATION_DEFAULT);
       readMetricWhitelistFromFile(whitelistFile);
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilterTest.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilterTest.java b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilterTest.java
index 81da5c8..a308248 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilterTest.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricsFilterTest.java
@@ -61,6 +61,7 @@ public class TimelineMetricsFilterTest {
     Configuration metricsConf = new Configuration();
     TimelineMetricConfiguration configuration = EasyMock.createNiceMock(TimelineMetricConfiguration.class);
     expect(configuration.getMetricsConf()).andReturn(metricsConf).once();
+    expect(configuration.isWhitelistingEnabled()).andReturn(true).anyTimes();
     replay(configuration);
 
     URL fileUrl = ClassLoader.getSystemResource("test_data/metric_whitelist.dat");
@@ -170,6 +171,8 @@ public class TimelineMetricsFilterTest {
     whitelist.add("regionserver.Server.Delete_mean");
     expect(configuration.getAmshbaseWhitelist()).andReturn(whitelist).once();
 
+    expect(configuration.isWhitelistingEnabled()).andReturn(true).anyTimes();
+
     replay(configuration);
 
     TimelineMetricsFilter.initializeMetricFilter(configuration);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml
index 4d33661..ee7067c 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-env.xml
@@ -74,9 +74,13 @@
     <name>metrics_collector_heapsize</name>
     <value>512</value>
     <description>Metrics Collector Heap Size</description>
+    <display-name>Metrics Collector Heap Size</display-name>
     <value-attributes>
       <type>int</type>
       <unit>MB</unit>
+      <minimum>512</minimum>
+      <maximum>16384</maximum>
+      <increment-step>256</increment-step>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml
index 9c4fc02..e31f2a6 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-env.xml
@@ -60,9 +60,13 @@
         HBase RegionServer Heap Size. In embedded mode, total heap size is
         sum of master and regionserver heap sizes.
     </description>
+    <display-name>HBase RegionServer Maximum Memory</display-name>
     <value-attributes>
       <type>int</type>
+      <minimum>512</minimum>
+      <maximum>32768</maximum>
       <unit>MB</unit>
+      <increment-step>256</increment-step>
     </value-attributes>
     <depends-on>
       <property>
@@ -80,9 +84,13 @@
     <name>regionserver_xmn_size</name>
     <value>128</value>
     <description>HBase RegionServer maximum value for young generation heap size.</description>
+    <display-name>HBase RegionServer maximum value for Xmn</display-name>
     <value-attributes>
       <type>int</type>
+      <minimum>128</minimum>
+      <maximum>8192</maximum>
       <unit>MB</unit>
+      <increment-step>128</increment-step>
     </value-attributes>
     <depends-on>
       <property>
@@ -98,9 +106,13 @@
     <description>
       HBase Master maximum value for young generation heap size.
     </description>
+    <display-name>HBase Master maximum value for Xmn</display-name>
     <value-attributes>
       <type>int</type>
+      <minimum>64</minimum>
+      <maximum>1024</maximum>
       <unit>MB</unit>
+      <increment-step>64</increment-step>
     </value-attributes>
     <depends-on>
       <property>
@@ -133,9 +145,13 @@
         HBase Master Heap Size. In embedded mode, total heap size is
         sum of master and regionserver heap sizes.
     </description>
+    <display-name>HBase Master Maximum Memory</display-name>
     <value-attributes>
       <type>int</type>
+      <minimum>256</minimum>
+      <maximum>4096</maximum>
       <unit>MB</unit>
+      <increment-step>256</increment-step>
     </value-attributes>
     <depends-on>
       <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-site.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-site.xml
index 2c9378e..5f80df4 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-site.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-hbase-site.xml
@@ -29,6 +29,7 @@
       HBase to either local filesystem path if using Ambari Metrics in embedded mode or
       to a HDFS dir, example: hdfs://namenode.example.org:8020/amshbase.
     </description>
+    <display-name>HBase root directory</display-name>
     <depends-on>
       <property>
         <type>core-site</type>
@@ -44,6 +45,7 @@
   <property>
     <name>hbase.tmp.dir</name>
     <value>/var/lib/ambari-metrics-collector/hbase-tmp</value>
+    <display-name>HBase tmp directory</display-name>
     <description>
       Temporary directory on the local filesystem.
       Change this setting to point to a location more permanent
@@ -165,9 +167,13 @@
       Threshold size in bytes after which results from parallelly executed
       query results are spooled to disk. Default is 20 mb.
     </description>
+    <display-name>Phoenix Spool threshold</display-name>
     <value-attributes>
       <type>int</type>
-      <unit>Bytes</unit>
+      <unit>B</unit>
+      <minimum>12582912</minimum>
+      <maximum>31457280</maximum>
+      <increment-step>1048576</increment-step>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -266,12 +272,16 @@
     <name>hbase.hregion.max.filesize</name>
     <value>4294967296</value>
     <description>
-      Maximum HFile size. If the sum of the sizes of a region&#x2019;s HFiles has grown
-      to exceed this value, the region is split in two. Default is 40Gb.
+      Maximum HFile size. If the sum of the sizes of a region HFiles has grown
+      to exceed this value, the region is split in two. Default is 4 GB.
     </description>
+    <display-name>Maximum Region File Size</display-name>
     <value-attributes>
       <type>int</type>
-      <unit>Bytes</unit>
+      <minimum>1073741824</minimum>
+      <maximum>107374182400</maximum>
+      <unit>B</unit>
+      <increment-step>1073741824</increment-step>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
@@ -432,9 +442,13 @@
       number of bytes. Value is checked by a thread that runs every
       hbase.server.thread.wakefrequency.
     </description>
+    <display-name>Memstore Flush Size</display-name>
     <value-attributes>
       <type>int</type>
-      <unit>Bytes</unit>
+      <minimum>33554432</minimum>
+      <maximum>536870912</maximum>
+      <increment-step>1048576</increment-step>
+      <unit>B</unit>
     </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
index 1b085f6..ab14f18 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml
@@ -31,6 +31,23 @@
       2) distributed: HBase daemons writing to HDFS
     </description>
     <on-ambari-upgrade add="true"/>
+    <display-name>Operation Mode</display-name>
+    <description>Metrics service Operation mode</description>
+    <value-attributes>
+      <overridable>false</overridable>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>embedded</value>
+          <label>Embedded</label>
+        </entry>
+        <entry>
+          <value>distributed</value>
+          <label>Distributed</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
   </property>
   <property>
     <name>timeline.metrics.service.webapp.address</name>
@@ -510,6 +527,11 @@
       List of application ids to use for aggregating host level metrics for
       an application. Example: bytes_read across Yarn Nodemanagers.
     </description>
+    <display-name>AppIds for aggregating System metrics</display-name>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+      <overridable>false</overridable>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -589,14 +611,6 @@
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
-    <name>timeline.metrics.sink.collection.period</name>
-    <value>10</value>
-    <description>
-      The interval between two service metrics data exports.
-    </description>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
     <name>timeline.metrics.service.watcher.disabled</name>
     <value>false</value>
     <description>
@@ -675,7 +689,7 @@
     <name>timeline.metrics.cache.size</name>
     <value>150</value>
     <description>
-      Size of array blocking queue used to cache metrics
+      Size of array blocking queue used to cache metrics before flush to DB
     </description>
     <value-attributes>
       <type>int</type>
@@ -791,6 +805,22 @@
     <name>timeline.metrics.host.inmemory.aggregation</name>
     <value>false</value>
     <description>if set to "true" host metrics will be aggregated in memory on each host</description>
+    <display-name>Enable in-memory aggreation on monitors</display-name>
+    <value-attributes>
+      <overridable>false</overridable>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>True</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>False</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
@@ -798,4 +828,26 @@
     <value>61888</value>
     <on-ambari-upgrade add="true"/>
   </property>
+  <property>
+    <name>timeline.metrics.whitelisting.enabled</name>
+    <value>false</value>
+    <description>Enable/Disable metric whitelisting</description>
+    <display-name>Enable only whitelisted metrics</display-name>
+    <on-ambari-upgrade add="true"/>
+    <value-attributes>
+      <overridable>false</overridable>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>True</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>False</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
index 43c3685..d563bec 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
@@ -123,6 +123,13 @@
         </logs>
       </components>
 
+      <themes>
+        <theme>
+          <fileName>theme.json</fileName>
+          <default>true</default>
+        </theme>
+      </themes>
+
       <osSpecifics>
         <osSpecific>
           <osFamily>redhat7,amazon2015,redhat6,suse11,suse12</osFamily>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f095b959/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/themes/theme.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/themes/theme.json b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/themes/theme.json
new file mode 100644
index 0000000..9316a6e
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/themes/theme.json
@@ -0,0 +1,288 @@
+{
+  "name": "default",
+  "description": "Default theme for AMS service",
+  "configuration": {
+    "layouts": [
+      {
+        "name": "default",
+        "tabs": [
+          {
+            "name": "settings",
+            "display-name": "Settings",
+            "layout": {
+              "tab-columns": "2",
+              "tab-rows": "1",
+              "sections": [
+                {
+                  "name": "section-collector",
+                  "display-name": "Collector",
+                  "row-index": "0",
+                  "column-index": "0",
+                  "row-span": "1",
+                  "column-span": "1",
+                  "section-columns": "1",
+                  "section-rows": "1",
+                  "subsections": [
+                    {
+                      "name": "subsection-collector-col1",
+                      "row-index": "0",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1"
+                    }
+                  ]
+                },
+                {
+                  "name": "section-hbase",
+                  "display-name": "AMS HBase",
+                  "row-index": "0",
+                  "column-index": "2",
+                  "row-span": "1",
+                  "column-span": "2",
+                  "section-columns": "2",
+                  "section-rows": "1",
+                  "subsections": [
+                    {
+                      "name": "subsection-hbase-col1",
+                      "row-index": "0",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1"
+                    },
+                    {
+                      "name": "subsection-hbase-col2",
+                      "row-index": "0",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1"
+                    }
+                  ]
+                },
+                {
+                  "name": "section-hbase-disk",
+                  "display-name": "Storage",
+                  "row-index": "1",
+                  "column-index": "0",
+                  "row-span": "1",
+                  "column-span": "3",
+                  "section-columns": "3",
+                  "section-rows": "1",
+                  "subsections": [
+                    {
+                      "name": "subsection-hbase-disk-col1",
+                      "row-index": "0",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1"
+                    },
+                    {
+                      "name": "subsection-hbase-disk-col2",
+                      "row-index": "0",
+                      "column-index": "1",
+                      "row-span": "1",
+                      "column-span": "1"
+                    },
+                    {
+                      "name": "subsection-hbase-disk-col3",
+                      "row-index": "0",
+                      "column-index": "1",
+                      "row-span": "1",
+                      "column-span": "1"
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        ]
+      }
+    ],
+    "placement": {
+      "configuration-layout": "default",
+      "configs": [
+        {
+          "config": "ams-site/timeline.metrics.service.operation.mode",
+          "subsection-name": "subsection-collector-col1"
+        },
+        {
+          "config": "ams-env/metrics_collector_heapsize",
+          "subsection-name": "subsection-collector-col1"
+        },
+        {
+          "config": "ams-site/timeline.metrics.whitelisting.enabled",
+          "subsection-name": "subsection-collector-col1"
+        },
+        {
+          "config": "ams-site/timeline.metrics.host.inmemory.aggregation",
+          "subsection-name": "subsection-collector-col1"
+        },
+        {
+          "config": "ams-site/timeline.metrics.service.cluster.aggregator.appIds",
+          "subsection-name": "subsection-collector-col1"
+        },
+        {
+          "config": "ams-hbase-env/hbase_master_heapsize",
+          "subsection-name": "subsection-hbase-col1"
+        },
+        {
+          "config": "ams-hbase-env/hbase_master_xmn_size",
+          "subsection-name": "subsection-hbase-col1"
+        },
+        {
+          "config": "ams-hbase-env/hbase_regionserver_heapsize",
+          "subsection-name": "subsection-hbase-col1"
+        },
+        {
+          "config": "ams-hbase-env/regionserver_xmn_size",
+          "subsection-name": "subsection-hbase-col1"
+        },
+        {
+          "config": "ams-hbase-site/hbase.hregion.memstore.flush.size",
+          "subsection-name": "subsection-hbase-col2"
+        },
+        {
+          "config": "ams-hbase-site/phoenix.query.spoolThresholdBytes",
+          "subsection-name": "subsection-hbase-col2"
+        },
+        {
+          "config": "ams-hbase-site/hbase.rootdir",
+          "subsection-name": "subsection-hbase-disk-col1"
+        },
+        {
+          "config": "ams-hbase-site/hbase.tmp.dir",
+          "subsection-name": "subsection-hbase-disk-col2"
+        },
+        {
+          "config": "ams-hbase-site/hbase.hregion.max.filesize",
+          "subsection-name": "subsection-hbase-disk-col3"
+        }
+      ]
+    },
+    "widgets": [
+      {
+        "config": "ams-site/timeline.metrics.service.operation.mode",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "ams-env/metrics_collector_heapsize",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "GB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-site/timeline.metrics.host.inmemory.aggregation",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "ams-site/timeline.metrics.whitelisting.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "ams-site/timeline.metrics.service.cluster.aggregator.appIds",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ams-hbase-env/hbase_master_heapsize",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "GB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-env/hbase_master_xmn_size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-env/hbase_regionserver_heapsize",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "GB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-env/regionserver_xmn_size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-site/hbase.hregion.memstore.flush.size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-site/phoenix.query.spoolThresholdBytes",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "ams-hbase-site/hbase.rootdir",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ams-hbase-site/hbase.tmp.dir",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ams-hbase-site/hbase.hregion.max.filesize",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "GB"
+            }
+          ]
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file


[45/50] [abbrv] ambari git commit: AMBARI-22046. Infra Manager: Integrate with Spring Boot (oleewere)

Posted by jl...@apache.org.
AMBARI-22046. Infra Manager: Integrate with Spring Boot (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 6633a7bd44fcbc660956a7e188e2ac63472c6de3
Parents: 520d8fc
Author: Oliver Szabo <ol...@gmail.com>
Authored: Sun Sep 24 14:22:14 2017 +0200
Committer: Oliver Szabo <ol...@gmail.com>
Committed: Mon Sep 25 20:18:03 2017 +0200

----------------------------------------------------------------------
 ambari-infra/ambari-infra-manager/.gitignore    |   2 +
 .../ambari-infra-manager/docker/bin/start.sh    |   2 +-
 ambari-infra/ambari-infra-manager/pom.xml       | 172 ++++++++-------
 .../org/apache/ambari/infra/InfraManager.java   | 208 +++----------------
 .../infra/common/InfraManagerConstants.java     |  31 ---
 .../infra/conf/InfraManagerDataConfig.java      |  37 ++++
 .../conf/InfraManagerJerseyResourceConfig.java  |  37 ++++
 .../infra/conf/InfraManagerServletConfig.java   |  83 ++++++++
 .../infra/conf/StaticResourceConfiguration.java |  49 +++++
 .../infra/doc/InfraManagerApiDocStorage.java    |  90 ++++++++
 .../ambari/infra/job/dummy/DummyItemWriter.java |  15 +-
 .../ambari/infra/rest/ApiDocResource.java       |  56 +++++
 .../src/main/resources/infra-manager.properties |   4 +-
 .../src/main/resources/log4j.xml                |  31 ---
 .../src/main/resources/log4j2.xml               |  41 ++++
 .../src/main/resources/static/index.html        |  24 +++
 .../src/main/resources/swagger/swagger.html     |  36 ++--
 .../src/main/resources/webapp/index.html        |  24 ---
 18 files changed, 556 insertions(+), 386 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/.gitignore
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/.gitignore b/ambari-infra/ambari-infra-manager/.gitignore
new file mode 100644
index 0000000..ba4e51d
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/.gitignore
@@ -0,0 +1,2 @@
+out/*
+*.pid
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/docker/bin/start.sh
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/docker/bin/start.sh b/ambari-infra/ambari-infra-manager/docker/bin/start.sh
index 076c06f..2402778 100755
--- a/ambari-infra/ambari-infra-manager/docker/bin/start.sh
+++ b/ambari-infra/ambari-infra-manager/docker/bin/start.sh
@@ -16,6 +16,6 @@
 
 export INFRA_MANAGER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=5007,server=y,suspend=n"
 touch /root/infra-manager.log
-/root/ambari-infra-manager/infraManager.sh --port 61890 > /root/infra-manager.log
+/root/ambari-infra-manager/infraManager.sh > /root/infra-manager.log
 tail -f /root/infra-manager.log
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/pom.xml b/ambari-infra/ambari-infra-manager/pom.xml
index b9f2a77..aa86da8 100644
--- a/ambari-infra/ambari-infra-manager/pom.xml
+++ b/ambari-infra/ambari-infra-manager/pom.xml
@@ -30,15 +30,17 @@
   <artifactId>ambari-infra-manager</artifactId>
 
   <properties>
-    <spring.version>4.2.5.RELEASE</spring.version>
-    <spring.security.version>4.0.4.RELEASE</spring.security.version>
-    <jersey.version>2.23.2</jersey.version>
-    <jetty-version>9.2.11.v20150529</jetty-version>
-    <swagger.version>1.5.8</swagger.version>
-    <spring-data-solr.version>2.0.2.RELEASE</spring-data-solr.version>
-    <jjwt.version>0.6.0</jjwt.version>
+    <spring.version>4.3.10.RELEASE</spring.version>
+    <spring.security.version>4.2.3.RELEASE</spring.security.version>
+    <spring.ldap.version>2.0.4.RELEASE</spring.ldap.version>
+    <jersey.version>2.25.1</jersey.version>
+    <jetty.version>9.4.6.v20170531</jetty.version>
     <spring-batch.version>3.0.7.RELEASE</spring-batch.version>
     <sqlite.version>3.8.11.2</sqlite.version>
+    <spring-data-solr.version>2.0.2.RELEASE</spring-data-solr.version>
+    <spring-boot.version>1.5.6.RELEASE</spring-boot.version>
+    <swagger.version>1.5.16</swagger.version>
+    <jjwt.version>0.6.0</jjwt.version>
   </properties>
 
   <build>
@@ -69,6 +71,21 @@
         </configuration>
       </plugin>
       <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+        <version>${spring-boot.version}</version>
+        <configuration>
+          <classifier>exec</classifier>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>repackage</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
         <version>2.8</version>
@@ -161,53 +178,70 @@
       <artifactId>spring-security-ldap</artifactId>
       <version>${spring.security.version}</version>
     </dependency>
+
     <dependency>
-      <groupId>org.glassfish.jersey.ext</groupId>
-      <artifactId>jersey-spring3</artifactId>
-      <version>2.23.2</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot.version}</version>
       <exclusions>
         <exclusion>
-          <groupId>org.springframework</groupId>
-          <artifactId>*</artifactId>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-logging</artifactId>
         </exclusion>
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.connectors</groupId>
-      <artifactId>jersey-apache-connector</artifactId>
-      <version>${jersey.version}</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-log4j2</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.core</groupId>
-      <artifactId>jersey-client</artifactId>
-      <version>${jersey.version}</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.media</groupId>
-      <artifactId>jersey-media-json-jettison</artifactId>
-      <version>${jersey.version}</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-security</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.media</groupId>
-      <artifactId>jersey-media-json-jackson</artifactId>
-      <version>${jersey.version}</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-actuator</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.core</groupId>
-      <artifactId>jersey-common</artifactId>
-      <version>${jersey.version}</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-jetty</artifactId>
+      <version>${spring-boot.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-jersey</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.1.0</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-freemarker</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.17</version>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-autoconfigure</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-configuration-processor</artifactId>
+      <version>${spring-boot.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.media</groupId>
+      <artifactId>jersey-media-json-jettison</artifactId>
+      <version>${jersey.version}</version>
+    </dependency>
+    
+    <dependency>
       <groupId>org.apache.solr</groupId>
       <artifactId>solr-solrj</artifactId>
       <version>${solr.version}</version>
@@ -267,6 +301,10 @@
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-server</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
     <dependency>
@@ -303,53 +341,6 @@
       <version>1.0.1.RELEASE</version>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-security</artifactId>
-      <version>${jetty-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <version>${jetty-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-      <version>${jetty-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlets</artifactId>
-      <version>${jetty-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-util</artifactId>
-      <version>${jetty-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-webapp</artifactId>
-      <version>${jetty-version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.springframework</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-annotations</artifactId>
-      <version>${jetty-version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.springframework</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
       <groupId>cglib</groupId>
       <artifactId>cglib</artifactId>
       <version>3.2.4</version>
@@ -386,11 +377,6 @@
       <version>2.1.0</version>
     </dependency>
     <dependency>
-      <groupId>org.springframework.data</groupId>
-      <artifactId>spring-data-solr</artifactId>
-      <version>${spring-data-solr.version}</version>
-    </dependency>
-    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context-support</artifactId>
       <version>${spring.version}</version>
@@ -411,11 +397,6 @@
       <version>${jjwt.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.ext</groupId>
-      <artifactId>jersey-bean-validation</artifactId>
-      <version>2.25</version>
-    </dependency>
-    <dependency>
       <groupId>org.xerial</groupId>
       <artifactId>sqlite-jdbc</artifactId>
       <version>${sqlite.version}</version>
@@ -424,6 +405,17 @@
       <groupId>org.springframework.batch</groupId>
       <artifactId>spring-batch-admin-manager</artifactId>
       <version>1.3.1.RELEASE</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <artifactId>guava</artifactId>
+      <groupId>com.google.guava</groupId>
+      <version>20.0</version>
     </dependency>
   </dependencies>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/InfraManager.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/InfraManager.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/InfraManager.java
index 186f98c..185e344 100644
--- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/InfraManager.java
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/InfraManager.java
@@ -18,192 +18,32 @@
  */
 package org.apache.ambari.infra;
 
-import org.apache.ambari.infra.conf.InfraManagerConfig;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.HttpConfiguration;
-import org.eclipse.jetty.server.HttpConnectionFactory;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.util.resource.ResourceCollection;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.context.ContextLoaderListener;
-import org.springframework.web.context.request.RequestContextListener;
-import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
-
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import static org.apache.ambari.infra.common.InfraManagerConstants.DATA_FOLDER_LOCATION_PARAM;
-import static org.apache.ambari.infra.common.InfraManagerConstants.DEFAULT_DATA_FOLDER_LOCATION;
-import static org.apache.ambari.infra.common.InfraManagerConstants.DEFAULT_PORT;
-import static org.apache.ambari.infra.common.InfraManagerConstants.DEFAULT_PROTOCOL;
-import static org.apache.ambari.infra.common.InfraManagerConstants.INFRA_MANAGER_SESSION_ID;
-import static org.apache.ambari.infra.common.InfraManagerConstants.PROTOCOL_SSL;
-import static org.apache.ambari.infra.common.InfraManagerConstants.ROOT_CONTEXT;
-import static org.apache.ambari.infra.common.InfraManagerConstants.SESSION_TIMEOUT;
-import static org.apache.ambari.infra.common.InfraManagerConstants.WEB_RESOURCE_FOLDER;
-
+import org.springframework.boot.Banner;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration;
+import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
+import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.system.ApplicationPidFileWriter;
+
+@SpringBootApplication(
+  scanBasePackages = {"org.apache.ambari.infra"},
+  exclude = {
+    RepositoryRestMvcAutoConfiguration.class,
+    WebMvcAutoConfiguration.class,
+    BatchAutoConfiguration.class,
+    SecurityAutoConfiguration.class
+  }
+)
 public class InfraManager {
 
-  private static final Logger LOG = LoggerFactory.getLogger(InfraManager.class);
-
   public static void main(String[] args) {
-    Options options = new Options();
-    HelpFormatter helpFormatter = new HelpFormatter();
-    helpFormatter.setDescPadding(10);
-    helpFormatter.setWidth(200);
-
-    final Option helpOption = Option.builder("h")
-      .longOpt("help")
-      .desc("Print commands")
-      .build();
-
-    final Option portOption = Option.builder("p")
-      .longOpt("port")
-      .desc("Infra Manager port")
-      .numberOfArgs(1)
-      .argName("port_number")
-      .build();
-
-    final Option dataFolderOption = Option.builder("df")
-      .longOpt("data-folder")
-      .desc("Infra Manager data folder location")
-      .numberOfArgs(1)
-      .argName("data_folder")
-      .build();
-
-    final Option protocolOption = Option.builder("t")
-      .longOpt("tls-enabled")
-      .desc("TLS enabled for Infra Manager")
-      .build();
-
-    options.addOption(helpOption);
-    options.addOption(portOption);
-    options.addOption(protocolOption);
-    options.addOption(dataFolderOption);
-
-    try {
-      CommandLineParser cmdLineParser = new DefaultParser();
-      CommandLine cli = cmdLineParser.parse(options, args);
-      int port = cli.hasOption('p') ? Integer.parseInt(cli.getOptionValue('p')) : DEFAULT_PORT;
-      String protocol = cli.hasOption("t") ? PROTOCOL_SSL : DEFAULT_PROTOCOL;
-      String dataFolder = cli.hasOption("df") ? cli.getOptionValue("df"): DEFAULT_DATA_FOLDER_LOCATION;
-
-      System.setProperty(DATA_FOLDER_LOCATION_PARAM, dataFolder); // be able to access it from jobs
-
-      Server server = buildServer(port, protocol);
-      HandlerList handlers = new HandlerList();
-      handlers.addHandler(createSwaggerContext());
-      handlers.addHandler(createBaseWebappContext(dataFolder));
-
-      server.setHandler(handlers);
-      server.start();
-
-      LOG.debug("============================Server Dump=======================================");
-      LOG.debug(server.dump());
-      LOG.debug("==============================================================================");
-      server.join();
-    } catch (Exception e) {
-      // TODO
-      e.printStackTrace();
-    }
-  }
-
-  private static Server buildServer(int port, String protocol) {
-    Server server = new Server();
-    HttpConfiguration httpConfiguration = new HttpConfiguration();
-    httpConfiguration.setRequestHeaderSize(65535);
-    // TODO: tls
-    ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
-    connector.setPort(port);
-    server.setConnectors(new Connector[]{connector});
-    URI infraManagerURI = URI.create(String.format("%s://0.0.0.0:%s", protocol, String.valueOf(port)));
-    LOG.info("Starting infra manager URI=" + infraManagerURI);
-    return server;
-  }
-
-  private static WebAppContext createBaseWebappContext(String dataFolder) throws MalformedURLException {
-    URI webResourceBase = findWebResourceBase();
-    WebAppContext context = new WebAppContext();
-    ResourceCollection resources = new ResourceCollection(Resource.newResource(webResourceBase));
-    context.setBaseResource(resources);
-    context.setContextPath(ROOT_CONTEXT);
-    context.setParentLoaderPriority(true);
-
-    // Data folder servlet
-    ServletHolder dataServlet = new ServletHolder("static-data", DefaultServlet.class);
-    dataServlet.setInitParameter("dirAllowed","true");
-    dataServlet.setInitParameter("pathInfoOnly","true");
-    dataServlet.setInitParameter("resourceBase", dataFolder);
-
-    context.addServlet(dataServlet,"/files/*");
-
-    // Configure Spring
-    context.addEventListener(new ContextLoaderListener());
-    context.addEventListener(new RequestContextListener());
-    // TODO: security, add: context.addFilter(new FilterHolder(new DelegatingFilterProxy("springSecurityFilterChain")), "/*", EnumSet.allOf(DispatcherType.class));
-    context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
-    context.setInitParameter("contextConfigLocation", InfraManagerConfig.class.getName());
-
-    // Configure Jersey
-    ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/v1/*");
-    jerseyServlet.setInitOrder(1);
-    jerseyServlet.setInitParameter("jersey.config.server.provider.packages","org.apache.ambari.infra.rest,io.swagger.jaxrs.listing");
-
-    context.getSessionHandler().getSessionManager().setMaxInactiveInterval(SESSION_TIMEOUT);
-    context.getSessionHandler().getSessionManager().getSessionCookieConfig().setName(INFRA_MANAGER_SESSION_ID);
-
-    return context;
-  }
-
-  private static URI findWebResourceBase() {
-    URL fileCompleteUrl = Thread.currentThread().getContextClassLoader().getResource(WEB_RESOURCE_FOLDER);
-    String errorMessage = "Web Resource Folder " + WEB_RESOURCE_FOLDER + " not found in classpath";
-    if (fileCompleteUrl != null) {
-      try {
-        return fileCompleteUrl.toURI().normalize();
-      } catch (URISyntaxException e) {
-        LOG.error(errorMessage, e);
-        System.exit(1);
-      }
-    } else {
-      LOG.error(errorMessage);
-      System.exit(1);
-    }
-    throw new IllegalStateException(errorMessage);
-  }
-
-  private static ServletContextHandler createSwaggerContext() throws URISyntaxException {
-    ResourceHandler resourceHandler = new ResourceHandler();
-    ResourceCollection resources = new ResourceCollection(new String[] {
-      InfraManager.class.getClassLoader()
-        .getResource("META-INF/resources/webjars/swagger-ui/2.1.0")
-        .toURI().toString(),
-      InfraManager.class.getClassLoader()
-        .getResource("swagger")
-        .toURI().toString()
-    });
-    resourceHandler.setBaseResource(resources);
-    resourceHandler.setWelcomeFiles(new String[]{"swagger.html"}); // rewrite index.html from swagger-ui webjar
-    ServletContextHandler context = new ServletContextHandler();
-    context.setContextPath("/docs/");
-    context.setHandler(resourceHandler);
-    return context;
+    String pidFile = System.getenv("PID_FILE") == null ? "infra-manager.pid" : System.getenv("PID_FILE");
+    new SpringApplicationBuilder(InfraManager.class)
+      .bannerMode(Banner.Mode.OFF)
+      .listeners(new ApplicationPidFileWriter(pidFile))
+      .web(true)
+      .run(args);
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/common/InfraManagerConstants.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/common/InfraManagerConstants.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/common/InfraManagerConstants.java
deleted file mode 100644
index 105f20e..0000000
--- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/common/InfraManagerConstants.java
+++ /dev/null
@@ -1,31 +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.infra.common;
-
-public final class InfraManagerConstants {
-  public static final int DEFAULT_PORT = 61890;
-  public static final String DEFAULT_PROTOCOL = "http";
-  public static final String INFRA_MANAGER_SESSION_ID = "INFRA_MANAGER_SESSIONID";
-  public static final String PROTOCOL_SSL = "https";
-  public static final String ROOT_CONTEXT = "/";
-  public static final String WEB_RESOURCE_FOLDER = "webapp";
-  public static final String DEFAULT_DATA_FOLDER_LOCATION = "/opt/ambari-infra-manager/data";
-  public static final String DATA_FOLDER_LOCATION_PARAM = "dataFolderLocation";
-  public static final Integer SESSION_TIMEOUT = 60 * 30;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerDataConfig.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerDataConfig.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerDataConfig.java
new file mode 100644
index 0000000..b5b215e
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerDataConfig.java
@@ -0,0 +1,37 @@
+/*
+ * 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.infra.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class InfraManagerDataConfig {
+
+  @Value("${infra-manager.server.data.folder:/opt/ambari-infra-manager/data}")
+  private String dataFolder;
+
+  public String getDataFolder() {
+    return dataFolder;
+  }
+
+  public void setDataFolder(String dataFolder) {
+    this.dataFolder = dataFolder;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerJerseyResourceConfig.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerJerseyResourceConfig.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerJerseyResourceConfig.java
new file mode 100644
index 0000000..3a4c00f
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerJerseyResourceConfig.java
@@ -0,0 +1,37 @@
+/*
+ * 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.infra.conf;
+
+import org.apache.ambari.infra.rest.JobResource;
+import org.glassfish.jersey.jackson.JacksonFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.servlet.ServletProperties;
+
+import javax.ws.rs.ApplicationPath;
+
+@ApplicationPath("/api/v1")
+public class InfraManagerJerseyResourceConfig extends ResourceConfig {
+
+  public InfraManagerJerseyResourceConfig() {
+    packages(JobResource.class.getPackage().getName());
+    register(JacksonFeature.class);
+    property(ServletProperties.FILTER_FORWARD_ON_404, true);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerServletConfig.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerServletConfig.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerServletConfig.java
new file mode 100644
index 0000000..06aea79
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/InfraManagerServletConfig.java
@@ -0,0 +1,83 @@
+/*
+ * 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.infra.conf;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.DefaultServlet;
+import org.glassfish.jersey.servlet.ServletContainer;
+import org.glassfish.jersey.servlet.ServletProperties;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
+import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer;
+import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.inject.Inject;
+
+@Configuration
+public class InfraManagerServletConfig {
+
+  private static final Integer SESSION_TIMEOUT = 60 * 30;
+  private static final String INFRA_MANAGER_SESSIONID = "INFRAMANAGER_SESSIONID";
+  private static final String INFRA_MANAGER_APPLICATION_NAME = "infra-manager";
+
+  @Value("${infra-manager.server.port:61890}")
+  private int port;
+
+  @Inject
+  private ServerProperties serverProperties;
+
+  @Inject
+  private InfraManagerDataConfig infraManagerDataConfig;
+
+
+  @Bean
+  public ServletRegistrationBean jerseyServlet() {
+    ServletRegistrationBean jerseyServletBean = new ServletRegistrationBean(new ServletContainer(), "/api/v1/*");
+    jerseyServletBean.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, InfraManagerJerseyResourceConfig.class.getName());
+    return jerseyServletBean;
+  }
+
+  @Bean
+  public ServletRegistrationBean dataServlet() {
+    ServletRegistrationBean dataServletBean = new ServletRegistrationBean(new DefaultServlet(), "/files/*");
+    dataServletBean.addInitParameter("dirAllowed","true");
+    dataServletBean.addInitParameter("pathInfoOnly","true");
+    dataServletBean.addInitParameter("resourceBase", infraManagerDataConfig.getDataFolder());
+    return dataServletBean;
+  }
+
+  @Bean
+  public EmbeddedServletContainerFactory containerFactory() {
+    final JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory = new JettyEmbeddedServletContainerFactory() {
+      @Override
+      protected JettyEmbeddedServletContainer getJettyEmbeddedServletContainer(Server server) {
+        return new JettyEmbeddedServletContainer(server);
+      }
+    };
+    jettyEmbeddedServletContainerFactory.setSessionTimeout(SESSION_TIMEOUT);
+    serverProperties.getSession().getCookie().setName(INFRA_MANAGER_SESSIONID);
+    serverProperties.setDisplayName(INFRA_MANAGER_APPLICATION_NAME);
+    jettyEmbeddedServletContainerFactory.setPort(port);
+    return jettyEmbeddedServletContainerFactory;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/StaticResourceConfiguration.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/StaticResourceConfiguration.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/StaticResourceConfiguration.java
new file mode 100644
index 0000000..f0cd3cf
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/conf/StaticResourceConfiguration.java
@@ -0,0 +1,49 @@
+/*
+ * 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.infra.conf;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@EnableWebMvc
+@Configuration
+public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
+
+  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
+    "classpath:/static/", "classpath:/swagger/","classpath:META-INF/resources/webjars/"
+  };
+
+  @Override
+  public void addResourceHandlers(ResourceHandlerRegistry registry) {
+    registry.addResourceHandler("/**")
+      .addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
+  }
+
+  @Override
+  public void addViewControllers(ViewControllerRegistry registry) {
+    registry.addViewController("/").setViewName(
+      "forward:/index.html");
+    registry.addViewController("/docs").setViewName(
+      "forward:/swagger.html");
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/doc/InfraManagerApiDocStorage.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/doc/InfraManagerApiDocStorage.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/doc/InfraManagerApiDocStorage.java
new file mode 100644
index 0000000..e536d9a
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/doc/InfraManagerApiDocStorage.java
@@ -0,0 +1,90 @@
+/*
+ * 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.infra.doc;
+
+import io.swagger.jaxrs.config.BeanConfig;
+import io.swagger.models.Swagger;
+import io.swagger.util.Yaml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Named
+public class InfraManagerApiDocStorage {
+
+  private static final Logger LOG = LoggerFactory.getLogger(InfraManagerApiDocStorage.class);
+
+  private final Map<String, Object> swaggerMap = new ConcurrentHashMap<>();
+
+  @Inject
+  private BeanConfig beanConfig;
+
+  @PostConstruct
+  private void postConstruct() {
+    Thread loadApiDocThread = new Thread("load_swagger_api_doc") {
+      @Override
+      public void run() {
+        LOG.info("Start thread to scan REST API doc from endpoints.");
+        Swagger swagger = beanConfig.getSwagger();
+        beanConfig.configure(swagger);
+        beanConfig.scanAndRead();
+        setSwagger(swagger);
+        try {
+          if (swagger != null) {
+            String yaml = Yaml.mapper().writeValueAsString(swagger);
+            StringBuilder b = new StringBuilder();
+            String[] parts = yaml.split("\n");
+            for (String part : parts) {
+              b.append(part);
+              b.append("\n");
+            }
+            setSwaggerYaml(b.toString());
+          }
+        } catch (Exception e) {
+          e.printStackTrace();
+        }
+        LOG.info("Scanning REST API endpoints and generating docs has been successful.");
+      }
+    };
+    loadApiDocThread.setDaemon(true);
+    loadApiDocThread.start();
+  }
+
+  public Swagger getSwagger() {
+    return (Swagger) swaggerMap.get("swaggerObject");
+  }
+
+  public void setSwagger(final Swagger swagger) {
+    swaggerMap.put("swaggerObject", swagger);
+  }
+
+  public void setSwaggerYaml(final String swaggerYaml) {
+    swaggerMap.put("swaggerYaml", swaggerYaml);
+  }
+
+  public String getSwaggerYaml() {
+    return (String) swaggerMap.get("swaggerYaml");
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/dummy/DummyItemWriter.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/dummy/DummyItemWriter.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/dummy/DummyItemWriter.java
index 444f0d1..89ad013 100644
--- a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/dummy/DummyItemWriter.java
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/job/dummy/DummyItemWriter.java
@@ -18,12 +18,14 @@
  */
 package org.apache.ambari.infra.job.dummy;
 
+import org.apache.ambari.infra.conf.InfraManagerDataConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.batch.core.StepExecution;
 import org.springframework.batch.core.annotation.BeforeStep;
 import org.springframework.batch.item.ItemWriter;
 
+import javax.inject.Inject;
 import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -31,27 +33,28 @@ import java.nio.file.Paths;
 import java.util.Date;
 import java.util.List;
 
-import static org.apache.ambari.infra.common.InfraManagerConstants.DATA_FOLDER_LOCATION_PARAM;
-
 public class DummyItemWriter implements ItemWriter<String> {
 
   private static final Logger LOG = LoggerFactory.getLogger(DummyItemWriter.class);
 
   private StepExecution stepExecution;
 
+  @Inject
+  private InfraManagerDataConfig infraManagerDataConfig;
+
   @Override
   public void write(List<? extends String> values) throws Exception {
     LOG.info("DummyItem writer called (values: {})... wait 1 seconds", values.toString());
     Thread.sleep(1000);
-    String outputDirectoryLocation = String.format("%s%s%s%s", System.getProperty(DATA_FOLDER_LOCATION_PARAM), File.separator, "dummyOutput-", new Date().getTime());
+    String outputDirectoryLocation = String.format("%s%s%s%s", infraManagerDataConfig.getDataFolder(), File.separator, "dummyOutput-", new Date().getTime());
     Path pathToDirectory = Paths.get(outputDirectoryLocation);
     Path pathToFile = Paths.get(String.format("%s%s%s", outputDirectoryLocation, File.separator, "dummyOutput.txt"));
     Files.createDirectories(pathToDirectory);
     LOG.info("Write location to step execution context...");
-    stepExecution.getExecutionContext().put("stepOutputLocation", pathToFile.getFileName().toAbsolutePath().toString());
+    stepExecution.getExecutionContext().put("stepOutputLocation", pathToFile.toAbsolutePath().toString());
     LOG.info("Write location to job execution context...");
-    stepExecution.getJobExecution().getExecutionContext().put("jobOutputLocation", pathToFile.getFileName().toAbsolutePath().toString());
-    LOG.info("Write to file: {}", pathToFile.getFileName().toAbsolutePath().toString());
+    stepExecution.getJobExecution().getExecutionContext().put("jobOutputLocation", pathToFile.toAbsolutePath().toString());
+    LOG.info("Write to file: {}", pathToFile.toAbsolutePath());
     Files.write(pathToFile, values.toString().getBytes());
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/rest/ApiDocResource.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/rest/ApiDocResource.java b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/rest/ApiDocResource.java
new file mode 100644
index 0000000..18dfdd9
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/java/org/apache/ambari/infra/rest/ApiDocResource.java
@@ -0,0 +1,56 @@
+/*
+ * 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.infra.rest;
+
+import io.swagger.annotations.ApiOperation;
+import org.apache.ambari.infra.doc.InfraManagerApiDocStorage;
+import org.springframework.context.annotation.Scope;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Path("swagger.{type:json|yaml}")
+@Named
+@Scope("request")
+public class ApiDocResource {
+
+  @Inject
+  private InfraManagerApiDocStorage infraManagerApiDocStorage;
+
+  @GET
+  @Produces({MediaType.APPLICATION_JSON, "application/yaml"})
+  @ApiOperation(value = "The swagger definition in either JSON or YAML", hidden = true)
+  public Response swaggerDefinitionResponse(@PathParam("type") String type) {
+    Response response = Response.status(404).build();
+    if (infraManagerApiDocStorage.getSwagger() != null) {
+      if ("yaml".equalsIgnoreCase(type)) {
+        response = Response.ok().entity(infraManagerApiDocStorage.getSwaggerYaml()).type("application/yaml").build();
+      } else {
+        response = Response.ok().entity(infraManagerApiDocStorage.getSwagger()).build();
+      }
+    }
+    return response;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties b/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties
index fbeac78..8162376 100644
--- a/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties
+++ b/ambari-infra/ambari-infra-manager/src/main/resources/infra-manager.properties
@@ -15,4 +15,6 @@
 infra-manager.batch.db.file=job-repository.db
 infra-manager.batch.db.init=true
 infra-manager.batch.db.username=admin
-infra-manager.batch.db.password=admin
\ No newline at end of file
+infra-manager.batch.db.password=admin
+management.security.enabled=false
+management.health.solr.enabled=false

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/log4j.xml b/ambari-infra/ambari-infra-manager/src/main/resources/log4j.xml
deleted file mode 100644
index 0450454..0000000
--- a/ambari-infra/ambari-infra-manager/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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.
--->
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-  <appender name="console" class="org.apache.log4j.ConsoleAppender">
-    <param name="Target" value="System.out" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="INFO" />
-    <appender-ref ref="console" />
-  </root>
-</log4j:configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/log4j2.xml b/ambari-infra/ambari-infra-manager/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..ad1adcd
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/resources/log4j2.xml
@@ -0,0 +1,41 @@
+<?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 monitorinterval="30" status="info" strict="true">
+  <Properties>
+    <Property name="logging.file">out/infra-manager.log</Property>
+  </Properties>
+  <Appenders>
+    <Appender type="Console" name="Console">
+      <Layout type="PatternLayout" pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n" />
+    </Appender>
+    <RollingFile name="File" fileName="${logging.file}" filePattern="${logging.file}-%i-%d{yyyy-MM-dd}">
+      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}:%L - %msg%n" />
+      <Policies>
+        <TimeBasedTriggeringPolicy />
+        <SizeBasedTriggeringPolicy size="10 MB"/>
+      </Policies>
+      <DefaultRolloverStrategy max="10"/>
+    </RollingFile>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="File" />
+      <AppenderRef ref="Console" />
+    </Root>
+  </Loggers>
+</Configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/static/index.html
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/static/index.html b/ambari-infra/ambari-infra-manager/src/main/resources/static/index.html
new file mode 100644
index 0000000..3e64867
--- /dev/null
+++ b/ambari-infra/ambari-infra-manager/src/main/resources/static/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!--
+ 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.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    <h1>Welcome!</h1>
+  </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/swagger/swagger.html
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/swagger/swagger.html b/ambari-infra/ambari-infra-manager/src/main/resources/swagger/swagger.html
index 8580e1a..52ebf61 100644
--- a/ambari-infra/ambari-infra-manager/src/main/resources/swagger/swagger.html
+++ b/ambari-infra/ambari-infra-manager/src/main/resources/swagger/swagger.html
@@ -18,24 +18,24 @@
 <html>
 <head>
     <title>Infra Manager REST API</title>
-    <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
-    <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
-    <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
-    <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
-    <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
-    <script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>
-    <script src='lib/underscore-min.js' type='text/javascript'></script>
-    <script src='lib/backbone-min.js' type='text/javascript'></script>
-    <script src='swagger-ui.js' type='text/javascript'></script>
-    <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
-    <script src='lib/marked.js' type='text/javascript'></script>
-    <script src='lib/swagger-oauth.js' type='text/javascript'></script>
+    <link rel="icon" type="image/png" href="swagger-ui/2.1.0/images/favicon-32x32.png" sizes="32x32" />
+    <link rel="icon" type="image/png" href="swagger-ui/2.1.0/images/favicon-16x16.png" sizes="16x16" />
+    <link href='swagger-ui/2.1.0/css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='swagger-ui/2.1.0/css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='swagger-ui/2.1.0/css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='swagger-ui/2.1.0/css/reset.css' media='print' rel='stylesheet' type='text/css'/>
+    <link href='swagger-ui/2.1.0/css/print.css' media='print' rel='stylesheet' type='text/css'/>
+    <script src='swagger-ui/2.1.0/lib/jquery-1.8.0.min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/jquery.slideto.min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/jquery.wiggle.min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/handlebars-2.0.0.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/underscore-min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/backbone-min.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/swagger-ui.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/highlight.7.3.pack.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/marked.js' type='text/javascript'></script>
+    <script src='swagger-ui/2.1.0/lib/swagger-oauth.js' type='text/javascript'></script>
 
     <script type="text/javascript">
         $(function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6633a7bd/ambari-infra/ambari-infra-manager/src/main/resources/webapp/index.html
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-manager/src/main/resources/webapp/index.html b/ambari-infra/ambari-infra-manager/src/main/resources/webapp/index.html
deleted file mode 100644
index 3e64867..0000000
--- a/ambari-infra/ambari-infra-manager/src/main/resources/webapp/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!--
- 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.
--->
-<html>
-  <head>
-  </head>
-  <body>
-    <h1>Welcome!</h1>
-  </body>
-</html>
\ No newline at end of file


[24/50] [abbrv] ambari git commit: AMBARI-22037 Log Search UI: host filter should be performed using hostList parameter. (ababiichuk)

Posted by jl...@apache.org.
AMBARI-22037 Log Search UI: host filter should be performed using hostList parameter. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: d9662987483c8e0d347c59f02e8e459427a90749
Parents: d221ab7
Author: ababiichuk <ab...@hortonworks.com>
Authored: Fri Sep 22 12:00:33 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Fri Sep 22 12:00:33 2017 +0300

----------------------------------------------------------------------
 .../src/app/classes/queries/audit-logs-query-params.class.ts    | 2 --
 .../queries/service-logs-histogram-query-params.class.ts        | 1 -
 .../src/app/classes/queries/service-logs-query-params.class.ts  | 1 -
 .../ambari-logsearch-web/src/app/services/filtering.service.ts  | 4 ----
 .../src/app/services/logs-container.service.ts                  | 5 ++---
 .../src/app/services/mock-api-data.service.ts                   | 2 +-
 ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json   | 1 -
 7 files changed, 3 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
index ef8cf28..d179376 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
@@ -39,8 +39,6 @@ export class AuditLogsQueryParams extends QueryParams {
   start_time?: string;
   end_time?: string;
   clusters?: string;
-  iMessage?: string;
-  eMessage?: string;
   mustBe?: string;
   mustNot?: string;
   includeQuery?: string;

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
index 572af03..2e2113f 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
@@ -64,7 +64,6 @@ export class ServiceLogsHistogramQueryParams extends QueryParams {
   to: string;
   unit?: string;
   clusters?: string;
-  iMessage?: string;
   level?: string;
   includeQuery?: string;
   excludeQuery?: string;

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
index c88ec46..864b689 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
@@ -20,7 +20,6 @@ import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params
 
 export class ServiceLogsQueryParams extends AuditLogsQueryParams {
   level?: string;
-  host_name?: string;
   file_name?: string;
   bundle_id?: string;
   hostList?: string;

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
index 718149e..627dc27 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -66,10 +66,6 @@ export class FilteringService {
       options: [],
       defaultValue: ''
     },
-    text: {
-      label: 'filter.message',
-      defaultValue: ''
-    },
     timeRange: {
       options: [
         [

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
index a90d099..26d1b6b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
@@ -43,11 +43,10 @@ export class LogsContainerService {
 
   private readonly listFilters = {
     clusters: ['clusters'],
-    text: ['iMessage'],
     timeRange: ['end_time', 'start_time'],
     components: ['mustBe'],
     levels: ['level'],
-    hosts: ['host_name'],
+    hosts: ['hostList'],
     sorting: ['sortType', 'sortBy'],
     pageSize: ['pageSize'],
     page: ['page'],
@@ -56,10 +55,10 @@ export class LogsContainerService {
 
   private readonly histogramFilters = {
     clusters: ['clusters'],
-    text: ['iMessage'],
     timeRange: ['to', 'from'],
     components: ['mustBe'],
     levels: ['level'],
+    hosts: ['hostList'],
     query: ['includeQuery', 'excludeQuery']
   };
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
index ec89d9f..937fae1 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
@@ -60,7 +60,7 @@ export class mockApiDataService implements InMemoryDbService {
           key: 'logtime',
           filterFunction: (value, filterValue) => value < moment(filterValue).valueOf()
         },
-        host_name: {
+        hostList: {
           key: 'host',
           isValuesList: true
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/d9662987/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
index e3f4c69..1235a80 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -18,7 +18,6 @@
   "filter.all": "All",
 
   "filter.clusters": "Clusters",
-  "filter.message": "Message:",
   "filter.components": "Components",
   "filter.levels": "Levels",
   "filter.capture": "Capture",


[44/50] [abbrv] ambari git commit: AMBARI-22045. Infra Solr client cleanup: make infra-solr-client script usable with symlinks (oleewere)

Posted by jl...@apache.org.
AMBARI-22045. Infra Solr client cleanup: make infra-solr-client script usable with symlinks (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 520d8fcce38e9c2edf8d972625d5a9aa4663c04b
Parents: 653d2f2
Author: Oliver Szabo <ol...@gmail.com>
Authored: Sun Sep 24 01:08:11 2017 +0200
Committer: Oliver Szabo <ol...@gmail.com>
Committed: Mon Sep 25 20:18:02 2017 +0200

----------------------------------------------------------------------
 .../apache/ambari/infra/solr/AmbariSolrCloudCLI.java  | 12 ++++++------
 .../src/main/resources/log4j.properties               |  6 +++++-
 .../src/main/resources/solrCloudCli.sh                |  8 +++++++-
 .../src/main/resources/solrIndexHelper.sh             | 14 ++++++++++----
 .../0.1.0/properties/solr-client-log4j.properties.j2  |  4 ++++
 5 files changed, 32 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/520d8fcc/ambari-infra/ambari-infra-solr-client/src/main/java/org/apache/ambari/infra/solr/AmbariSolrCloudCLI.java
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/src/main/java/org/apache/ambari/infra/solr/AmbariSolrCloudCLI.java b/ambari-infra/ambari-infra-solr-client/src/main/java/org/apache/ambari/infra/solr/AmbariSolrCloudCLI.java
index 70bc232..95708d7 100644
--- a/ambari-infra/ambari-infra-solr-client/src/main/java/org/apache/ambari/infra/solr/AmbariSolrCloudCLI.java
+++ b/ambari-infra/ambari-infra-solr-client/src/main/java/org/apache/ambari/infra/solr/AmbariSolrCloudCLI.java
@@ -66,7 +66,7 @@ public class AmbariSolrCloudCLI {
       + "\n./solrCloudCli.sh --secure-znode -z host1:2181,host2:2181 -zn /ambari-solr -su logsearch,atlas,ranger --jaas-file /etc/myconf/jaas_file"
       + "\n./solrCloudCli.sh --unsecure-znode -z host1:2181,host2:2181 -zn /ambari-solr --jaas-file /etc/myconf/jaas_file"
       + "\n./solrCloudCli.sh --secure-solr-znode -z host1:2181,host2:2181 -zn /ambari-solr -su logsearch,atlas,ranger --jaas-file /etc/myconf/jaas_file"
-      + "\n./solrCloudCli.sh --setup-kerberos-plugin -z host1:2181,host2:2181 -zn /ambari-solr --security-json-location /etc/infra-solr/conf/security.json\n";
+      + "\n./solrCloudCli.sh --setup-kerberos-plugin -z host1:2181,host2:2181 -zn /ambari-solr --security-json-location /etc/infra-solr/conf/security.json\n ";
 
   public static void main(String[] args) {
     Options options = new Options();
@@ -126,22 +126,22 @@ public class AmbariSolrCloudCLI {
 
     final Option secureSolrZnodeOption = Option.builder("ssz")
       .longOpt(SECURE_SOLR_ZNODE_COMMAND)
-      .desc("Set acls for solr znode")
+      .desc("Set acls for solr znode (command)")
       .build();
 
     final Option secureZnodeOption = Option.builder("sz")
       .longOpt(SECURE_ZNODE_COMMAND)
-      .desc("Set acls for znode")
+      .desc("Set acls for znode (command)")
       .build();
 
     final Option unsecureZnodeOption = Option.builder("uz")
       .longOpt(UNSECURE_ZNODE_COMMAND)
-      .desc("Disable security for znode")
+      .desc("Disable security for znode (command)")
       .build();
 
     final Option removeAdminHandlerOption = Option.builder("rah")
       .longOpt(REMOVE_ADMIN_HANDLERS)
-      .desc("Remove AdminHandlers request handler from solrconfig.xml")
+      .desc("Remove AdminHandlers request handler from solrconfig.xml (command)")
       .build();
 
     final Option shardNameOption = Option.builder("sn")
@@ -428,7 +428,7 @@ public class AmbariSolrCloudCLI {
       } else {
         List<String> commands = Arrays.asList(CREATE_COLLECTION_COMMAND, CREATE_SHARD_COMMAND, UPLOAD_CONFIG_COMMAND,
           DOWNLOAD_CONFIG_COMMAND, CONFIG_CHECK_COMMAND, SET_CLUSTER_PROP, CREATE_ZNODE, SECURE_ZNODE_COMMAND, UNSECURE_ZNODE_COMMAND,
-          SECURE_SOLR_ZNODE_COMMAND, CHECK_ZNODE, SETUP_KERBEROS_PLUGIN);
+          SECURE_SOLR_ZNODE_COMMAND, CHECK_ZNODE, SETUP_KERBEROS_PLUGIN, REMOVE_ADMIN_HANDLERS);
         helpFormatter.printHelp(CMD_LINE_SYNTAX, options);
         exit(1, String.format("One of the supported commands is required (%s)", StringUtils.join(commands, "|")));
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/520d8fcc/ambari-infra/ambari-infra-solr-client/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/src/main/resources/log4j.properties b/ambari-infra/ambari-infra-solr-client/src/main/resources/log4j.properties
index e8dca12..4779596 100644
--- a/ambari-infra/ambari-infra-solr-client/src/main/resources/log4j.properties
+++ b/ambari-infra/ambari-infra-solr-client/src/main/resources/log4j.properties
@@ -23,9 +23,13 @@ log4j.appender.stdout.Threshold=INFO
 log4j.appender.stdout.Target=System.out
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%m%n
+log4j.appender.stdout.filter.lvlRangeFilter=org.apache.log4j.varia.LevelRangeFilter
+log4j.appender.stdout.filter.lvlRangeFilter.LevelMax=WARN
 
 log4j.appender.stderr=org.apache.log4j.ConsoleAppender
 log4j.appender.stderr.Threshold=ERROR
 log4j.appender.stderr.Target=System.err
 log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
-log4j.appender.stderr.layout.ConversionPattern=%m%n
\ No newline at end of file
+log4j.appender.stderr.layout.ConversionPattern=%m%n
+log4j.appender.stderr.filter.lvlRangeFilter=org.apache.log4j.varia.LevelRangeFilter
+log4j.appender.stderr.filter.lvlRangeFilter.LevelMin=ERROR
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/520d8fcc/ambari-infra/ambari-infra-solr-client/src/main/resources/solrCloudCli.sh
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/src/main/resources/solrCloudCli.sh b/ambari-infra/ambari-infra-solr-client/src/main/resources/solrCloudCli.sh
index 7bfa864..ac7d59f 100644
--- a/ambari-infra/ambari-infra-solr-client/src/main/resources/solrCloudCli.sh
+++ b/ambari-infra/ambari-infra-solr-client/src/main/resources/solrCloudCli.sh
@@ -16,5 +16,11 @@
 
 JVM="java"
 sdir="`dirname \"$0\"`"
+ldir="`dirname "$(readlink -f "$0")"`"
 
-PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$sdir:$sdir/libs/*" org.apache.ambari.infra.solr.AmbariSolrCloudCLI ${1+"$@"}
\ No newline at end of file
+DIR="$sdir"
+if [ "$sdir" != "$ldir" ]; then
+  DIR="$ldir"
+fi
+
+PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$DIR:$DIR/libs/*" org.apache.ambari.infra.solr.AmbariSolrCloudCLI ${1+"$@"}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/520d8fcc/ambari-infra/ambari-infra-solr-client/src/main/resources/solrIndexHelper.sh
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/src/main/resources/solrIndexHelper.sh b/ambari-infra/ambari-infra-solr-client/src/main/resources/solrIndexHelper.sh
index 12e6a77..1d219d6 100755
--- a/ambari-infra/ambari-infra-solr-client/src/main/resources/solrIndexHelper.sh
+++ b/ambari-infra/ambari-infra-solr-client/src/main/resources/solrIndexHelper.sh
@@ -16,6 +16,12 @@
 
 JVM="java"
 sdir="`dirname \"$0\"`"
+ldir="`dirname "$(readlink -f "$0")"`"
+
+DIR="$sdir"
+if [ "$sdir" != "$ldir" ]; then
+  DIR="$ldir"
+fi
 : ${JAVA_HOME:?"Please set the JAVA_HOME for lucene index migration!"}
 
 function print_help() {
@@ -48,7 +54,7 @@ function upgrade_core() {
   for coll in $SOLR_CORE_FILTER_ARR; do
     if [[ "$1" == *"$coll"* ]]; then
       echo "Core '$1' dir name contains $coll (core filter)'";
-      version=$(PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$sdir/libs/lucene-core-6.6.0.jar:$sdir/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.CheckIndex -fast $1|grep "   version="|sed -e 's/.*=//g'|head -1)
+      version=$(PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$DIR/libs/lucene-core-6.6.0.jar:$DIR/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.CheckIndex -fast $1|grep "   version="|sed -e 's/.*=//g'|head -1)
       if [ -z $version ] ; then
         echo "Core '$1' - Empty index?"
         return
@@ -58,7 +64,7 @@ function upgrade_core() {
         echo "Core '$1' - Already on version $version, not upgrading. Use -f or --force option to run upgrade anyway."
       else
         echo "Core '$1' - Index version is $version, upgrading ..."
-        PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$sdir/libs/lucene-core-6.6.0.jar:$sdir/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.IndexUpgrader -delete-prior-commits $1
+        PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$DIR/libs/lucene-core-6.6.0.jar:$DIR/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.IndexUpgrader -delete-prior-commits $1
         echo "Upgrading core '$1' has finished"
       fi
     fi
@@ -125,11 +131,11 @@ function upgrade_index() {
 
 function upgrade_index_tool() {
   # see: https://cwiki.apache.org/confluence/display/solr/IndexUpgrader+Tool
-  PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$sdir/libs/lucene-core-6.6.0.jar:$sdir/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.IndexUpgrader ${@}
+  PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$DIR/libs/lucene-core-6.6.0.jar:$DIR/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.IndexUpgrader ${@}
 }
 
 function check_index_tool() {
-  PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$sdir/libs/lucene-core-6.6.0.jar:$sdir/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.CheckIndex ${@}
+  PATH=$JAVA_HOME/bin:$PATH $JVM -classpath "$DIR/libs/lucene-core-6.6.0.jar:$DIR/libs/lucene-backward-codecs-6.6.0.jar" org.apache.lucene.index.CheckIndex ${@}
 }
 
 function main() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/520d8fcc/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/solr-client-log4j.properties.j2
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/solr-client-log4j.properties.j2 b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/solr-client-log4j.properties.j2
index 0d0adc3..df77961 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/solr-client-log4j.properties.j2
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/solr-client-log4j.properties.j2
@@ -30,9 +30,13 @@ log4j.appender.stdout.Threshold=INFO
 log4j.appender.stdout.Target=System.out
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%m%n
+log4j.appender.stdout.filter.lvlRangeFilter=org.apache.log4j.varia.LevelRangeFilter
+log4j.appender.stdout.filter.lvlRangeFilter.LevelMax=WARN
 
 log4j.appender.stderr=org.apache.log4j.ConsoleAppender
 log4j.appender.stderr.Threshold=ERROR
 log4j.appender.stderr.Target=System.err
 log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
 log4j.appender.stderr.layout.ConversionPattern=%m%n
+log4j.appender.stderr.filter.lvlRangeFilter=org.apache.log4j.varia.LevelRangeFilter
+log4j.appender.stderr.filter.lvlRangeFilter.LevelMin=ERROR


[29/50] [abbrv] ambari git commit: AMBARI-22038 Log Search UI: implement application of selected text to service logs filters. (ababiichuk)

Posted by jl...@apache.org.
AMBARI-22038 Log Search UI: implement application of selected text to service logs filters. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: f067ec8c3aaeb596760db4c2bcb98ce81f75769a
Parents: eead09b
Author: ababiichuk <ab...@hortonworks.com>
Authored: Fri Sep 22 13:19:37 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Fri Sep 22 15:20:02 2017 +0300

----------------------------------------------------------------------
 .../ambari-logsearch-web/src/app/app.module.ts  |  2 +-
 .../src/app/classes/list-item.class.ts          | 25 ++++++++
 .../dropdown-button.component.ts                |  5 +-
 .../dropdown-list/dropdown-list.component.html  |  5 +-
 .../dropdown-list/dropdown-list.component.ts    |  7 ++-
 .../filter-button/filter-button.component.ts    |  3 +-
 .../filters-panel/filters-panel.component.html  |  3 +-
 .../filters-panel/filters-panel.component.ts    | 10 +++-
 .../logs-list/logs-list.component.html          |  7 ++-
 .../logs-list/logs-list.component.less          |  4 ++
 .../components/logs-list/logs-list.component.ts | 61 +++++++++++++++++++-
 .../menu-button/menu-button.component.spec.ts   | 19 +++++-
 .../menu-button/menu-button.component.ts        |  5 +-
 .../search-box/search-box.component.ts          | 35 ++++++++---
 .../src/app/services/filtering.service.ts       |  5 +-
 .../src/assets/i18n/en.json                     |  4 +-
 .../ambari-logsearch-web/src/polyfills.ts       |  2 +-
 17 files changed, 173 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
index acf1b9f..fca68b5 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
@@ -84,7 +84,7 @@ export function HttpLoaderFactory(http: Http) {
   return new TranslateHttpLoader(http, 'resources/assets/i18n/', '.json?static=true');
 }
 
-export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSRFStrategy, options: ResponseOptions): any {
+export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSRFStrategy, options: ResponseOptions): XHRBackend | InMemoryBackendService {
   if (environment.production) {
     return new XHRBackend(browser, options, xsrf);
   } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/classes/list-item.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/list-item.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/list-item.class.ts
new file mode 100644
index 0000000..adb023b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/list-item.class.ts
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+export interface ListItem {
+  id?: string;
+  label?: string;
+  value: any;
+  iconClass?: string;
+  isChecked?: boolean;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
index 42b9451..43d79f8 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
@@ -17,6 +17,7 @@
  */
 
 import {Component, OnInit, Input} from '@angular/core';
+import {ListItem} from '@app/classes/list-item.class';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {UtilsService} from '@app/services/utils.service';
 
@@ -47,7 +48,7 @@ export class DropdownButtonComponent implements OnInit {
   showSelectedValue: boolean = true;
 
   @Input()
-  options?: any[];
+  options?: ListItem[];
 
   @Input()
   defaultValue?: string;
@@ -82,7 +83,7 @@ export class DropdownButtonComponent implements OnInit {
     this.selectedValue = value;
   }
 
-  updateValue(eventOptions: any): void {
+  updateValue(eventOptions: ListItem): void {
     const value = eventOptions && eventOptions.value,
       action = this.action && this.actions[this.action];
     if (this.isMultipleChoice) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
index 1baebed..316d3f9 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
@@ -19,12 +19,15 @@
   <label class="list-item-label" *ngIf="isMultipleChoice">
     <input type="checkbox" [attr.id]="item.id || item.value" [attr.checked]="item.isChecked ? 'checked' : null"
            (change)="changeSelectedItem({value: item.value, isChecked: $event.currentTarget.checked})">
-    <label [attr.for]="item.id || item.value" class="label-container">{{item.label | translate}}
+    <label [attr.for]="item.id || item.value" class="label-container">
+      <span *ngIf="item.iconClass" [ngClass]="item.iconClass"></span>
+      {{item.label | translate}}
       <div #additionalComponent></div>
     </label>
   </label>
   <span class="list-item-label label-container" *ngIf="!isMultipleChoice"
         (click)="changeSelectedItem({value: item.value, label: item.label})">
+    <span *ngIf="item.iconClass" [ngClass]="item.iconClass"></span>
     {{item.label | translate}}
     <div #additionalComponent></div>
   </span>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
index 3de664e..82656cf 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
@@ -17,6 +17,7 @@
  */
 
 import {Component, AfterViewInit, Input, Output, EventEmitter, ViewChildren, ViewContainerRef, QueryList} from '@angular/core';
+import {ListItem} from '@app/classes/list-item.class';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
 
 @Component({
@@ -37,7 +38,7 @@ export class DropdownListComponent implements AfterViewInit {
   }
 
   @Input()
-  items: any[];
+  items: ListItem[];
 
   @Input()
   defaultAction: Function;
@@ -49,14 +50,14 @@ export class DropdownListComponent implements AfterViewInit {
   additionalLabelComponentSetter?: string;
 
   @Output()
-  selectedItemChange: EventEmitter<any> = new EventEmitter();
+  selectedItemChange: EventEmitter<ListItem> = new EventEmitter();
 
   @ViewChildren('additionalComponent', {
     read: ViewContainerRef
   })
   containers: QueryList<ViewContainerRef>;
 
-  changeSelectedItem(options: any): void {
+  changeSelectedItem(options: ListItem): void {
     this.selectedItemChange.emit(options);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
index 9940d73..1481583 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
@@ -18,6 +18,7 @@
 
 import {Component, Input, forwardRef} from '@angular/core';
 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
+import {ListItem} from "@app/classes/list-item.class";
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {UtilsService} from '@app/services/utils.service';
 import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
@@ -56,7 +57,7 @@ export class FilterButtonComponent extends MenuButtonComponent implements Contro
     this.onChange(newValue);
   }
 
-  updateValue(options: any): void {
+  updateValue(options: ListItem): void {
     const value = options && options.value;
     if (this.isMultipleChoice) {
       this.value = this.utils.updateMultiSelectValue(this.value, value, options.isChecked);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
index dc76e79..99dd43d 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
@@ -21,7 +21,8 @@
                      [defaultLabel]="filters.clusters.defaultLabel" [isMultipleChoice]="true"
                      class="filter-input"></filter-dropdown>
     <search-box formControlName="query" [items]="searchBoxItemsTranslated" class="filter-input"
-                [parameterNameChangeSubject]="queryParameterNameChange"></search-box>
+                [parameterNameChangeSubject]="queryParameterNameChange"
+                [parameterAddSubject]="queryParameterAdd"></search-box>
     <time-range-picker formControlName="timeRange" [defaultLabel]="filters.timeRange.defaultLabel"
                        class="filter-input"></time-range-picker>
     <timezone-picker class="filter-input"></timezone-picker>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
index 72ab222..42056c6 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
@@ -20,6 +20,8 @@ import {Component} from '@angular/core';
 import {FormGroup} from '@angular/forms';
 import {Subject} from 'rxjs/Subject';
 import {TranslateService} from '@ngx-translate/core';
+import {ListItem} from '@app/classes/list-item.class';
+import {CommonEntry} from '@app/models/common-entry.model';
 import {FilteringService} from '@app/services/filtering.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {AppStateService} from '@app/services/storage/app-state.service';
@@ -67,9 +69,9 @@ export class FiltersPanelComponent {
 
   private logsType: string; // TODO implement setting the parameter depending on user's navigation
 
-  searchBoxItems: any[] = [];
+  searchBoxItems: ListItem[] = [];
 
-  searchBoxItemsTranslated: any[] = [];
+  searchBoxItemsTranslated: CommonEntry[] = [];
 
   get filters(): any {
     return this.filtering.filters;
@@ -83,4 +85,8 @@ export class FiltersPanelComponent {
     return this.filtering.queryParameterNameChange;
   }
 
+  get queryParameterAdd(): Subject<any> {
+    return this.filtering.queryParameterAdd;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
index 29a85c5..2942b20 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
@@ -46,7 +46,10 @@
           <span class="action-icon fa fa-crosshairs"></span>
         </div>
         <div class="log-content-inner-wrapper">
-          <div class="log-content" *ngIf="isColumnDisplayed('log_message')">{{log.log_message}}</div>
+          <div class="log-content" *ngIf="isColumnDisplayed('log_message')"
+               (contextmenu)="openMessageContextMenu($event)">
+            {{log.log_message}}
+          </div>
         </div>
       </div>
       <div *ngFor="let column of displayedColumns">
@@ -56,5 +59,7 @@
     </ng-template>
   </accordion-panel>
 </div>
+<ul #contextmenu data-component="dropdown-list" class="dropdown-menu context-menu" [items]="contextMenuItems"
+    (selectedItemChange)="updateQuery($event)"></ul>
 <pagination class="col-md-12" *ngIf="logs && logs.length" [totalCount]="totalCount" [filtersForm]="filtersForm"
             [filterInstance]="filters.pageSize" [currentCount]="logs.length"></pagination>

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
index 584c1a7..577043f 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
@@ -135,3 +135,7 @@
     }
   }
 }
+
+.context-menu {
+  position: fixed;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
index a081e1b..aeb55da 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import {Component, Input} from '@angular/core';
+import {Component, OnInit, Input, ViewChild, ElementRef} from '@angular/core';
 import {FormGroup} from '@angular/forms';
 import 'rxjs/add/operator/map';
 import {FilteringService} from '@app/services/filtering.service';
@@ -26,11 +26,15 @@ import {UtilsService} from '@app/services/utils.service';
   templateUrl: './logs-list.component.html',
   styleUrls: ['./logs-list.component.less']
 })
-export class LogsListComponent {
+export class LogsListComponent implements OnInit {
 
   constructor(private filtering: FilteringService, private utils: UtilsService) {
   }
 
+  ngOnInit() {
+    this.contextMenuElement = this.contextMenu.nativeElement;
+  }
+
   @Input()
   logs: any[] = [];
 
@@ -40,8 +44,32 @@ export class LogsListComponent {
   @Input()
   displayedColumns: any[] = [];
 
+  @ViewChild('contextmenu', {
+    read: ElementRef
+  })
+  contextMenu: ElementRef;
+
+  private contextMenuElement: HTMLElement;
+
+  private selectedText: string = '';
+
+  private readonly messageFilterParameterName = 'log_message';
+
   readonly customStyledColumns = ['level', 'type', 'logtime', 'log_message'];
 
+  readonly contextMenuItems = [
+    {
+      label: 'logs.addToQuery',
+      iconClass: 'fa fa-search-plus',
+      value: false // 'isExclude' is false
+    },
+    {
+      label: 'logs.excludeFromQuery',
+      iconClass: 'fa fa-search-minus',
+      value: true // 'isExclude' is true
+    }
+  ];
+
   readonly dateFormat: string = 'dddd, MMMM Do';
 
   readonly timeFormat: string = 'h:mm:ss A';
@@ -66,4 +94,33 @@ export class LogsListComponent {
     return this.displayedColumns.some(column => column.name === key);
   }
 
+  openMessageContextMenu(event: MouseEvent): void {
+    const selectedText = getSelection().toString();
+    if (selectedText) {
+      let contextMenuStyle = this.contextMenuElement.style;
+      Object.assign(contextMenuStyle, {
+        left: `${event.clientX}px`,
+        top: `${event.clientY}px`,
+        display: 'block'
+      });
+      this.selectedText = selectedText;
+      document.body.addEventListener('click', this.dismissContextMenu);
+      event.preventDefault();
+    }
+  }
+
+  updateQuery(event: any) {
+    this.filtering.queryParameterAdd.next({
+      name: this.messageFilterParameterName,
+      value: this.selectedText,
+      isExclude: event.value
+    });
+  }
+
+  private dismissContextMenu = (): void => {
+    this.selectedText = '';
+    this.contextMenuElement.style.display = 'none';
+    document.body.removeEventListener('click', this.dismissContextMenu);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
index 65f0ee6..f736fd5 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
@@ -28,6 +28,7 @@ import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import {FilteringService} from '@app/services/filtering.service';
 import {HttpClientService} from '@app/services/http-client.service';
+import {ListItem} from "@app/classes/list-item.class";
 
 import {MenuButtonComponent} from './menu-button.component';
 
@@ -86,7 +87,11 @@ describe('MenuButtonComponent', () => {
         title: 'empty sub-items array'
       },
       {
-        subItems: [{}],
+        subItems: [
+          {
+            value: null
+          }
+        ],
         hasSubItems: true,
         title: 'sub-items present'
       }
@@ -115,13 +120,21 @@ describe('MenuButtonComponent', () => {
         title: 'empty sub-items array'
       },
       {
-        subItems: [{}],
+        subItems: [
+          {
+            value: null
+          }
+        ],
         hideCaret: false,
         hasCaret: true,
         title: 'sub-items present, caret not hidden'
       },
       {
-        subItems: [{}],
+        subItems: [
+          {
+            value: null
+          }
+        ],
         hideCaret: true,
         hasCaret: true,
         title: 'sub-items present, caret hidden'

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
index b674ec6..7e347e6 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
@@ -17,6 +17,7 @@
  */
 
 import {Component, Input, ViewChild, ElementRef} from '@angular/core';
+import {ListItem} from '@app/classes/list-item.class';
 import {ComponentActionsService} from '@app/services/component-actions.service';
 import * as $ from 'jquery';
 
@@ -46,7 +47,7 @@ export class MenuButtonComponent {
   labelClass?: string;
 
   @Input()
-  subItems?: any[];
+  subItems?: ListItem[];
 
   @Input()
   isMultipleChoice: boolean = false;
@@ -90,7 +91,7 @@ export class MenuButtonComponent {
     }
   }
   
-  updateValue(options: any) {
+  updateValue(options: ListItem) {
     // TODO implement value change behaviour
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
index 4730190..e547a62 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/search-box/search-box.component.ts
@@ -19,6 +19,7 @@
 import {Component, OnInit, OnDestroy, Input, ViewChild, ElementRef, forwardRef} from '@angular/core';
 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
 import {Subject} from 'rxjs/Subject';
+import {CommonEntry} from '@app/models/common-entry.model';
 import {UtilsService} from '@app/services/utils.service';
 
 @Component({
@@ -48,6 +49,7 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     this.parameterInput.addEventListener('blur', this.onParameterInputBlur);
     this.valueInput.addEventListener('blur', this.onValueInputBlur);
     this.parameterNameChangeSubject.subscribe(this.onParameterNameChange);
+    this.parameterAddSubject.subscribe(this.onParameterAdd);
   }
 
   ngOnDestroy() {
@@ -57,6 +59,7 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     this.parameterInput.removeEventListener('blur', this.onParameterInputBlur);
     this.valueInput.removeEventListener('blur', this.onValueInputBlur);
     this.parameterNameChangeSubject.unsubscribe();
+    this.parameterAddSubject.unsubscribe();
   }
 
   private currentId: number = 0;
@@ -74,22 +77,25 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
   currentValue: string;
 
   @Input()
-  items: any[] = [];
+  items: CommonEntry[] = [];
 
   @Input()
   parameterNameChangeSubject: Subject<any> = this.defaultSubject;
 
+  @Input()
+  parameterAddSubject: Subject<any> = this.defaultSubject;
+
   @ViewChild('parameterInput')
   parameterInputRef: ElementRef;
 
   @ViewChild('valueInput')
   valueInputRef: ElementRef;
 
-  rootElement: HTMLElement;
+  private rootElement: HTMLElement;
 
-  parameterInput: HTMLElement;
+  private parameterInput: HTMLElement;
 
-  valueInput: HTMLElement;
+  private valueInput: HTMLElement;
 
   activeItem?: any;
 
@@ -127,13 +133,17 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     }
   };
 
+  private getItem(name: string): CommonEntry {
+    return this.items.find(field => field.value === name);
+  }
+
   clear(): void {
     this.isActive = false;
     this.activeItem = null;
     this.currentValue = null;
   }
 
-  itemsListFormatter(item: any): string {
+  itemsListFormatter(item: CommonEntry): string {
     return item.name;
   }
 
@@ -142,8 +152,7 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
   }
 
   onParameterNameChange = (options: any): void => {
-    this.activeItem = typeof options.item === 'string' ?
-      this.items.find(field => field.value === options.item) : options.item;
+    this.activeItem = typeof options.item === 'string' ? this.getItem(options.item) : options.item;
     this.isExclude = options.isExclude;
     this.isActive = true;
     this.isParameterInput = false;
@@ -168,6 +177,18 @@ export class SearchBoxComponent implements OnInit, OnDestroy, ControlValueAccess
     }
   }
 
+  onParameterAdd = (options: any): void => {
+    const item = this.getItem(options.name);
+    this.parameters.push({
+      id: this.currentId++,
+      name: options.name,
+      label: item.name,
+      value: options.value,
+      isExclude: options.isExclude
+    });
+    this.updateValue();
+  }
+
   removeParameter(event: MouseEvent, id: number): void {
     this.parameters = this.parameters.filter(parameter => parameter.id !== id);
     this.updateValue();

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
index 627dc27..beaf91c 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -20,6 +20,7 @@ import {Injectable} from '@angular/core';
 import {FormControl, FormGroup} from '@angular/forms';
 import {Subject} from 'rxjs/Subject';
 import * as moment from 'moment-timezone';
+import {ListItem} from '@app/classes/list-item.class';
 import {AppSettingsService} from '@app/services/storage/app-settings.service';
 import {ClustersService} from '@app/services/storage/clusters.service';
 import {ComponentsService} from '@app/services/storage/components.service';
@@ -47,7 +48,7 @@ export class FilteringService {
     });
   }
 
-  private getListItem(name: string): any {
+  private getListItem(name: string): ListItem {
     return {
       label: name,
       value: name
@@ -403,6 +404,8 @@ export class FilteringService {
 
   queryParameterNameChange: Subject<any> = new Subject();
 
+  queryParameterAdd: Subject<any> = new Subject();
+
   loadClusters(): void {
     this.httpClient.get('clusters').subscribe(response => {
       const clusterNames = response.json();

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
index 1235a80..8750d64 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -139,5 +139,7 @@
   "logs.stack": "Stack",
   "logs.taskId": "Task Id",
   "logs.versionNote": "Version Note",
-  "logs.versionNumber": "Version Number"
+  "logs.versionNumber": "Version Number",
+  "logs.addToQuery": "Add to Query",
+  "logs.excludeFromQuery": "Exclude from Query"
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f067ec8c/ambari-logsearch/ambari-logsearch-web/src/polyfills.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/polyfills.ts b/ambari-logsearch/ambari-logsearch-web/src/polyfills.ts
index 0ab921a..016ab77 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/polyfills.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/polyfills.ts
@@ -42,7 +42,7 @@ import 'core-js/es6/object';
 // import 'core-js/es6/function';
 // import 'core-js/es6/parse-int';
 // import 'core-js/es6/parse-float';
-// import 'core-js/es6/number';
+import 'core-js/es6/number';
 // import 'core-js/es6/math';
 import 'core-js/es6/string';
 // import 'core-js/es6/date';


[27/50] [abbrv] ambari git commit: AMBARI-22019. Enable logsearch-web unit tests and make them skippable (oleewere)

Posted by jl...@apache.org.
AMBARI-22019. Enable logsearch-web unit tests and make them skippable (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 40f705a6654907014eae6a1981622ae404fda1e8
Parents: 9e93c47
Author: Oliver Szabo <ol...@gmail.com>
Authored: Thu Sep 21 12:52:45 2017 +0200
Committer: Oliver Szabo <ol...@gmail.com>
Committed: Fri Sep 22 13:11:15 2017 +0200

----------------------------------------------------------------------
 ambari-logsearch/ambari-logsearch-web/pom.xml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/40f705a6/ambari-logsearch/ambari-logsearch-web/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/pom.xml b/ambari-logsearch/ambari-logsearch-web/pom.xml
index 7a6b02e..f27c2c6 100644
--- a/ambari-logsearch/ambari-logsearch-web/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-web/pom.xml
@@ -78,7 +78,6 @@
               <arguments>build-prod</arguments>
             </configuration>
           </execution>
-          <!-- TODO: Use this for testing and make it skippable:
           <execution>
             <id>run tests</id>
             <phase>test</phase>
@@ -87,9 +86,9 @@
            </goals>
            <configuration>
             <arguments>test</arguments>
+            <skip>${skipTests}</skip>
            </configuration>
           </execution>
-          -->
         </executions>
       </plugin>
       <plugin>


[35/50] [abbrv] ambari git commit: AMBARI-22047. Cannot upgrade stack due to 'Version XXXXX does not contain services that are installed' (alexantonenko)

Posted by jl...@apache.org.
AMBARI-22047. Cannot upgrade stack due to 'Version XXXXX does not contain services that are installed' (alexantonenko)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 06d21bb3850d2f8257c08064ab9d695d2a4c07c1
Parents: 12abba0
Author: Alex Antonenko <aa...@hortonworks.com>
Authored: Mon Sep 25 13:55:39 2017 +0300
Committer: Alex Antonenko <aa...@hortonworks.com>
Committed: Mon Sep 25 13:55:39 2017 +0300

----------------------------------------------------------------------
 .../main/admin/stack_and_upgrade_controller.js  |  2 +-
 .../admin/stack_and_upgrade_controller_test.js  | 24 +++++++++++++++++---
 2 files changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/06d21bb3/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 6d7560b..90a4db9 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
@@ -1513,7 +1513,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     var availableServices = repo.get('stackServices').filter(function(service) {
       return App.Service.find(service.get('name')).get('isLoaded') && service.get('isAvailable') && service.get('isUpgradable');
     }, this);
-    if (!availableServices.length){
+    if (!availableServices.length && !repo.get('isStandard')){
       return App.showAlertPopup( Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'), Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.noAvailableServices').format(repo.get('displayName')) );
     }
     var self = this;

http://git-wip-us.apache.org/repos/asf/ambari/blob/06d21bb3/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 d0671f9..1b04b17 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
@@ -1170,18 +1170,36 @@ describe('App.MainAdminStackAndUpgradeController', function() {
   describe("#installRepoVersionPopup()", function () {
     before(function () {
       sinon.stub(controller, 'installRepoVersion', Em.K);
-      sinon.stub(App.Service, 'find').returns({});
+      sinon.stub(App.Service, 'find').returns(Em.Object.create({
+        isLoaded: true
+      }));
     });
     after(function () {
       controller.installRepoVersion.restore();
       App.Service.find.restore();
     });
-    it("show popup", function () {
-      var repo = Em.Object.create({'displayName': 'HDP-2.2', stackServices: []});
+    it("show confirmation popup for non standart and available services", function () {
+      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: [Em.Object.create({
+        name: 'HDFS',
+        isUpgradable: true,
+        isAvailable: true
+      })]});
+      var popup = controller.installRepoVersionPopup(repo);
+      popup.onPrimary();
+      expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
+    });
+    it("show pre-check popup for non standard and empty available services", function () {
+      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: []});
       var popup = controller.installRepoVersionPopup(repo);
       popup.onPrimary();
       expect(controller.installRepoVersion.calledWith(repo)).to.be.false;
     });
+    it("show confirmation popup for standart", function () {
+      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: true, stackServices: []});
+      var popup = controller.installRepoVersionPopup(repo);
+      popup.onPrimary();
+      expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
+    });
   });
 
   describe("#installRepoVersion()", function () {


[28/50] [abbrv] ambari git commit: AMBARI-22023 Upgrade dialog style issues.(atkach)

Posted by jl...@apache.org.
AMBARI-22023 Upgrade dialog style issues.(atkach)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: eead09bebb0c1887c8dd8fe90aa8a6d50009e897
Parents: 40f705a
Author: Andrii Tkach <at...@apache.org>
Authored: Fri Sep 22 13:11:03 2017 +0300
Committer: Andrii Tkach <at...@apache.org>
Committed: Fri Sep 22 14:48:47 2017 +0300

----------------------------------------------------------------------
 .../main/admin/stack_and_upgrade_controller.js  |   2 +-
 ambari-web/app/messages.js                      |   2 +
 ambari-web/app/routes/stack_upgrade_routes.js   |  11 +-
 ambari-web/app/styles/stack_versions.less       |  77 ++++++---
 .../stack_upgrade/stack_upgrade_wizard.hbs      | 170 +++++++++++--------
 .../main/admin/stack_upgrade/upgrade_group.hbs  |  18 +-
 .../views/common/helpers/status_icon_view.js    |   1 +
 .../admin/stack_upgrade/upgrade_wizard_view.js  |   3 +
 .../admin/stack_and_upgrade_controller_test.js  |   2 +-
 .../stack_upgrade/upgrade_wizard_view_test.js   |   2 +-
 10 files changed, 186 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/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 fba6ad6..6d7560b 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
@@ -391,7 +391,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     } else if (this.get('upgradeData.Upgrade')){
       return this.get('upgradeData.Upgrade.request_status');
     } else {
-      return '';
+      return 'INIT';
     }
   }.property('upgradeData.Upgrade.request_status', 'App.upgradeSuspended'),
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 113fb8f..db25104 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1884,6 +1884,8 @@ Em.I18n.translations = {
   'admin.stackUpgrade.state.aborted': "Upgrade Aborted",
   'admin.stackUpgrade.state.completed': "Upgrade Finished",
   'admin.stackUpgrade.state.inProgress.downgrade': "Downgrade in Progress",
+  'admin.stackUpgrade.state.init': "Upgrade Initializing",
+  'admin.stackUpgrade.state.init.downgrade': "Downgrade Initializing",
   'admin.stackUpgrade.state.paused.downgrade': "Downgrade Paused",
   'admin.stackUpgrade.state.aborted.downgrade': "Downgrade Aborted",
   'admin.stackUpgrade.state.completed.downgrade': "Downgrade Finished",

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/routes/stack_upgrade_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/stack_upgrade_routes.js b/ambari-web/app/routes/stack_upgrade_routes.js
index 24fa5e8..d36253a 100644
--- a/ambari-web/app/routes/stack_upgrade_routes.js
+++ b/ambari-web/app/routes/stack_upgrade_routes.js
@@ -40,7 +40,16 @@ module.exports = App.WizardRoute.extend({
           return App.ModalPopup.show({
             classNames: ['upgrade-wizard-modal'],
             modalDialogClasses: ['modal-xlg'],
-            header: Em.computed.alias('App.router.mainAdminStackAndUpgradeController.wizardModalTitle'),
+            headerClass: Em.View.extend({
+              header: Em.computed.alias('controller.wizardModalTitle'),
+              controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
+              template: Ember.Handlebars.compile(
+                '{{view.header}}' +
+                '<div {{bindAttr class=":upgrade-options-link controller.isDowngrade:disabled" disabled="controller.isDowngrade"}} {{action openUpgradeOptions target="controller"}}>' +
+                '<i class="icon-cogs"></i><a>{{t admin.stackVersions.version.upgrade.upgradeOptions.header}}</a>' +
+                '</div>'
+              )
+            }),
             bodyClass: App.upgradeWizardView,
             primary: Em.I18n.t('common.dismiss'),
             secondary: null,

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/styles/stack_versions.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/stack_versions.less b/ambari-web/app/styles/stack_versions.less
index 2e4faff..0221311 100644
--- a/ambari-web/app/styles/stack_versions.less
+++ b/ambari-web/app/styles/stack_versions.less
@@ -418,7 +418,6 @@
   }
   .details-box {
     padding: 5px;
-    margin-right: 95px;
     .button-row {
       text-align: right;
       padding: 5px;
@@ -439,6 +438,7 @@
     }
   }
   .task-list {
+    width: 100%;
     overflow-x: hidden;
     .progress {
       margin-bottom: 0;
@@ -448,35 +448,70 @@
       margin-right: 5px;
     }
   }
+  .active-task-label {
+    padding: 8px 15px;
+    display: inline-block;
+  }
+  .col-md-2.task-list-main-wrap {
+    padding-left: 0;
+  }
+  .upgrade-groups {
+    padding-left: 0;
+    .progress {
+      width: 85%;
+      display: inline-block;
+    }
+    .percent {
+      display: inline-block;
+      vertical-align: top;
+    }
+  }
   .task-list-main-wrap i {
     font-size: 16px;
+    color: #0088cc;
+    margin-right: 3px;
   }
   ul.failed-info-list {
     max-height: 500px;
     margin-top: 5px;
   }
-  .upgrade-options-link {
-    position: absolute;
-    cursor: pointer;
-    right: 10%;
-    top: 22px;
-    width: 100px;
-    a {
-      font-size: 13px;
-    }
-    .glyphicon-cogs {
-      color: #0088cc;
-      margin-right: 3px;
+  .pause-button {
+    margin-top: -5px;
+    padding-right: 0;
+    i {
+      padding-right: 4px;
+      font-size: 15px;
     }
   }
-  .upgrade-options-link.disabled {
-    cursor: not-allowed;
-    a, .glyphicon-cogs {
-      color: #808080;
-    }
-    a:hover {
-      text-decoration: none;
-    }
+  .button-row {
+    text-align: right;
+    padding: 5px;
+  }
+}
+
+.upgrade-options-link {
+  padding-left: 50px;
+  display: inline-block;
+  cursor: pointer;
+  width: 150px;
+  vertical-align: bottom;
+  a {
+    font-size: 14px;
+    font-weight: normal;
+  }
+  .icon-cogs {
+    font-size: 16px;
+    color: #0088cc;
+    margin-right: 3px;
+  }
+}
+.upgrade-options-link.disabled {
+  cursor: not-allowed;
+  a, .icon-cogs {
+    color: #808080;
+  }
+  a:hover {
+    text-decoration: none;
   }
 }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index cfbbb7a..7ab43b4 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -17,14 +17,11 @@
 }}
 
 <div id="stack-upgrade-dialog">
-  <div {{bindAttr class=":upgrade-options-link controller.isDowngrade:disabled"}} {{action openUpgradeOptions target="controller"}}>
-    <i class="icon-cogs"></i><a>{{t common.options}}</a>
-  </div>
 
   <div {{bindAttr class="view.isLoaded::hidden :row"}}>
-    <div class="col-md-3 task-list-main-wrap">{{statusIcon controller.requestStatus}}
+    <div class="col-md-2 task-list-main-wrap">{{statusIcon controller.requestStatus}}
       &nbsp;{{view.upgradeStatusLabel}}</div>
-    <div class="col-md-8">
+    <div class="col-md-7">
       {{view App.ProgressBarView
         progressBinding="view.overallProgress"
         statusBinding="controller.requestStatus"
@@ -33,73 +30,110 @@
     <div class="col-md-1">
       {{view.overallProgress}}%
     </div>
-  </div>
-
-  <div class="task-list scrollable-block task-list-main-wrap">
-    {{#if view.isLoaded}}
-      <div>
-        <div class="row">
-          {{#if showPauseButton}}
-            {{#if isDowngrade}}
-              <button
-                class="btn btn-default" {{action confirmPauseDowngrade target="view"}}>{{t admin.stackUpgrade.pauseDowngrade}}</button>
-            {{else}}
-              <button
-                class="btn btn-default" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.pauseUpgrade}}</button>
-            {{/if}}
-          {{/if}}
-        </div>
-        {{#if view.runningItem}}
-          <div class="panel panel-default details-box row">
-            <div class="row col-md-12">
-              <div class="pull-left col-md-6">{{t admin.stackUpgrade.dialog.inProgress}}&nbsp;{{view.runningItem.text}}</div>
-              {{#if view.isDetailsOpened}}
-                  <div class="pull-right col-md-6"><a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a></div>
-                {{#if view.runningItem.isTasksLoaded}}
-                  <div class="clear col-md-12">
-                    {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
-                  </div>
+    <div class="col-md-2 pause-button pull-right">
+        {{#if view.isLoaded}}
+            {{#if showPauseButton}}
+                {{#if isDowngrade}}
+                  <button
+                    class="btn btn-default pull-right" {{action confirmPauseDowngrade target="view"}}>{{t admin.stackUpgrade.pauseDowngrade}}</button>
                 {{else}}
-                  {{view App.SpinnerView classNames="clear"}}
+                  <button
+                    class="btn btn-default pull-right" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.pauseUpgrade}}</button>
                 {{/if}}
-              {{else}}
-              <div class="pull-right col-md-6"><a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.open}}</a></div>
-              {{/if}}
-            </div>
-          </div>
+            {{/if}}
         {{/if}}
-        {{#if view.failedItem}}
-          {{#unless view.isSlaveComponentFailuresItem}}
-            <div class="panel panel-default details-box row">
-              <div class="row col-md-12">
-                <div class="pull-left col-md-6">{{t admin.stackUpgrade.dialog.failed}}&nbsp;{{view.failedItem.text}}</div>
-                {{#if view.isDetailsOpened}}
-                <div class="pull-right col-md-6"><a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.hide}}</a></div>
-                  {{#if view.failedItem.isTasksLoaded}}
-                    <div class="clear col-md-12">
-                      {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
-                    </div>
-                  {{else}}
-                    {{view App.SpinnerView classNames="clear"}}
-                  {{/if}}
-                {{else}}
-                    <div class="pull-right col-md-6"><a href="#" class="pull-right" {{action toggleDetails target="view"}}>{{t admin.stackUpgrade.dialog.details.open}}</a></div>
-                {{/if}}
-              </div>
-              {{#if view.isHoldingState}}
-                <div class="button-row">
-                  {{#if view.isDowngradeAvailable}}
-                    <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.failedItem target="controller"}}>{{t common.downgrade}}</button>
-                  {{/if}}
-                  {{#if view.failedItem.skippable}}
-                    <button class="btn btn-warning" {{bindAttr disabled="controller.requestInProgress"}} {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button>
-                  {{/if}}
-                    <button class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
+    </div>
+  </div>
+
+  <div class="task-list scrollable-block task-list-main-wrap upgrade-groups">
+      {{#if view.isLoaded}}
+        <div class="panel-group">
+            {{#if view.runningItem}}
+              <div class="panel panel-default details-box row">
+                <div class="panel-heading row">
+                  <div class="pull-left col-md-6">
+                      {{t admin.stackUpgrade.dialog.inProgress}}&nbsp;{{view.runningItem.text}}
+                  </div>
+                    {{#if view.isDetailsOpened}}
+                      <div class="pull-right col-md-6">
+                        <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
+                           data-toggle="collapse">
+                            {{t admin.stackUpgrade.dialog.details.hide}}
+                        </a>
+                      </div>
+                    {{else}}
+                      <div class="pull-right col-md-6">
+                        <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
+                           data-toggle="collapse">
+                            {{t admin.stackUpgrade.dialog.details.open}}
+                        </a>
+                      </div>
+                    {{/if}}
                 </div>
-              {{/if}}
-            </div>
-          {{/unless}}
-        {{/if}}
+                <div id="collapseBox" class="panel-collapse collapse">
+                  <div class="panel-body">
+                      {{#if view.runningItem.isTasksLoaded}}
+                        <div class="clear col-md-12">
+                            {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
+                        </div>
+                      {{else}}
+                          {{view App.SpinnerView classNames="clear"}}
+                      {{/if}}
+                  </div>
+                </div>
+              </div>
+            {{/if}}
+            {{#if view.failedItem}}
+                {{#unless view.isSlaveComponentFailuresItem}}
+                  <div class="panel panel-default details-box row">
+                    <div class="panel-heading row">
+                      <div class="pull-left col-md-6">
+                          {{t admin.stackUpgrade.dialog.failed}}&nbsp;{{view.failedItem.text}}
+                      </div>
+                        {{#if view.isDetailsOpened}}
+                          <div class="pull-right col-md-6">
+                            <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
+                               data-toggle="collapse">
+                                {{t admin.stackUpgrade.dialog.details.hide}}
+                            </a>
+                          </div>
+                        {{else}}
+                          <div class="pull-right col-md-6">
+                            <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
+                               data-toggle="collapse">
+                                {{t admin.stackUpgrade.dialog.details.open}}
+                            </a>
+                          </div>
+                        {{/if}}
+                    </div>
+                    <div id="collapseBox" class="panel-collapse collapse">
+                      <div class="panel-body">
+                          {{#if view.failedItem.isTasksLoaded}}
+                            <div class="clear col-md-12">
+                                {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
+                            </div>
+                          {{else}}
+                              {{view App.SpinnerView classNames="clear"}}
+                          {{/if}}
+                      </div>
+                    </div>
+                      {{#if view.isHoldingState}}
+                        <div class="button-row">
+                            {{#if view.isDowngradeAvailable}}
+                              <button
+                                class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.failedItem target="controller"}}>{{t common.downgrade}}</button>
+                            {{/if}}
+                            {{#if view.failedItem.skippable}}
+                              <button
+                                class="btn btn-warning" {{bindAttr disabled="controller.requestInProgress"}} {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button>
+                            {{/if}}
+                          <button
+                            class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
+                        </div>
+                      {{/if}}
+                  </div>
+                {{/unless}}
+            {{/if}}
         {{#if view.plainManualItem}}
           <div class="panel panel-default details-box">
             <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
index 1a829fb..00cde9f 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_group.hbs
@@ -23,16 +23,16 @@
     <a href="#" {{action toggleExpanded view.content controller.upgradeData.upgradeGroups target="view"}}>{{view.content.title}}</a>
   </div>
   {{#if view.content.isRunning}}
-    <div class="col-md-3">
+    <div class="col-md-4 pull-right">
       {{view view.progressBarView
         progressBinding="view.content.progress"
         statusBinding="view.content.status"
         totalTasksBinding="view.content.total_task_count"
         completedTasksBinding="view.content.completed_task_count"
       }}
-    </div>
-    <div class="col-md-1">
-      <div>{{view.content.progress}}%</div>
+      <div class="percent pull-right">
+        <span>{{view.content.progress}}%</span>
+      </div>
     </div>
   {{/if}}
 </div>
@@ -48,14 +48,14 @@
           <a href="#" {{action toggleExpanded item view.content.upgradeItems target="view"}}>{{item.context}}</a>
         </div>
         {{#if item.isRunning}}
-          <div class="col-md-3">
+          <div class="col-md-4 pull-right">
             {{view App.ProgressBarView
               progressBinding="item.progress"
               statusBinding="item.status"
-            }}
-          </div>
-          <div class="col-md-1">
-            <div>{{item.progress}}%</div>
+              }}
+            <div class="percent pull-right">
+                <span>{{item.progress}}%</span>
+            </div
           </div>
         {{/if}}
       </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/ambari-web/app/views/common/helpers/status_icon_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/helpers/status_icon_view.js b/ambari-web/app/views/common/helpers/status_icon_view.js
index fbd8e3a..b807976 100644
--- a/ambari-web/app/views/common/helpers/status_icon_view.js
+++ b/ambari-web/app/views/common/helpers/status_icon_view.js
@@ -26,6 +26,7 @@ App.StatusIconView = Em.View.extend({
    * @type {object}
    */
   statusIconMap: {
+    'INIT': 'icon-cogs in_progress',
     'COMPLETED': 'glyphicon glyphicon-ok completed',
     'WARNING': 'glyphicon glyphicon-warning-sign',
     'FAILED': 'glyphicon glyphicon-exclamation-sign failed',

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/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 a5e7730..415d87d 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
@@ -250,6 +250,9 @@ App.upgradeWizardView = Em.View.extend({
       case 'HOLDING':
         labelKey = 'admin.stackUpgrade.state.paused';
         break;
+      default:
+        labelKey = 'admin.stackUpgrade.state.init';
+        break;
     }
     if (labelKey) {
       labelKey += (this.get('controller.isDowngrade')) ? '.downgrade' : "";

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/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 2f14e50..d0671f9 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
@@ -107,7 +107,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
       this.mock.returns(false);
       controller.set('upgradeData', null);
       controller.propertyDidChange('requestStatus');
-      expect(controller.get('requestStatus')).to.be.empty;
+      expect(controller.get('requestStatus')).to.equal('INIT');
     });
   });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/eead09be/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 8ad711e..a303e60 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
@@ -544,7 +544,7 @@ describe('App.upgradeWizardView', function () {
           status: '',
           isDowngrade: false
         },
-        result: ''
+        result: Em.I18n.t('admin.stackUpgrade.state.init')
       },
       {
         data: {


[40/50] [abbrv] ambari git commit: AMBARI-22026. Restart of all components on host operation failed with 500 status code. (mpapirkovskyy)

Posted by jl...@apache.org.
AMBARI-22026. Restart of all components on host operation failed with 500 status code. (mpapirkovskyy)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 0393451c43fe06b7cac72afebd2109d9298197a8
Parents: 999daef
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Mon Sep 25 19:08:49 2017 +0300
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Mon Sep 25 19:10:24 2017 +0300

----------------------------------------------------------------------
 .../AmbariCustomCommandExecutionHelper.java         | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0393451c/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 38a02ef..d0dd7e0 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
@@ -1524,14 +1524,18 @@ public class AmbariCustomCommandExecutionHelper {
     if (actionName.equals(START_COMMAND_NAME) || actionName.equals(RESTART_COMMAND_NAME)) {
       Cluster cluster = clusters.getCluster(clusterName);
       StackId stackId = null;
-      try {
-        Service service = cluster.getService(serviceName);
-        stackId = service.getDesiredStackId();
-      } catch (AmbariException e) {
-        LOG.debug("Could not load service {}, skipping topology check", serviceName);
-        stackId = cluster.getDesiredStackVersion();
+      if (serviceName != null) {
+        try {
+          Service service = cluster.getService(serviceName);
+          stackId = service.getDesiredStackId();
+        } catch (AmbariException e) {
+          LOG.debug("Could not load service {}, skipping topology check", serviceName);
+        }
       }
 
+      if (stackId == null) {
+        stackId = cluster.getDesiredStackVersion();
+      }
 
       AmbariMetaInfo ambariMetaInfo = managementController.getAmbariMetaInfo();
 


[14/50] [abbrv] ambari git commit: AMBARI-22024. Stack and versions view style issues (alexantonenko)

Posted by jl...@apache.org.
AMBARI-22024. Stack and versions view style issues (alexantonenko)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 2e170e4801794ddbbcd331585782a5f5b7e897a1
Parents: 37b8470
Author: Alex Antonenko <aa...@hortonworks.com>
Authored: Thu Sep 21 18:42:05 2017 +0300
Committer: Alex Antonenko <aa...@hortonworks.com>
Committed: Thu Sep 21 18:42:05 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/styles/stack_versions.less               |  1 +
 .../admin/stack_upgrade/upgrade_version_box_view.js     |  4 ++--
 .../stack_upgrade/upgrade_version_box_view_test.js      | 12 ++++++------
 3 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2e170e48/ambari-web/app/styles/stack_versions.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/stack_versions.less b/ambari-web/app/styles/stack_versions.less
index 9d05d9b..2e4faff 100644
--- a/ambari-web/app/styles/stack_versions.less
+++ b/ambari-web/app/styles/stack_versions.less
@@ -211,6 +211,7 @@
       }
       .dropdown-menu {
         cursor: pointer;
+        text-align: left;
       }
     }
     .installing {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e170e48/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 6cf84fa..b37a094 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
@@ -299,7 +299,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
 
           if (this.get('content.isPatch')) {
             element.get('buttons').pushObject({
-              text: Em.I18n.t('common.discard'),
+              text: Em.I18n.t('common.hide'),
               action: 'confirmDiscardRepoVersion',
               isDisabled: isDisabled
             });
@@ -329,7 +329,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
     element.set('isButtonGroup', true);
     element.set('isButton', false);
     element.get('buttons').pushObject({
-      text: Em.I18n.t('common.discard'),
+      text: Em.I18n.t('common.hide'),
       action: 'confirmDiscardRepoVersion',
       isDisabled: isDisabledOnInit
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/2e170e48/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 fbf72a2..174f51c 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
@@ -503,7 +503,7 @@ describe('App.UpgradeVersionBoxView', function () {
             {
               "action": "confirmDiscardRepoVersion",
               "isDisabled": false,
-              "text": "Discard"
+              "text": Em.I18n.t('common.hide')
             }
           ],
           isDisabled: true
@@ -532,7 +532,7 @@ describe('App.UpgradeVersionBoxView', function () {
             {
               "action": "confirmDiscardRepoVersion",
               "isDisabled": true,
-              "text": "Discard"
+              "text": Em.I18n.t('common.hide')
             }
           ],
           isDisabled: true
@@ -729,7 +729,7 @@ describe('App.UpgradeVersionBoxView', function () {
             {
               "action": "confirmDiscardRepoVersion",
               "isDisabled": true,
-              "text": "Discard"
+              "text": Em.I18n.t('common.hide')
             }
           ],
           isDisabled: true
@@ -1443,7 +1443,7 @@ describe('App.UpgradeVersionBoxView', function () {
             isDisabled: false
           },
           {
-            "text": Em.I18n.t('common.discard'),
+            "text": Em.I18n.t('common.hide'),
             "action": "confirmDiscardRepoVersion",
             "isDisabled": false
           }
@@ -1479,7 +1479,7 @@ describe('App.UpgradeVersionBoxView', function () {
       expect(JSON.stringify(element)).to.be.equal(JSON.stringify(Em.Object.create({
         "buttons": [
           {
-            "text": Em.I18n.t('common.discard'),
+            "text": Em.I18n.t('common.hide'),
             "action": "confirmDiscardRepoVersion",
             "isDisabled": false
           }
@@ -1507,7 +1507,7 @@ describe('App.UpgradeVersionBoxView', function () {
       expect(JSON.stringify(element)).to.be.equal(JSON.stringify(Em.Object.create({
         "buttons": [
           {
-            "text": Em.I18n.t('common.discard'),
+            "text": Em.I18n.t('common.hide'),
             "action": "confirmDiscardRepoVersion",
             "isDisabled": false
           }


[10/50] [abbrv] ambari git commit: AMBARI-22013. Add JMX enable/disable option to Infra Solr (oleewere)

Posted by jl...@apache.org.
AMBARI-22013. Add JMX enable/disable option to Infra Solr (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 1a5b4943cbfa42d66d61e5cb29a09e1d3ad9acb7
Parents: 5c0a354
Author: Oliver Szabo <ol...@gmail.com>
Authored: Thu Sep 21 00:59:26 2017 +0200
Committer: Oliver Szabo <ol...@gmail.com>
Committed: Thu Sep 21 12:27:13 2017 +0200

----------------------------------------------------------------------
 .../docker/test-config/solr/solr-env-ssl.sh     |  1 +
 .../docker/test-config/solr/solr-env.sh         |  1 +
 .../0.1.0/configuration/infra-solr-env.xml      | 12 +++++++-
 .../0.1.0/package/scripts/params.py             |  4 +++
 .../0.1.0/properties/infra-solr-env.sh.j2       |  3 +-
 .../configs/services/ambari_infra_properties.js | 31 ++++++++++++--------
 6 files changed, 38 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-logsearch/docker/test-config/solr/solr-env-ssl.sh
----------------------------------------------------------------------
diff --git a/ambari-logsearch/docker/test-config/solr/solr-env-ssl.sh b/ambari-logsearch/docker/test-config/solr/solr-env-ssl.sh
index faaa6ff..6c78da0 100644
--- a/ambari-logsearch/docker/test-config/solr/solr-env-ssl.sh
+++ b/ambari-logsearch/docker/test-config/solr/solr-env-ssl.sh
@@ -71,6 +71,7 @@ RMI_PORT=18886
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true"
+SOLR_OPTS="$SOLR_OPTS -Djava.rmi.server.hostname=localhost"
 
 # Location where the bin/solr script will save PID files for running instances
 # If not set, the script will create PID files in $SOLR_TIP/bin

http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-logsearch/docker/test-config/solr/solr-env.sh
----------------------------------------------------------------------
diff --git a/ambari-logsearch/docker/test-config/solr/solr-env.sh b/ambari-logsearch/docker/test-config/solr/solr-env.sh
index 11b9fe0..89e3a4d 100644
--- a/ambari-logsearch/docker/test-config/solr/solr-env.sh
+++ b/ambari-logsearch/docker/test-config/solr/solr-env.sh
@@ -71,6 +71,7 @@ RMI_PORT=18886
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true"
+SOLR_OPTS="$SOLR_OPTS -Djava.rmi.server.hostname=localhost"
 
 # Location where the bin/solr script will save PID files for running instances
 # If not set, the script will create PID files in $SOLR_TIP/bin

http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/configuration/infra-solr-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/configuration/infra-solr-env.xml b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/configuration/infra-solr-env.xml
index 52a5e6a..2a76334 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/configuration/infra-solr-env.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/configuration/infra-solr-env.xml
@@ -176,7 +176,17 @@
     </value-attributes>
     <on-ambari-upgrade add="false"/>
   </property>
-
+  <property>
+    <name>infra_solr_jmx_enabled</name>
+    <value>false</value>
+    <display-name>Enable JMX</display-name>
+    <description>Set to true to activate the JMX RMI connector to allow remote JMX client applications to monitor the JVM hosting Solr
+    </description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
   <property>
     <name>infra_solr_kerberos_keytab</name>
     <value>/etc/security/keytabs/infra_solr.service.keytab</value>

http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/package/scripts/params.py
index e4ea885..eba1db9 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/package/scripts/params.py
@@ -49,6 +49,8 @@ stack_version = default("/commandParams/version", None)
 sudo = AMBARI_SUDO_BINARY
 security_enabled = status_params.security_enabled
 
+hostname = config['hostname'].lower()
+
 infra_solr_conf = "/etc/ambari-infra-solr/conf"
 
 infra_solr_port = status_params.infra_solr_port
@@ -145,6 +147,8 @@ if security_enabled:
 infra_solr_ranger_audit_service_users = format(config['configurations']['infra-solr-security-json']['infra_solr_ranger_audit_service_users']).split(',')
 infra_solr_security_json_content = config['configurations']['infra-solr-security-json']['content']
 
+infra_solr_jmx_enabled = str(default('/configurations/infra-solr-env/infra_solr_jmx_enabled', False)).lower()
+
 #Solr log4j
 infra_log_maxfilesize = default('configurations/infra-solr-log4j/infra_log_maxfilesize',10)
 infra_log_maxbackupindex = default('configurations/infra-solr-log4j/infra_log_maxbackupindex',9)

http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/infra-solr-env.sh.j2
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/infra-solr-env.sh.j2 b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/infra-solr-env.sh.j2
index 5cc344e..ea56561 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/infra-solr-env.sh.j2
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA/0.1.0/properties/infra-solr-env.sh.j2
@@ -60,7 +60,7 @@ ZK_CLIENT_TIMEOUT="60000"
 # Set to true to activate the JMX RMI connector to allow remote JMX client applications
 # to monitor the JVM hosting Solr; set to "false" to disable that behavior
 # (false is recommended in production environments)
-ENABLE_REMOTE_JMX_OPTS="true"
+ENABLE_REMOTE_JMX_OPTS="{{infra_solr_jmx_enabled}}"
 
 # The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
 RMI_PORT={{infra_solr_jmx_port}}
@@ -71,6 +71,7 @@ RMI_PORT={{infra_solr_jmx_port}}
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000"
 #SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true"
+SOLR_OPTS="$SOLR_OPTS -Djava.rmi.server.hostname={{hostname}}"
 
 # Location where the bin/solr script will save PID files for running instances
 # If not set, the script will create PID files in $SOLR_TIP/bin

http://git-wip-us.apache.org/repos/asf/ambari/blob/1a5b4943/ambari-web/app/data/configs/services/ambari_infra_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/ambari_infra_properties.js b/ambari-web/app/data/configs/services/ambari_infra_properties.js
index aae7fa5..ab9471f 100644
--- a/ambari-web/app/data/configs/services/ambari_infra_properties.js
+++ b/ambari-web/app/data/configs/services/ambari_infra_properties.js
@@ -77,90 +77,97 @@ module.exports = [
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 5,
-    "name": "infra_solr_ssl_enabled",
+    "name": "infra_solr_jmx_enabled",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 6,
-    "name": "infra_solr_truststore_location",
+    "name": "infra_solr_ssl_enabled",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 7,
-    "name": "infra_solr_truststore_type",
+    "name": "infra_solr_truststore_location",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 8,
-    "name": "infra_solr_truststore_password",
+    "name": "infra_solr_truststore_type",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 9,
-    "name": "infra_solr_keystore_location",
+    "name": "infra_solr_truststore_password",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 10,
-    "name": "infra_solr_keystore_type",
+    "name": "infra_solr_keystore_location",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 11,
-    "name": "infra_solr_keystore_password",
+    "name": "infra_solr_keystore_type",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 12,
-    "name": "infra_solr_kerberos_keytab",
+    "name": "infra_solr_keystore_password",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 13,
-    "name": "infra_solr_kerberos_principal",
+    "name": "infra_solr_kerberos_keytab",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 14,
-    "name": "infra_solr_web_kerberos_keytab",
+    "name": "infra_solr_kerberos_principal",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 15,
-    "name": "infra_solr_web_kerberos_principal",
+    "name": "infra_solr_web_kerberos_keytab",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 16,
-    "name": "infra_solr_kerberos_name_rules",
+    "name": "infra_solr_web_kerberos_principal",
     "serviceName": "AMBARI_INFRA"
   },
   {
     "category": "Advanced infra-solr-env",
     "filename": "infra-solr-env.xml",
     "index": 17,
+    "name": "infra_solr_kerberos_name_rules",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 18,
     "name": "content",
     "serviceName": "AMBARI_INFRA"
   },


[42/50] [abbrv] ambari git commit: AMBARI-22051 - VDFs Which Are Correct Never Get Resolved (jonathanhurley)

Posted by jl...@apache.org.
AMBARI-22051 -  VDFs Which Are Correct Never Get Resolved (jonathanhurley)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 08da9611188d9c4c246ee6d77894da5edf317860
Parents: 4b59ba8
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Sep 25 10:11:52 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Sep 25 12:36:44 2017 -0400

----------------------------------------------------------------------
 .../DistributeRepositoriesActionListener.java   |  7 ++++
 .../listeners/upgrade/StackVersionListener.java |  7 ++++
 .../upgrade/StackVersionListenerTest.java       | 41 ++++++++++++++++++++
 3 files changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/08da9611/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
index 376e20d..1944761 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
@@ -127,6 +127,13 @@ public class DistributeRepositoriesActionListener {
             repoVersion.setResolved(true);
             repoVersionDAO.merge(repoVersion);
             repositoryVersion = actualVersion;
+          } else {
+            // the reported versions are the same - we should ensure that the
+            // repo is resolved
+            if (!repoVersion.isResolved()) {
+              repoVersion.setResolved(true);
+              repoVersionDAO.merge(repoVersion);
+            }
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/08da9611/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 0ce64bf..e5298dc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -101,6 +101,13 @@ public class StackVersionListener {
           rve.setVersion(newVersion);
           rve.setResolved(true);
           repositoryVersionDAO.merge(rve);
+        } else {
+          // the reported versions are the same - we should ensure that the repo
+          // is resolved
+          if (!rve.isResolved()) {
+            rve.setResolved(true);
+            repositoryVersionDAO.merge(rve);
+          }
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/08da9611/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
index 68d9c56..5e12cdf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java
@@ -330,6 +330,47 @@ public class StackVersionListenerTest extends EasyMockSupport {
   }
 
   /**
+   * Tests that if a component advertises a version and the repository already
+   * matches, that we ensure that it is marked as resolved.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testRepositoryResolvedWhenVersionsMatch() throws Exception {
+    String version = "2.4.0.0";
+
+    expect(sch.getVersion()).andReturn(version);
+    expect(componentInfo.isVersionAdvertised()).andReturn(true).once();
+
+    RepositoryVersionDAO dao = createNiceMock(RepositoryVersionDAO.class);
+    RepositoryVersionEntity entity = createNiceMock(RepositoryVersionEntity.class);
+    expect(entity.getVersion()).andReturn(version).once();
+    expect(entity.isResolved()).andReturn(false).once();
+
+    // when the version gets reported back, we set this repo to resolved
+    entity.setResolved(true);
+    expectLastCall().once();
+
+    expect(dao.findByPK(1L)).andReturn(entity).once();
+    expect(dao.merge(entity)).andReturn(entity).once();
+
+    replayAll();
+
+    String newVersion = version;
+
+    HostComponentVersionAdvertisedEvent event = new HostComponentVersionAdvertisedEvent(cluster, sch, newVersion, 1L);
+    
+    // !!! avoid injector for test class
+    Field field = StackVersionListener.class.getDeclaredField("repositoryVersionDAO");
+    field.setAccessible(true);
+    field.set(listener, dao);
+
+    listener.onAmbariEvent(event);
+
+    verifyAll();
+  }
+
+  /**
    * Tests that the {@link RepositoryVersionEntity} is not updated if there is
    * an upgrade, even if the repo ID is passed back and the versions don't
    * match.


[36/50] [abbrv] ambari git commit: AMBARI-22042 Final Properties filter does not work for Config Groups. (atkach)

Posted by jl...@apache.org.
AMBARI-22042 Final Properties filter does not work for Config Groups. (atkach)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: eb5bcef3d4382ae059e572c45c799969c6cb7dde
Parents: 06d21bb
Author: Andrii Tkach <at...@apache.org>
Authored: Mon Sep 25 13:50:49 2017 +0300
Committer: Andrii Tkach <at...@apache.org>
Committed: Mon Sep 25 13:57:17 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/views/common/configs/service_config_view.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/eb5bcef3/ambari-web/app/views/common/configs/service_config_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/service_config_view.js b/ambari-web/app/views/common/configs/service_config_view.js
index a53f6cd..fe45c79 100644
--- a/ambari-web/app/views/common/configs/service_config_view.js
+++ b/ambari-web/app/views/common/configs/service_config_view.js
@@ -272,7 +272,8 @@ App.ServiceConfigView = Em.View.extend({
         var passesFilters = true;
 
         selectedFilters.forEach(function (filter) {
-          if (config.get(filter.attributeName) !== filter.attributeValue) {
+          if (config.get(filter.attributeName) !== filter.attributeValue &&
+            !(config.get('overrides') && config.get('overrides').someProperty(filter.attributeName, filter.attributeValue))) {
             passesFilters = false;
           }
         });


[46/50] [abbrv] ambari git commit: AMBARI-22012. BP deploys failing intermittently with error (magyari_sandor)

Posted by jl...@apache.org.
AMBARI-22012. BP deploys failing intermittently with error  (magyari_sandor)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: b653ee0a5967a8255f087f43a1cb6a878e765833
Parents: 6633a7b
Author: Sandor Magyari <sm...@hortonworks.com>
Authored: Fri Sep 22 17:48:54 2017 +0200
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Mon Sep 25 21:19:53 2017 +0200

----------------------------------------------------------------------
 .../events/ClusterConfigFinishedEvent.java      | 15 +++-
 .../ambari/server/topology/TopologyManager.java | 88 +++++++++++++-------
 .../topology/tasks/ConfigureClusterTask.java    | 13 ++-
 .../tasks/ConfigureClusterTaskFactory.java      |  3 +-
 .../server/utils/ManagedThreadPoolExecutor.java | 83 ++++++++++++++++++
 .../ClusterDeployWithStartOnlyTest.java         |  2 +-
 ...InstallWithoutStartOnComponentLevelTest.java |  2 +-
 .../ClusterInstallWithoutStartTest.java         |  2 +-
 .../topology/ConfigureClusterTaskTest.java      | 18 +++-
 .../utils/ManagedThreadPoolExecutorTest.java    | 51 ++++++++++++
 10 files changed, 236 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
index cdb86ac..f0574d0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
@@ -23,17 +23,27 @@ package org.apache.ambari.server.events;
  * cluster configuration is successfully updated.
  */
 public class ClusterConfigFinishedEvent extends AmbariEvent {
+
+  private final long clusterId;
   private final String clusterName;
 
 
-  public ClusterConfigFinishedEvent(String clusterName) {
+  public ClusterConfigFinishedEvent(long clusterId, String clusterName) {
     super(AmbariEventType.CLUSTER_CONFIG_FINISHED);
+    this.clusterId = clusterId;
     this.clusterName = clusterName;
   }
 
   /**
+   * Get the cluster id
+   * @return
+   */
+  public long getClusterId() {
+    return clusterId;
+  }
+
+  /**
    * Get the cluster name
-   *
    * @return
    */
   public String getClusterName() {
@@ -46,6 +56,7 @@ public class ClusterConfigFinishedEvent extends AmbariEvent {
   @Override
   public String toString() {
     StringBuilder buffer = new StringBuilder("ClusterConfigChangedEvent{");
+    buffer.append("clusterId=").append(getClusterId());
     buffer.append("clusterName=").append(getClusterName());
     buffer.append("}");
     return buffer.toString();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
index 3af62e8..9769fae 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
@@ -29,9 +29,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
-import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
@@ -73,6 +74,7 @@ import org.apache.ambari.server.state.quicklinksprofile.QuickLinksProfile;
 import org.apache.ambari.server.topology.tasks.ConfigureClusterTask;
 import org.apache.ambari.server.topology.tasks.ConfigureClusterTaskFactory;
 import org.apache.ambari.server.topology.validators.TopologyValidatorService;
+import org.apache.ambari.server.utils.ManagedThreadPoolExecutor;
 import org.apache.ambari.server.utils.RetryHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -102,9 +104,23 @@ public class TopologyManager {
   private static final String CLUSTER_CONFIG_TASK_MAX_TIME_IN_MILLIS_PROPERTY_NAME = "cluster_configure_task_timeout";
 
   private PersistedState persistedState;
+
+  /**
+   * Single threaded executor to execute async tasks. At the moment it's only used to execute ConfigureClusterTask.
+   */
   private final ExecutorService executor = Executors.newSingleThreadExecutor();
-  private final Executor taskExecutor; // executes TopologyTasks
-  private final boolean parallelTaskCreationEnabled;
+
+  /**
+   * Thread pool size for topology task executors.
+   */
+  private int topologyTaskExecutorThreadPoolSize;
+  /**
+   * There is one ExecutorService for each cluster to execute TopologyTasks.
+   * TopologyTasks are submitted into ExecutorService for each cluster,
+   * however the ExecutorService is started only after cluster configuration is finished.
+   */
+  private final Map<Long, ManagedThreadPoolExecutor> topologyTaskExecutorServiceMap = new HashMap<>();
+
   private Collection<String> hostsToIgnore = new HashSet<>();
   private final List<HostImpl> availableHosts = new LinkedList<>();
   private final Map<String, LogicalRequest> reservedHosts = new HashMap<>();
@@ -158,17 +174,15 @@ public class TopologyManager {
   private Map<Long, Boolean> clusterProvisionWithBlueprintCreationFinished = new HashMap<>();
 
   public TopologyManager() {
-    parallelTaskCreationEnabled = false;
-    taskExecutor = executor;
+    topologyTaskExecutorThreadPoolSize = 1;
   }
 
   @Inject
   public TopologyManager(Configuration configuration) {
-    int threadPoolSize = configuration.getParallelTopologyTaskCreationThreadPoolSize();
-    parallelTaskCreationEnabled = configuration.isParallelTopologyTaskCreationEnabled() && threadPoolSize > 1;
-    taskExecutor = parallelTaskCreationEnabled
-      ? Executors.newFixedThreadPool(threadPoolSize)
-      : executor;
+    topologyTaskExecutorThreadPoolSize = configuration.getParallelTopologyTaskCreationThreadPoolSize();
+    if (!configuration.isParallelTopologyTaskCreationEnabled()) {
+      topologyTaskExecutorThreadPoolSize = 1;
+    }
   }
 
   // executed by the IoC framework after creating the object (guice)
@@ -310,6 +324,10 @@ public class TopologyManager {
     // set provision action requested
     topology.setProvisionAction(request.getProvisionAction());
 
+
+    // create task executor for TopologyTasks
+    getOrCreateTopologyTaskExecutor(clusterId);
+
     // persist request
     LogicalRequest logicalRequest = RetryHelper.executeWithRetry(new Callable<LogicalRequest>() {
         @Override
@@ -325,15 +343,6 @@ public class TopologyManager {
     addClusterConfigRequest(topology, new ClusterConfigurationRequest(ambariContext, topology, true,
       stackAdvisorBlueprintProcessor, securityType == SecurityType.KERBEROS));
 
-    // Notify listeners that cluster configuration finished
-    executor.submit(new Callable<Boolean>() {
-      @Override
-      public Boolean call() throws Exception {
-        ambariEventPublisher.publish(new ClusterConfigFinishedEvent(clusterName));
-        return Boolean.TRUE;
-      }
-    });
-
     // Process the logical request
     processRequest(request, topology, logicalRequest);
 
@@ -345,6 +354,17 @@ public class TopologyManager {
     return getRequestStatus(logicalRequest.getRequestId());
   }
 
+  @Subscribe
+  public void onClusterConfigFinishedEvent(ClusterConfigFinishedEvent event) {
+    ManagedThreadPoolExecutor taskExecutor = topologyTaskExecutorServiceMap.get(event.getClusterId());
+    if (taskExecutor == null) {
+      LOG.error("Can't find executor service taskQueue not found for cluster: {} ", event.getClusterName());
+    } else {
+      LOG.info("Starting topology task ExecutorService for cluster: {}", event.getClusterName());
+      taskExecutor.start();
+    }
+  }
+
 
   /**
    * Saves the quick links profile to the DB as an Ambari setting. Creates a new setting entity or updates the existing
@@ -941,16 +961,8 @@ public class TopologyManager {
     }
 
     LOG.info("TopologyManager.processAcceptedHostOffer: queue tasks for host = {} which responded {}", hostName, response.getAnswer());
-    if (parallelTaskCreationEnabled) {
-      executor.execute(new Runnable() { // do not start until cluster config done
-        @Override
-        public void run() {
-          queueHostTasks(topology, response, hostName);
-        }
-      });
-    } else {
-      queueHostTasks(topology, response, hostName);
-    }
+    queueHostTasks(topology, response, hostName);
+
   }
 
   @Transactional
@@ -959,9 +971,23 @@ public class TopologyManager {
     persistedState.registerInTopologyHostInfo(host);
   }
 
+  private ExecutorService getOrCreateTopologyTaskExecutor(Long clusterId) {
+    ManagedThreadPoolExecutor topologyTaskExecutor = this.topologyTaskExecutorServiceMap.get(clusterId);
+    if (topologyTaskExecutor == null) {
+      LOG.info("Creating TopologyTaskExecutorService for clusterId: {}", clusterId);
+
+      topologyTaskExecutor = new ManagedThreadPoolExecutor(topologyTaskExecutorThreadPoolSize,
+              topologyTaskExecutorThreadPoolSize, 0L, TimeUnit.MILLISECONDS,
+              new LinkedBlockingQueue<Runnable>());
+      topologyTaskExecutorServiceMap.put(clusterId, topologyTaskExecutor);
+    }
+    return topologyTaskExecutor;
+  }
+
   private void queueHostTasks(ClusterTopology topology, HostOfferResponse response, String hostName) {
     LOG.info("TopologyManager.processAcceptedHostOffer: queueing tasks for host = {}", hostName);
-    response.executeTasks(taskExecutor, hostName, topology, ambariContext);
+    ExecutorService executorService = getOrCreateTopologyTaskExecutor(topology.getClusterId());
+    response.executeTasks(executorService, hostName, topology, ambariContext);
   }
 
   private void updateHostWithRackInfo(ClusterTopology topology, HostOfferResponse response, HostImpl host) {
@@ -1108,7 +1134,7 @@ public class TopologyManager {
     }
 
     ConfigureClusterTask configureClusterTask = configureClusterTaskFactory.createConfigureClusterTask(topology,
-      configurationRequest);
+      configurationRequest, ambariEventPublisher);
 
     AsyncCallableService<Boolean> asyncCallableService = new AsyncCallableService<>(configureClusterTask, timeout, delay,
         Executors.newScheduledThreadPool(1));

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTask.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTask.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTask.java
index 0ce5982..60eaa59 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTask.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTask.java
@@ -22,6 +22,8 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import org.apache.ambari.server.events.ClusterConfigFinishedEvent;
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.security.authorization.internal.RunWithInternalSecurityContext;
 import org.apache.ambari.server.topology.ClusterConfigurationRequest;
 import org.apache.ambari.server.topology.ClusterTopology;
@@ -39,11 +41,14 @@ public class ConfigureClusterTask implements Callable<Boolean> {
 
   private ClusterConfigurationRequest configRequest;
   private ClusterTopology topology;
+  private AmbariEventPublisher ambariEventPublisher;
 
   @AssistedInject
-  public ConfigureClusterTask(@Assisted ClusterTopology topology, @Assisted ClusterConfigurationRequest configRequest) {
+  public ConfigureClusterTask(@Assisted ClusterTopology topology, @Assisted ClusterConfigurationRequest configRequest,
+                              @Assisted AmbariEventPublisher ambariEventPublisher) {
     this.configRequest = configRequest;
     this.topology = topology;
+    this.ambariEventPublisher = ambariEventPublisher;
   }
 
   @Override
@@ -72,6 +77,12 @@ public class ConfigureClusterTask implements Callable<Boolean> {
       throw new Exception(e);
     }
 
+    LOG.info("Cluster configuration finished successfully!");
+    // Notify listeners that cluster configuration finished
+    long clusterId = topology.getClusterId();
+    ambariEventPublisher.publish(new ClusterConfigFinishedEvent(clusterId,
+            topology.getAmbariContext().getClusterName(clusterId)));
+
     LOG.info("TopologyManager.ConfigureClusterTask: Exiting");
     return true;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTaskFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTaskFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTaskFactory.java
index 9e3c151..558af30 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTaskFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/ConfigureClusterTaskFactory.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.topology.tasks;
 
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.topology.ClusterConfigurationRequest;
 import org.apache.ambari.server.topology.ClusterTopology;
 
@@ -25,6 +26,6 @@ import org.apache.ambari.server.topology.ClusterTopology;
 public interface ConfigureClusterTaskFactory {
 
    ConfigureClusterTask createConfigureClusterTask(ClusterTopology topology, ClusterConfigurationRequest
-    configRequest);
+    configRequest, AmbariEventPublisher ambariEventPublisher);
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/main/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutor.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutor.java
new file mode 100644
index 0000000..167c9cb
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutor.java
@@ -0,0 +1,83 @@
+/*
+ * 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 distribut
+ * ed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.utils;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * ThreadPoolExecutor extension which is stopped by default and can be started & stopped.
+ */
+public class ManagedThreadPoolExecutor extends ThreadPoolExecutor {
+
+  private volatile boolean isStopped;
+  private final ReentrantLock pauseLock = new ReentrantLock();
+  private final Condition unpaused = pauseLock.newCondition();
+
+  public ManagedThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
+                            long keepAliveTime, TimeUnit unit,
+                            BlockingQueue<Runnable> workQueue) {
+    super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
+            Executors.defaultThreadFactory());
+    isStopped = true;
+  }
+
+  protected void beforeExecute(Thread t, Runnable r) {
+    super.beforeExecute(t, r);
+    pauseLock.lock();
+    try {
+      while (isStopped) {
+        unpaused.await();
+      }
+    } catch (InterruptedException ie) {
+      t.interrupt();
+    } finally {
+      pauseLock.unlock();
+    }
+  }
+
+  public void start() {
+    pauseLock.lock();
+    try {
+      isStopped = false;
+      unpaused.signalAll();
+    } finally {
+      pauseLock.unlock();
+    }
+  }
+
+  public void stop() {
+    pauseLock.lock();
+    try {
+      isStopped = true;
+    } finally {
+      pauseLock.unlock();
+    }
+  }
+
+  public boolean isRunning() {
+    return !isStopped;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
index c3248a3..0daa20f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
@@ -391,7 +391,7 @@ public class ClusterDeployWithStartOnlyTest extends EasyMockSupport {
     ambariContext.persistInstallStateForUI(CLUSTER_NAME, STACK_NAME, STACK_VERSION);
     expectLastCall().once();
 
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(1);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.emptyMap()).once();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
index 372d0a1..bbf4fdb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
@@ -368,7 +368,7 @@ public class ClusterInstallWithoutStartOnComponentLevelTest extends EasyMockSupp
     ambariContext.persistInstallStateForUI(CLUSTER_NAME, STACK_NAME, STACK_VERSION);
     expectLastCall().once();
 
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(1);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.emptyMap()).once();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
index 9620507..059a8be 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
@@ -363,7 +363,7 @@ public class ClusterInstallWithoutStartTest extends EasyMockSupport {
     ambariContext.persistInstallStateForUI(CLUSTER_NAME, STACK_NAME, STACK_VERSION);
     expectLastCall().once();
 
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(1);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.emptyMap()).once();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigureClusterTaskTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigureClusterTaskTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigureClusterTaskTest.java
index feefcab..b2dac8f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigureClusterTaskTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigureClusterTaskTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.topology;
 
+import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.reset;
@@ -30,6 +31,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Executors;
 
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.topology.tasks.ConfigureClusterTask;
 import org.easymock.EasyMockRule;
 import org.easymock.Mock;
@@ -60,12 +62,18 @@ public class ConfigureClusterTaskTest {
   @Mock(type = MockType.STRICT)
   private ClusterTopology clusterTopology;
 
+  @Mock(type = MockType.STRICT)
+  private AmbariContext ambariContext;
+
+  @Mock(type = MockType.NICE)
+  private AmbariEventPublisher ambariEventPublisher;
+
   private ConfigureClusterTask testSubject;
 
   @Before
   public void before() {
-    reset(clusterConfigurationRequest, clusterTopology);
-    testSubject = new ConfigureClusterTask(clusterTopology, clusterConfigurationRequest);
+    reset(clusterConfigurationRequest, clusterTopology, ambariContext, ambariEventPublisher);
+    testSubject = new ConfigureClusterTask(clusterTopology, clusterConfigurationRequest, ambariEventPublisher);
   }
 
   @Test
@@ -75,11 +83,15 @@ public class ConfigureClusterTaskTest {
     // is it OK to handle the non existence of hostgroups as a success?!
     expect(clusterConfigurationRequest.getRequiredHostGroups()).andReturn(Collections.emptyList());
     expect(clusterTopology.getHostGroupInfo()).andReturn(Collections.emptyMap());
+    expect(clusterTopology.getClusterId()).andReturn(1L).anyTimes();
+    expect(clusterTopology.getAmbariContext()).andReturn(ambariContext);
+    expect(ambariContext.getClusterName(1L)).andReturn("testCluster");
 
     // this is only called if the "prerequisites" are satisfied
     clusterConfigurationRequest.process();
+    ambariEventPublisher.publish(anyObject());
 
-    replay(clusterConfigurationRequest, clusterTopology);
+    replay(clusterConfigurationRequest, clusterTopology, ambariContext, ambariEventPublisher);
 
     // WHEN
     Boolean result = testSubject.call();

http://git-wip-us.apache.org/repos/asf/ambari/blob/b653ee0a/ambari-server/src/test/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutorTest.java
new file mode 100644
index 0000000..e94b25c
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/utils/ManagedThreadPoolExecutorTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.utils;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class ManagedThreadPoolExecutorTest {
+
+  @Test
+  public void testGetHostAndPortFromProperty() {
+
+    ManagedThreadPoolExecutor  topologyTaskExecutor = new ManagedThreadPoolExecutor(1,
+            1, 0L, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<Runnable>());
+    Future<Boolean> feature = topologyTaskExecutor.submit(new Callable<Boolean>() {
+      @Override
+      public Boolean call() {
+        return Boolean.TRUE;
+      }
+    });
+
+    Assert.assertTrue(!topologyTaskExecutor.isRunning());
+    topologyTaskExecutor.start();
+    Assert.assertTrue(topologyTaskExecutor.isRunning());
+    topologyTaskExecutor.stop();
+    Assert.assertTrue(!topologyTaskExecutor.isRunning());
+
+  }
+}


[07/50] [abbrv] ambari git commit: AMBARI-21966. "Next" button on "Assign Masters" page gets disabled when installing Ambari. Patch 2. (akovalenko)

Posted by jl...@apache.org.
AMBARI-21966. "Next" button on "Assign Masters" page gets disabled when installing Ambari. Patch 2.	 (akovalenko)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 73bd428de74c3a97fbcdc53e160a1d6346528ba2
Parents: 0f1099b
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Wed Sep 20 17:26:03 2017 +0300
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Wed Sep 20 18:06:03 2017 +0300

----------------------------------------------------------------------
 .../wizard/step7/assign_master_controller.js    |  5 ++++-
 .../step7/assign_master_controller_test.js      | 23 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/73bd428d/ambari-web/app/controllers/wizard/step7/assign_master_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7/assign_master_controller.js b/ambari-web/app/controllers/wizard/step7/assign_master_controller.js
index e8eaf47..a44aff4 100644
--- a/ambari-web/app/controllers/wizard/step7/assign_master_controller.js
+++ b/ambari-web/app/controllers/wizard/step7/assign_master_controller.js
@@ -297,8 +297,9 @@ App.AssignMasterOnStep7Controller = Em.Controller.extend(App.BlueprintMixin, App
   renderHostInfo: function () {
     var parentController = this.get('content.controllerName');
     if (parentController) {
-      this._super();
+      return this._super();
     } else {
+      var dfd = $.Deferred();
       var hosts = App.Host.find().toArray();
       var result = [];
       for (var p = 0; p < hosts.length; p++) {
@@ -315,6 +316,8 @@ App.AssignMasterOnStep7Controller = Em.Controller.extend(App.BlueprintMixin, App
       this.set("hosts", result);
       this.sortHosts(result);
       this.set('isHostsLoaded', true);
+      dfd.resolve();
+      return dfd.promise();
     }
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/73bd428d/ambari-web/test/controllers/wizard/step7/assign_master_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step7/assign_master_controller_test.js b/ambari-web/test/controllers/wizard/step7/assign_master_controller_test.js
index fd7637e..79dad59 100644
--- a/ambari-web/test/controllers/wizard/step7/assign_master_controller_test.js
+++ b/ambari-web/test/controllers/wizard/step7/assign_master_controller_test.js
@@ -250,6 +250,7 @@ describe('App.AssignMasterOnStep7Controller', function () {
         })
       ]);
       sinon.stub(view, 'sortHosts');
+      sinon.stub(view, 'getHosts').returns([]);
       sinon.stub(numberUtils, 'bytesToSize').returns(1);
     });
 
@@ -281,6 +282,28 @@ describe('App.AssignMasterOnStep7Controller', function () {
         host_info: Em.I18n.t('installer.step5.hostInfo').fmt('host1', 1, 1)
       })])).to.be.true;
     });
+
+    it("should make general request to get hosts", function() {
+      view.reopen({
+        content: Em.Object.create({
+          controllerName: 'name'
+        })
+      });
+      view.renderHostInfo();
+      var args = testHelpers.findAjaxRequest('name', 'hosts.high_availability.wizard');
+      expect(args).exists;
+    });
+
+    it("should make request for installer to get hosts", function() {
+      view.reopen({
+        content: Em.Object.create({
+          controllerName: 'installerController'
+        })
+      });
+      view.renderHostInfo();
+      var args = testHelpers.findAjaxRequest('name', 'hosts.info.install');
+      expect(args).exists;
+    });
   });
 
   describe("#loadMasterComponentHosts()", function () {


[41/50] [abbrv] ambari git commit: AMBARI-22029. Download Client Configs fails. (mpapirkovskyy)

Posted by jl...@apache.org.
AMBARI-22029. Download Client Configs fails. (mpapirkovskyy)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 4b59ba8203abf46d2c5bfa766bbf968ab964cff4
Parents: 0393451
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Mon Sep 25 19:09:44 2017 +0300
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Mon Sep 25 19:10:33 2017 +0300

----------------------------------------------------------------------
 .../server/controller/internal/ClientConfigResourceProvider.java   | 2 ++
 .../OOZIE/4.0.0.2.0/package/scripts/params_linux.py                | 2 ++
 2 files changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4b59ba82/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index 166fc5f..9f4a4a0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -445,6 +445,8 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
         jsonContent.put("hostname", hostName);
         jsonContent.put("public_hostname", publicHostName);
         jsonContent.put("clusterName", cluster.getClusterName());
+        jsonContent.put("serviceName", serviceName);
+        jsonContent.put("role", componentName);
         jsonConfigurations = gson.toJson(jsonContent);
 
         File tmpDirectory = new File(TMP_PATH);

http://git-wip-us.apache.org/repos/asf/ambari/blob/4b59ba82/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
index e856c01..b66e157 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
@@ -57,6 +57,8 @@ architecture = get_architecture()
 
 # Needed since this writes out the Atlas Hive Hook config file.
 cluster_name = config['clusterName']
+serviceName = config['serviceName']
+role = config['role']
 
 hostname = config["hostname"]
 


[22/50] [abbrv] ambari git commit: AMBARI-22030. OOZIE/OOZIE_SERVER restart failed saying AttributeError: 'NoneType' object has no attribute 'upper' during EU [accidental commit] (ncole)

Posted by jl...@apache.org.
AMBARI-22030. OOZIE/OOZIE_SERVER restart failed saying AttributeError: 'NoneType' object has no attribute 'upper' during EU [accidental commit] (ncole)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 5d5f9749e82bf815a1c8f82f090b769421d39949
Parents: 7c687bb
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Sep 21 18:07:57 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Sep 21 18:07:57 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/copy_tarball.py.rej     | 78 --------------------
 1 file changed, 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5d5f9749/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
deleted file mode 100644
index b2c11fc..0000000
--- a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
+++ /dev/null
@@ -1,78 +0,0 @@
-diff a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py	(rejected hunks)
-@@ -41,26 +41,65 @@ STACK_VERSION_PATTERN = "{{ stack_version }}"
- # especially since it is an attribute of a stack and becomes
- # complicated to change during a Rolling/Express upgrade.
- TARBALL_MAP = {
--  "slider": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+  "slider": {
-+    "dirs": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-              "/{0}/apps/{1}/slider/slider.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "tez": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "SLIDER"
-+  },
-+
-+  "tez": {
-+    "dirs": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-           "/{0}/apps/{1}/tez/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "tez_hive2": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "TEZ"
-+  },
-+
-+  "tez_hive2": {
-+    "dirs": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-           "/{0}/apps/{1}/tez_hive2/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "hive": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "HIVE"
-+  },
-+
-+  "hive": {
-+    "dirs": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-            "/{0}/apps/{1}/hive/hive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "pig": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "HIVE"
-+  },
-+
-+  "pig": {
-+    "dirs": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-           "/{0}/apps/{1}/pig/pig.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "hadoop_streaming": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "PIG"
-+  },
-+
-+  "hadoop_streaming": {
-+    "dirs": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-                        "/{0}/apps/{1}/mapreduce/hadoop-streaming.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "sqoop": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "MAPREDUCE2"
-+  },
-+
-+  "sqoop": {
-+    "dirs": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-             "/{0}/apps/{1}/sqoop/sqoop.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "mapreduce": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-+    "service": "SQOOP"
-+  },
-+
-+  "mapreduce": {
-+    "dirs": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-                 "/{0}/apps/{1}/mapreduce/mapreduce.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "spark": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
-+    "service": "MAPREDUCE2"
-+  },
-+
-+  "spark": {
-+    "dirs": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
-             "/{0}/apps/{1}/spark/spark-{0}-assembly.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
--  "spark2": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
--             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN))
-+    "service": "SPARK"
-+  },
-+
-+  "spark2": {
-+    "dirs": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
-+             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-+    "service": "SPARK2"
-+  }
- }
- 
- 


[39/50] [abbrv] ambari git commit: AMBARI-22017 stack advisor recommends all components on single host for HDP-2.6 Ambari trunk build (dsen)

Posted by jl...@apache.org.
AMBARI-22017 stack advisor recommends all components on single host for HDP-2.6 Ambari trunk build (dsen)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 999daefe0f09b92f42e50ff12f66dd95a112a003
Parents: 986a65d
Author: Dmytro Sen <ds...@apache.org>
Authored: Mon Sep 25 16:39:09 2017 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Mon Sep 25 16:39:09 2017 +0300

----------------------------------------------------------------------
 .../stacks/HDP/2.1/services/stack_advisor.py    |  4 +++
 .../stacks/2.1/common/test_stack_advisor.py     | 28 ++++++++++++++++++++
 2 files changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/999daefe/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
index ddd795f..aefb603 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
@@ -86,6 +86,10 @@ class HDP21StackAdvisor(HDP206StackAdvisor):
 
     Must be overriden in child class.
     """
+
+    # since old stack advisors are extending each other they should call parent method first
+    super(HDP21StackAdvisor, self).modifyComponentLayoutSchemes()
+
     self.componentLayoutSchemes.update({
       'APP_TIMELINE_SERVER': {31: 1, "else": 2},
       'FALCON_SERVER': {6: 1, 31: 2, "else": 3}

http://git-wip-us.apache.org/repos/asf/ambari/blob/999daefe/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
index bdd34fc..6bd02bf 100644
--- a/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
@@ -557,3 +557,31 @@ class TestHDP21StackAdvisor(TestCase):
 
     res = self.stackAdvisor.validateHiveConfigurations(properties, recommendedDefaults, configurations, '', '')
     self.assertEquals(res, res_expected)
+
+  def test_modifyComponentLayoutSchemes(self):
+    res_expected = {}
+    res_expected.update({
+      'NAMENODE': {"else": 0},
+      'SECONDARY_NAMENODE': {"else": 1},
+      'HBASE_MASTER': {6: 0, 31: 2, "else": 3},
+
+      'HISTORYSERVER': {31: 1, "else": 2},
+      'RESOURCEMANAGER': {31: 1, "else": 2},
+
+      'OOZIE_SERVER': {6: 1, 31: 2, "else": 3},
+
+      'HIVE_SERVER': {6: 1, 31: 2, "else": 4},
+      'HIVE_METASTORE': {6: 1, 31: 2, "else": 4},
+      'WEBHCAT_SERVER': {6: 1, 31: 2, "else": 4},
+      'METRICS_COLLECTOR': {3: 2, 6: 2, 31: 3, "else": 5},
+    })
+
+    res_expected.update({
+      'APP_TIMELINE_SERVER': {31: 1, "else": 2},
+      'FALCON_SERVER': {6: 1, 31: 2, "else": 3}
+    })
+
+    self.stackAdvisor.modifyComponentLayoutSchemes()
+    res = self.stackAdvisor.getComponentLayoutSchemes()
+
+    self.assertEquals(res, res_expected)


[16/50] [abbrv] ambari git commit: AMBARI-21919. Kerberos identity references should use the "reference" attribute (rlevas)

Posted by jl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/kerberos.json
index 7315c09..8688753 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -68,7 +70,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -110,7 +113,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -145,7 +149,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -154,7 +159,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -164,10 +170,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -175,7 +183,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -199,7 +208,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
index b1501b8..a3cfaea 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -91,7 +93,8 @@
               }
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "yarn_nodemanager_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-interactive-site/hive.llap.daemon.service.principal"
               },
@@ -126,7 +129,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -168,7 +172,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -177,7 +182,8 @@
               }
             },
             {
-              "name": "/YARN/RESOURCEMANAGER/resource_manager_rm",
+              "name": "yarn_resourcemanager_resource_manager_rm",
+              "reference": "/YARN/RESOURCEMANAGER/resource_manager_rm",
               "principal": {
                 "configuration": "ranger-yarn-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -212,7 +218,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -221,7 +228,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -231,10 +239,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -242,7 +252,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -266,7 +277,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0/kerberos.json b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0/kerberos.json
index b605c9d..36345ba 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.6.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZEPPELIN",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zeppelin_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "zeppelin_user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/kerberos.json b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/kerberos.json
index b605c9d..36345ba 100644
--- a/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ZEPPELIN/0.7.0/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZEPPELIN",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zeppelin_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "zeppelin_user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5/kerberos.json b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5/kerberos.json
index 0a64ea5..45895a9 100644
--- a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZOOKEEPER",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zookeeper_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/kerberos_descriptor_schema.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/kerberos_descriptor_schema.json b/ambari-server/src/main/resources/kerberos_descriptor_schema.json
index 34cdd49..45a2c29 100644
--- a/ambari-server/src/main/resources/kerberos_descriptor_schema.json
+++ b/ambari-server/src/main/resources/kerberos_descriptor_schema.json
@@ -5,10 +5,11 @@
       "properties": {
         "name": {
           "type": "string",
-          "pattern": "^(\\.\\/)?[/a-zA-Z0-9_\\-]+$"
+          "pattern": "^[a-zA-Z0-9_\\-]+$"
         },
         "reference": {
-          "type": "string"
+          "type": "string",
+          "pattern": "^(\\.\\/)?[/a-zA-Z0-9_\\-]+$"
         },
         "principal": {
           "type": "object",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/kerberos.json
index 8618804..0464369 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -67,7 +69,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -109,7 +112,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -144,7 +148,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -153,7 +158,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -163,10 +169,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -174,7 +182,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -198,7 +207,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/ECS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/ECS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/ECS/kerberos.json
index 3e8451d..2bba497 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/ECS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/ECS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ECS",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "ecs_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "hdfs",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/HBASE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/HBASE/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/HBASE/kerberos.json
index 5dfcb5e..3765ff3 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/HBASE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/HBASE/kerberos.json
@@ -4,10 +4,12 @@
       "name": "HBASE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hbase_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/ECS/hdfs"
+          "name": "hbase_hdfs",
+          "reference": "/ECS/hdfs"
         },
         {
           "name": "hbase",
@@ -31,7 +33,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hbase_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/YARN/kerberos.json
index 4c5bcdb..b8f2d3c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3.ECS/services/YARN/kerberos.json
@@ -4,13 +4,16 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/ECS/hdfs"
+          "name": "yarn_hdfs",
+          "reference": "/ECS/hdfs"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -69,7 +72,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanger_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -111,7 +115,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -146,7 +151,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -155,7 +161,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timneline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -165,13 +172,16 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/ECS/hdfs"
+          "name": "mapreduce2_hdfs",
+          "reference": "/ECS/hdfs"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -200,7 +210,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3.GlusterFS/services/ACCUMULO/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3.GlusterFS/services/ACCUMULO/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3.GlusterFS/services/ACCUMULO/kerberos.json
index 04ef946..15d4ff0 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3.GlusterFS/services/ACCUMULO/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3.GlusterFS/services/ACCUMULO/kerberos.json
@@ -67,10 +67,12 @@
           }
         },
         {
-          "name": "/HDFS/NAMENODE/hdfs"
+          "name": "accumulo_hdfs",
+          "reference": "/HDFS/NAMENODE/hdfs"
         },
         {
-          "name": "/smokeuser"
+          "name": "accumulo_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -91,7 +93,8 @@
           "name": "ACCUMULO_MASTER",
           "identities": [
             {
-              "name": "./accumulo_service"
+              "name": "accumulo_accumulo_master_accumulo_service",
+              "reference": "./accumulo_service"
             }
           ]
         },
@@ -99,7 +102,8 @@
           "name": "ACCUMULO_TSERVER",
           "identities": [
             {
-              "name": "./accumulo_service"
+              "name": "accumulo_accumulo_tserver_accumulo_service",
+              "reference": "./accumulo_service"
             }
           ]
         },
@@ -107,10 +111,12 @@
           "name": "ACCUMULO_MONITOR",
           "identities": [
             {
-              "name": "./accumulo_service"
+              "name": "accumulo_accumulo_monitor_accumulo_service",
+              "reference": "./accumulo_service"
             },
             {
-              "name": "./accumulo_tracer"
+              "name": "accumulo_accumulo_monitor_accumulo_tracer",
+              "reference": "./accumulo_tracer"
             }
           ]
         },
@@ -118,7 +124,8 @@
           "name": "ACCUMULO_GC",
           "identities": [
             {
-              "name": "./accumulo_service"
+              "name": "accumulo_accumulo_gc_accumulo_service",
+              "reference": "./accumulo_service"
             }
           ]
         },
@@ -126,7 +133,8 @@
           "name": "ACCUMULO_TRACER",
           "identities": [
             {
-              "name": "./accumulo_tracer"
+              "name": "accumulo_accumulo_tracer_accumulo_tracer",
+              "reference": "./accumulo_tracer"
             }
           ]
         },
@@ -134,7 +142,8 @@
           "name": "ACCUMULO_CLIENT",
           "identities": [
             {
-              "name": "./accumulo"
+              "name": "accumulo_accumulo_client_accumulo",
+              "reference": "./accumulo"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/kerberos.json
index cbfac42..e500b06 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/kerberos.json
@@ -67,7 +67,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "accumulo_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -93,7 +94,8 @@
           "name": "ACCUMULO_MASTER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "accumulo_accumulo_master_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/kerberos.json
index ee7c7cf..3e88739 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/TEZ/kerberos.json
@@ -7,7 +7,8 @@
           "name": "TEZ_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "tez_tez_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ],
           "configurations": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/kerberos.json
index 0e7a5de..12747bc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -76,7 +78,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -118,7 +121,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -153,7 +157,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -162,7 +167,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -172,10 +178,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -183,7 +191,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -207,7 +216,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/FALCON/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/FALCON/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/FALCON/kerberos.json
index 0c4507d..45fe2e8 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/FALCON/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/FALCON/kerberos.json
@@ -4,10 +4,12 @@
       "name": "FALCON",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "falcon_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "falcon_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -27,7 +29,8 @@
           "name": "FALCON_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "falcon_falcon_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "falcon_server",
@@ -51,7 +54,8 @@
               }
             },
             {
-              "name": "/FALCON/FALCON_SERVER/falcon_server",
+              "name": "falcon_falcon_server_falcon_server",
+              "reference": "/FALCON/FALCON_SERVER/falcon_server",
               "principal": {
                 "configuration": "falcon-atlas-application.properties/atlas.jaas.KafkaClient.option.principal"
               },
@@ -60,7 +64,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "falcon_falcon_server_falcon_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "falcon-startup.properties/*.falcon.http.authentication.kerberos.principal"

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
index 011921b..0b06003 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HBASE/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HBASE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hbase_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "hbase",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hbase_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -60,7 +62,8 @@
           "name": "HBASE_MASTER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hbase_hbase_master_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hbase_master_hbase",
@@ -84,7 +87,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hbase_hbase_master_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },
@@ -129,7 +133,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hbase_hbase_regionserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
index 766a014..c39c85b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -43,7 +45,8 @@
           "name":  "HDFS_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hdfs_hdfs_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -93,13 +96,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
             },
             {
-              "name": "/HDFS/NAMENODE/namenode_nn",
+              "name": "hdfs_namenode_namenode_nn",
+              "reference": "/HDFS/NAMENODE/namenode_nn",
               "principal": {
                 "configuration": "ranger-hdfs-audit/xasecure.audit.jaas.Client.option.principal"                
               },
@@ -175,7 +180,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }
@@ -233,7 +239,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_journalnode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.journalnode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/kerberos.json
index 044bd65..6e2b25c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/kerberos.json
@@ -4,10 +4,12 @@
       "name": "HIVE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hive_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "hive_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -33,7 +35,8 @@
           "name": "HIVE_METASTORE",
           "identities": [
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "hive_hive_metastore_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-site/hive.metastore.kerberos.principal"
               },
@@ -47,7 +50,8 @@
           "name": "HIVE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hive_hive_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hive_server_hive",
@@ -81,7 +85,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hive_hive_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hive-site/hive.server2.authentication.spnego.principal"
               },
@@ -105,16 +110,20 @@
           "name": "HIVE_SERVER_INTERACTIVE",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hive_hive_server_interactive_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive"
+              "name": "hive_hive_server_interactive_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive"
             },
             {
-              "name": "/HIVE/HIVE_SERVER/spnego"
+              "name": "hive_hive_server_interactive_spnego",
+              "reference": "/HIVE/HIVE_SERVER/spnego"
             },
             {
-              "name": "/YARN/NODEMANAGER/llap_zk_hive"
+              "name": "hive_hive_server_interactive_llap_zk_hive",
+              "reference": "/YARN/NODEMANAGER/llap_zk_hive"
             }
           ]
         },
@@ -122,7 +131,8 @@
           "name": "WEBHCAT_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "hive_webhcat_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "webhcat-site/templeton.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/KNOX/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/KNOX/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/KNOX/kerberos.json
index 2d8aa0d..c205d7d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/KNOX/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/KNOX/kerberos.json
@@ -29,7 +29,8 @@
               }
             },
             {
-              "name": "/KNOX/KNOX_GATEWAY/knox_principal",
+              "name": "knox_knox_gateway_knox_principal",
+              "reference": "/KNOX/KNOX_GATEWAY/knox_principal",
               "principal": {
                 "configuration": "ranger-knox-audit/xasecure.audit.jaas.Client.option.principal"                
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER_KMS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER_KMS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER_KMS/kerberos.json
index 8bf4cd8..1ef4568 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER_KMS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER_KMS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "RANGER_KMS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "ranger_kms_spnego",
+          "reference": "/spnego",
           "keytab": {
             "configuration": "kms-site/hadoop.kms.authentication.kerberos.keytab"
           }
@@ -36,7 +37,8 @@
           "name": "RANGER_KMS_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "ranger_kms_ranger_kms_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "kms-site/hadoop.kms.authentication.signer.secret.provider.zookeeper.kerberos.principal"
               },
@@ -62,7 +64,8 @@
               }
             },
             {
-              "name": "/RANGER_KMS/RANGER_KMS_SERVER/rangerkms",
+              "name": "ranger_kms_ranger_kms_server_rangerkms",
+              "reference": "/RANGER_KMS/RANGER_KMS_SERVER/rangerkms",
               "principal": {
                 "configuration": "ranger-kms-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/SPARK/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/SPARK/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/SPARK/kerberos.json
index 54ddf02..b4e93dd 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/SPARK/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/SPARK/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "sparkuser",
@@ -58,7 +59,8 @@
           "name": "SPARK_JOBHISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_spark_jobhistoryserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -69,10 +71,12 @@
           "name": "SPARK_THRIFTSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_spark_thriftserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive"
+              "name": "spark_spark_thriftserver_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive"
             }
           ]
         },
@@ -80,7 +84,8 @@
           "name": "LIVY_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "spark_livy_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "livyuser",
@@ -104,7 +109,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "spark_livy_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "livy-conf/livy.server.auth.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/YARN/kerberos.json
index 29cc00a..fca14ab 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/YARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -86,7 +88,8 @@
               }
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "yarn_nodemanager_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-interactive-site/hive.llap.daemon.service.principal"
               },
@@ -121,7 +124,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -163,7 +167,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -172,7 +177,8 @@
               }
             },
             {
-              "name": "/YARN/RESOURCEMANAGER/resource_manager_rm",
+              "name": "yarn_resourcemanager_resource_manager_rm",
+              "reference": "/YARN/RESOURCEMANAGER/resource_manager_rm",
               "principal": {
                 "configuration": "ranger-yarn-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -207,7 +213,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -216,7 +223,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -226,10 +234,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -237,7 +247,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -261,7 +272,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.5/services/ZEPPELIN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ZEPPELIN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ZEPPELIN/kerberos.json
index b605c9d..36345ba 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/ZEPPELIN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/ZEPPELIN/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZEPPELIN",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zeppelin_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "zeppelin_user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/kerberos.json
index 7d10ccc..6600534 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/kerberos.json
@@ -67,7 +67,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "atlas_atlas_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "value": "HTTP/_HOST@${realm}",
                 "configuration": "application-properties/atlas.authentication.method.kerberos.principal"
@@ -87,10 +88,12 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker"
+              "name": "atlas_atlas_server_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker"
             },
             {
-              "name": "/AMBARI_INFRA/INFRA_SOLR/infra-solr"
+              "name": "atlas_atlas_server_infra-solr",
+              "reference": "/AMBARI_INFRA/INFRA_SOLR/infra-solr"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/DRUID/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/DRUID/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/DRUID/kerberos.json
index 5b6b573..464e420 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/DRUID/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/DRUID/kerberos.json
@@ -4,7 +4,8 @@
       "name": "DRUID",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "druid_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "druid-common/druid.hadoop.security.spnego.principal"
           },
@@ -55,7 +56,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "druid_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -63,7 +65,8 @@
           "name": "DRUID_HISTORICAL",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_historical_druid",
+              "reference": "/druid"
             }
           ]
         },
@@ -71,7 +74,8 @@
           "name": "DRUID_BROKER",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_broker_druid",
+              "reference": "/druid"
             }
           ]
         },
@@ -79,7 +83,8 @@
           "name": "DRUID_OVERLORD",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_historical_druid",
+              "reference": "/druid"
             }
           ]
         },
@@ -87,7 +92,8 @@
           "name": "DRUID_COORDINATOR",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_coordinator_druid",
+              "reference": "/druid"
             }
           ]
         },
@@ -95,7 +101,8 @@
           "name": "DRUID_MIDDLEMANAGER",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_middlemanager_druid",
+              "reference": "/druid"
             }
           ]
         },
@@ -103,7 +110,8 @@
           "name": "DRUID_SUPERSET",
           "identities": [
             {
-              "name": "/druid"
+              "name": "druid_druid_superset_druid",
+              "reference": "/druid"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/HDFS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/HDFS/kerberos.json
index b5acf92..f8bdc5c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/HDFS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/HDFS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -44,7 +46,8 @@
           "name":  "HDFS_CLIENT",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hdfs_hdfs_client_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         },
@@ -94,13 +97,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
             },
             {
-              "name": "/HDFS/NAMENODE/namenode_nn",
+              "name": "hdfs_namenode_namenode_nn",
+              "reference": "/HDFS/NAMENODE/namenode_nn",
               "principal": {
                 "configuration": "ranger-hdfs-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -176,7 +181,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }
@@ -234,7 +240,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_journalnode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.journalnode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/OOZIE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/OOZIE/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/OOZIE/kerberos.json
index f1092f5..ca21770 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/OOZIE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/OOZIE/kerberos.json
@@ -4,10 +4,12 @@
       "name": "OOZIE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "oozie_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "oozie_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -30,7 +32,8 @@
           "name": "OOZIE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "oozie_oozie_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "oozie_server",
@@ -54,7 +57,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "oozie_oozie_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "oozie-site/oozie.authentication.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/kerberos.json
index c68d627..575b9fa 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "sparkuser",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
index 8b6b41d..89f19d4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SPARK2",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "spark2_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "spark2user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/SUPERSET/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SUPERSET/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SUPERSET/kerberos.json
index b79bac9..5d5125d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SUPERSET/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SUPERSET/kerberos.json
@@ -25,7 +25,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "superset_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -33,7 +34,8 @@
           "name": "SUPERSET",
           "identities": [
             {
-              "name": "/superset"
+              "name": "superset_superset_superset",
+              "reference": "/superset"
             }
           ]
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
index 4b9472b..e0417bf 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -91,7 +93,8 @@
               }
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "yarn_nodemanager_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-interactive-site/hive.llap.daemon.service.principal"
               },
@@ -149,7 +152,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -191,7 +195,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -200,7 +205,8 @@
               }
             },
             {
-              "name": "/YARN/RESOURCEMANAGER/resource_manager_rm",
+              "name": "yarn_resourcemanager_resource_manager_rm",
+              "reference": "/YARN/RESOURCEMANAGER/resource_manager_rm",
               "principal": {
                 "configuration": "ranger-yarn-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -235,7 +241,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -244,7 +251,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timeline_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -254,10 +262,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -265,7 +275,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_historyserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -289,7 +300,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_historyserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/kerberos.json
index b605c9d..36345ba 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ZEPPELIN/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZEPPELIN",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zeppelin_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "zeppelin_user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
index f1026f1..1059f89 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHBASE/kerberos.json
@@ -4,7 +4,8 @@
       "name": "FAKEHBASE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "fakehbase_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "hbase",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "fakehbase_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -60,7 +62,8 @@
           "name": "FAKEHBASE_MASTER",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "fakehbase_fakehbase_master_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "hbase_master_hbase",
@@ -84,7 +87,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakehbase_fakehbase_master_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },
@@ -129,7 +133,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakehbase_fakehbase_regionserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hbase-site/hbase.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHDFS/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHDFS/kerberos.json
index 4129506..2ee0bdf 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHDFS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEHDFS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "FAKEHDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "fakehdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "fakehdfs_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "auth_to_local_properties" : [
@@ -43,7 +45,8 @@
           "name":  "FAKEHDFS_CLIENT",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "fakehdfs_fakehdfs_client_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             }
           ]
         },
@@ -93,13 +96,15 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakehdfs_fakehdfs_fakenamenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
             },
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/namenode_nn",
+              "name": "fakehdfs_fakehdfs_fakenamenode_namenode_nn",
+              "reference": "/FAKEHDFS/FAKENAMENODE/namenode_nn",
               "principal": {
                 "configuration": "ranger-hdfs-audit/xasecure.audit.jaas.Client.option.principal"                
               },
@@ -175,7 +180,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakehdfs_secondary_fakenamenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }
@@ -233,7 +239,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakehdfs_fakejournalnode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.journalnode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEYARN/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEYARN/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEYARN/kerberos.json
index b960dce..8b4ae53 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEYARN/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEYARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "FAKEYARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "fakeyarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "fakeyarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -87,7 +89,8 @@
               }
             },
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "fakeyarn_fakenodemanager_hive_server_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-interactive-site/hive.llap.daemon.service.principal"
               },
@@ -122,7 +125,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakeyarn_fakenodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -164,7 +168,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakeyarn_fakeresourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -173,7 +178,8 @@
               }
             },
             {
-              "name": "/FAKEYARN/FAKERESOURCEMANAGER/resource_manager_rm",
+              "name": "fakeyarn_fakeresourcemanager_resource_manager_rm",
+              "reference": "/FAKEYARN/FAKERESOURCEMANAGER/resource_manager_rm",
               "principal": {
                 "configuration": "ranger-yarn-audit/xasecure.audit.jaas.Client.option.principal"
               },
@@ -208,7 +214,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakeyarn_fakeapp_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -217,7 +224,8 @@
               }
             },
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "app_timeline_server_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             }
           ]
         }
@@ -227,10 +235,12 @@
       "name": "FAKEMAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "fakemapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "fakemapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -238,7 +248,8 @@
           "name": "FAKEHISTORYSERVER",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "fakemapreduce2_fakehistoryserver_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -262,7 +273,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "fakemapreduce2_fakehistoryserver_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEZOOKEEPER/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEZOOKEEPER/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEZOOKEEPER/kerberos.json
index 0a64ea5..45895a9 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEZOOKEEPER/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/FAKEZOOKEEPER/kerberos.json
@@ -4,7 +4,8 @@
       "name": "ZOOKEEPER",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "zookeeper_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/kerberos.json
index 335d9f3..55f25c8 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/kerberos.json
@@ -4,7 +4,8 @@
       "name": "GRUMPY",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "grumpy_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "grumpy",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "grumpy_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -38,7 +40,8 @@
           "name": "GRUMPY",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "grumpy_grumpy_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "grumpy_grumpy",
@@ -62,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "grumpy_grumpy_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "grumpy-site/grumpy.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/kerberos.json
index 55389b0..43acb1d 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HAPPY",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "happy_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "happy",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "happy_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -38,7 +40,8 @@
           "name": "HAPPY",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "happy_happy_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "happy_happy",
@@ -62,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "happy_happy_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "happy-site/happy.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/KERBEROS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/KERBEROS/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/KERBEROS/kerberos.json
index 6ab7610..e5860cf 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/KERBEROS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/KERBEROS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "KERBEROS",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kerberos_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/kerberos.json
index f22274f..c9eeb94 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SLEEPY",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "sleepy_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "sleepy",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "sleepy_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -38,7 +40,8 @@
           "name": "SLEEPY",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "sleepy_sleepy_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "sleepy_sleepy",
@@ -62,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "sleepy_sleepy_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "sleepy-site/sleepy.security.authentication.spnego.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/kerberos.json b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/kerberos.json
index 7be70f7..1e2d97e 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/kerberos.json
@@ -4,7 +4,8 @@
       "name": "SNOW",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "snow_spnego",
+          "reference": "/spnego"
         },
         {
           "name": "snow",
@@ -28,7 +29,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "snow_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -38,7 +40,8 @@
           "name": "SNOW_WHITE",
           "identities": [
             {
-              "name": "/FAKEHDFS/FAKENAMENODE/hdfs"
+              "name": "snow_snow_white_hdfs",
+              "reference": "/FAKEHDFS/FAKENAMENODE/hdfs"
             },
             {
               "name": "snow_white_snow",
@@ -62,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "snow_snow_white_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "snow-site/snow.security.authentication.spnego.kerberos.principal"
               },


[20/50] [abbrv] ambari git commit: AMBARI-22030. OOZIE/OOZIE_SERVER restart failed saying AttributeError: 'NoneType' object has no attribute 'upper' during EU (ncole)

Posted by jl...@apache.org.
AMBARI-22030. OOZIE/OOZIE_SERVER restart failed saying AttributeError: 'NoneType' object has no attribute 'upper' during EU (ncole)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: f9c0c909be405ecfe3607ad4e07d3aa6eb6cf3df
Parents: f095b95
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Sep 21 17:13:12 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Sep 21 17:13:27 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/upgrade_summary.py      | 16 +++++
 .../4.0.0.2.0/package/scripts/params_linux.py   | 18 +++++-
 .../stacks/2.0.6/OOZIE/test_oozie_server.py     | 66 ++++++++++++++++++++
 3 files changed, 98 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f9c0c909/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py
index 849ac8a..f8a46c0 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py
@@ -25,6 +25,22 @@ from resource_management.libraries.functions.constants import Direction
 UpgradeSummary = namedtuple("UpgradeSummary", "type direction orchestration is_revert services")
 UpgradeServiceSummary = namedtuple("UpgradeServiceSummary", "service_name source_stack source_version target_stack target_version")
 
+
+def get_source_stack(service_name):
+  """
+  Gets the source stack (from) version of a service participating in an upgrade. If there is no
+  upgrade or the specific service is not participating, this will return None.
+  :param service_name:  the service name to check for, or None to extract it from the command
+  :return:  the stack that the service is upgrading from or None if there is no upgrade or
+  the service is not included in the upgrade.
+  """
+  service_summary = _get_service_summary(service_name)
+  if service_summary is None:
+    return None
+
+  return service_summary.source_stack
+
+
 def get_source_version(service_name = None, default_version=None):
   """
   Gets the source (from) version of a service participating in an upgrade. If there is no

http://git-wip-us.apache.org/repos/asf/ambari/blob/f9c0c909/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
index 44c88b7..e856c01 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
@@ -19,8 +19,10 @@ limitations under the License.
 """
 from ambari_commons.constants import AMBARI_SUDO_BINARY
 from resource_management.libraries.functions import format
-from resource_management.libraries.functions import conf_select, stack_select
-from resource_management.libraries.functions.constants import StackFeature
+from resource_management.libraries.functions import conf_select
+from resource_management.libraries.functions import stack_select
+from resource_management.libraries.functions import StackFeature
+from resource_management.libraries.functions import upgrade_summary
 from resource_management.libraries.functions.stack_features import check_stack_feature
 from resource_management.libraries.functions.default import default
 from resource_management.libraries.functions import get_kinit_path
@@ -33,8 +35,10 @@ from resource_management.libraries.functions.expect import expect
 from resource_management.libraries.resources.hdfs_resource import HdfsResource
 from resource_management.libraries.functions.get_architecture import get_architecture
 from resource_management.libraries.functions.stack_features import get_stack_feature_version
+from resource_management.libraries.functions.stack_tools import get_stack_name
 from resource_management.libraries.functions.version import get_major_version
 
+
 from resource_management.core.utils import PasswordString
 from ambari_commons.credential_store_helper import get_password_from_credential_store
 from urlparse import urlparse
@@ -65,6 +69,16 @@ agent_stack_retry_on_unavailability = config['hostLevelParams']['agent_stack_ret
 agent_stack_retry_count = expect("/hostLevelParams/agent_stack_retry_count", int)
 
 stack_root = status_params.stack_root
+
+# The source stack will be present during a cross-stack upgrade.
+# E.g., BigInsights-4.2.5 or HDP-2.6
+source_stack = default("/commandParams/source_stack", None)
+if source_stack is None:
+  source_stack = upgrade_summary.get_source_stack("OOZIE")
+
+# This variable name is important, do not change
+source_stack_name = get_stack_name(source_stack)
+
 stack_version_unformatted =  status_params.stack_version_unformatted
 stack_version_formatted =  status_params.stack_version_formatted
 major_stack_version = get_major_version(stack_version_formatted)

http://git-wip-us.apache.org/repos/asf/ambari/blob/f9c0c909/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
index dfa22fd..a5dac6c 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
@@ -1280,6 +1280,72 @@ class TestOozieServer(RMFTestCase):
     self.assertResourceCalled('File', '/usr/hdp/current/oozie-server/libext/ext-2.2.zip', mode = 0644)
     self.assertNoMoreResources()
 
+  @patch("os.path.isdir")
+  @patch("os.path.exists")
+  @patch("os.path.isfile")
+  @patch("os.remove")
+  @patch("shutil.rmtree", new = MagicMock())
+  @patch("glob.iglob")
+  @patch("shutil.copy2", new = MagicMock())
+  def test_upgrade_23_with_type(self, glob_mock, remove_mock,
+      isfile_mock, exists_mock, isdir_mock):
+
+    def exists_mock_side_effect(path):
+      if path == '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar':
+        return True
+
+      return False
+
+    isdir_mock.return_value = True
+    exists_mock.side_effect = exists_mock_side_effect
+    isfile_mock.return_value = True
+    glob_mock.return_value = ["/usr/hdp/2.2.1.0-2187/hadoop/lib/hadoop-lzo-0.6.0.2.2.1.0-2187.jar"]
+
+    prepare_war_stdout = """INFO: Adding extension: libext/mysql-connector-java.jar
+    New Oozie WAR file with added 'JARs' at /var/lib/oozie/oozie-server/webapps/oozie.war"""
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/oozie-upgrade.json"
+
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+    json_content['upgradeSummary'] = {
+      'services': { 'OOZIE': { 'sourceStackId': 'HDP-2.3' }},
+      'direction': 'UPGRADE',
+      'type': 'rolling_upgrade',
+      'orchestration': 'STANDARD'
+    }
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/oozie_server.py",
+     classname = "OozieServer", command = "pre_upgrade_restart", config_dict = json_content,
+     command_args = ["rolling"],
+     config_overrides = self.CONFIG_OVERRIDES,
+     stack_version = self.UPGRADE_STACK_VERSION,
+     target = RMFTestCase.TARGET_COMMON_SERVICES,
+     call_mocks = [(0, prepare_war_stdout)],
+     mocks_dict = mocks_dict)
+
+    self.assertTrue(isfile_mock.called)
+    self.assertEqual(isfile_mock.call_count,2)
+    isfile_mock.assert_called_with('/usr/share/HDP-oozie/ext-2.2.zip')
+
+    self.assertTrue(glob_mock.called)
+    self.assertEqual(glob_mock.call_count,1)
+    glob_mock.assert_called_with('/usr/hdp/2.3.0.0-1234/hadoop/lib/hadoop-lzo*.jar')
+
+    self.assertResourceCalled('Execute', ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'oozie-client', '2.3.0.0-1234'), sudo = True)
+    self.assertResourceCalled('Execute', ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'oozie-server', '2.3.0.0-1234'), sudo = True)
+
+    self.assertResourceCalled('Directory', '/usr/hdp/current/oozie-server/libext', mode = 0777)
+
+    self.assertResourceCalled('Execute', ('cp', '/usr/share/HDP-oozie/ext-2.2.zip', '/usr/hdp/current/oozie-server/libext'), sudo=True)
+    self.assertResourceCalled('Execute', ('chown', 'oozie:hadoop', '/usr/hdp/current/oozie-server/libext/ext-2.2.zip'), sudo=True)
+    self.assertResourceCalled('File', '/usr/hdp/current/oozie-server/libext/ext-2.2.zip', mode = 0644)
+    self.assertNoMoreResources()
+
 
   @patch("os.path.isdir")
   @patch("os.path.exists")


[33/50] [abbrv] ambari git commit: AMBARI-22039. File "hdfs.headless.keytab" has incorrect permission (aonishuk)

Posted by jl...@apache.org.
AMBARI-22039. File "hdfs.headless.keytab" has incorrect permission  (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 50b64758091a0df76419cbced4044e2689b5d4d1
Parents: 5d5cc4f
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Mon Sep 25 12:27:24 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Mon Sep 25 12:27:24 2017 +0300

----------------------------------------------------------------------
 .../stacks/2.6/ZEPPELIN/test_zeppelin_070.py      | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/50b64758/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py b/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
index b9b34e8..f379f40 100644
--- a/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
+++ b/ambari-server/src/test/python/stacks/2.6/ZEPPELIN/test_zeppelin_070.py
@@ -312,7 +312,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['download_on_execute'],
@@ -336,7 +337,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['create_on_execute'],
@@ -355,7 +357,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['download_on_execute'],
@@ -379,7 +382,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['create_on_execute'],
@@ -398,7 +402,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['download_on_execute'],
@@ -422,7 +427,8 @@ class TestZeppelin070(RMFTestCase):
                               hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore',
                               hdfs_site={u'a': u'b'},
                               kinit_path_local='/usr/bin/kinit',
-                              user="zeppelin",
+                              user="hdfs",
+                              owner="zeppelin",
                               group="zeppelin",
                               type='file',
                               action=['create_on_execute'],


[12/50] [abbrv] ambari git commit: AMBARI-22011. Could not copy tez tarball to HDFS during prepare upgrade (EU) (ncole)

Posted by jl...@apache.org.
AMBARI-22011. Could not copy tez tarball to HDFS during prepare upgrade (EU) (ncole)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 001c77f5773e3ca778ee6ff78ba8c616f0e3007c
Parents: 3e5f60a
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Sep 21 08:45:08 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Sep 21 09:56:46 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/copy_tarball.py         | 103 ++++++++++++++-----
 .../libraries/functions/copy_tarball.py.rej     |  78 ++++++++++++++
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |   2 +-
 3 files changed, 157 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/001c77f5/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py
index 61b03ca..219430a 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py
@@ -41,26 +41,65 @@ STACK_VERSION_PATTERN = "{{ stack_version }}"
 # especially since it is an attribute of a stack and becomes
 # complicated to change during a Rolling/Express upgrade.
 TARBALL_MAP = {
-  "slider": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-             "/{0}/apps/{1}/slider/slider.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "tez": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-          "/{0}/apps/{1}/tez/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "tez_hive2": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-          "/{0}/apps/{1}/tez_hive2/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "hive": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-           "/{0}/apps/{1}/hive/hive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "pig": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-          "/{0}/apps/{1}/pig/pig.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "hadoop_streaming": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-                       "/{0}/apps/{1}/mapreduce/hadoop-streaming.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "sqoop": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
-            "/{0}/apps/{1}/sqoop/sqoop.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "mapreduce": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+  "slider": {
+    "dirs": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+              "/{0}/apps/{1}/slider/slider.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "SLIDER"
+  },
+
+  "tez": {
+    "dirs": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/tez/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "TEZ"
+  },
+
+  "tez_hive2": {
+    "dirs": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/tez_hive2/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "HIVE"
+  },
+
+  "hive": {
+    "dirs": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+            "/{0}/apps/{1}/hive/hive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "HIVE"
+  },
+
+  "pig": {
+    "dirs": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/pig/pig.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "PIG"
+  },
+
+  "hadoop_streaming": {
+    "dirs": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+                        "/{0}/apps/{1}/mapreduce/hadoop-streaming.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "MAPREDUCE2"
+  },
+
+  "sqoop": {
+    "dirs": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+             "/{0}/apps/{1}/sqoop/sqoop.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "SQOOP"
+  },
+
+  "mapreduce": {
+    "dirs": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
                 "/{0}/apps/{1}/mapreduce/mapreduce.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "spark": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
-            "/{0}/apps/{1}/spark/spark-{0}-assembly.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
-  "spark2": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
-             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN))
+    "service": "MAPREDUCE2"
+  },
+
+  "spark": {
+    "dirs": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
+             "/{0}/apps/{1}/spark/spark-{0}-assembly.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "SPARK"
+  },
+
+  "spark2": {
+    "dirs": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
+             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+    "service": "SPARK2"
+  }
 }
 
 SERVICE_TO_CONFIG_MAP = {
@@ -101,7 +140,13 @@ def get_tarball_paths(name, use_upgrading_version_during_upgrade=True, custom_so
     Logger.error("Cannot copy {0} tarball to HDFS because stack name could not be determined.".format(str(name)))
     return (False, None, None)
 
-  stack_version = get_current_version(use_upgrading_version_during_upgrade)
+  if name is None or name.lower() not in TARBALL_MAP:
+    Logger.error("Cannot copy tarball to HDFS because {0} is not supported in stack {1} for this operation.".format(str(name), str(stack_name)))
+    return (False, None, None)
+
+  service = TARBALL_MAP[name.lower()]['service']
+
+  stack_version = get_current_version(service=service, use_upgrading_version_during_upgrade=use_upgrading_version_during_upgrade)
   if not stack_version:
     Logger.error("Cannot copy {0} tarball to HDFS because stack version could be be determined.".format(str(name)))
     return (False, None, None)
@@ -111,10 +156,7 @@ def get_tarball_paths(name, use_upgrading_version_during_upgrade=True, custom_so
     Logger.error("Cannot copy {0} tarball to HDFS because stack root could be be determined.".format(str(name)))
     return (False, None, None)
 
-  if name is None or name.lower() not in TARBALL_MAP:
-    Logger.error("Cannot copy tarball to HDFS because {0} is not supported in stack {1} for this operation.".format(str(name), str(stack_name)))
-    return (False, None, None)
-  (source_file, dest_file) = TARBALL_MAP[name.lower()]
+  (source_file, dest_file) = TARBALL_MAP[name.lower()]['dirs']
 
   if custom_source_file is not None:
     source_file = custom_source_file
@@ -134,14 +176,22 @@ def get_tarball_paths(name, use_upgrading_version_during_upgrade=True, custom_so
   return (True, source_file, dest_file)
 
 
-def get_current_version(use_upgrading_version_during_upgrade=True):
+def get_current_version(service=None, use_upgrading_version_during_upgrade=True):
   """
   Get the effective version to use to copy the tarballs to.
+  :param service: the service name when checking for an upgrade.  made optional for unknown \
+    code bases that may be using this function
   :param use_upgrading_version_during_upgrade: True, except when the RU/EU hasn't started yet.
   :return: Version, or False if an error occurred.
   """
+
+  from resource_management.libraries.functions import upgrade_summary
+
   # get the version for this command
   version = stack_features.get_stack_feature_version(Script.get_config())
+  if service is not None:
+    version = upgrade_summary.get_target_version(service_name=service, default_version=version)
+
 
   # if there is no upgrade, then use the command's version
   if not Script.in_stack_upgrade() or use_upgrading_version_during_upgrade:
@@ -152,6 +202,9 @@ def get_current_version(use_upgrading_version_during_upgrade=True):
 
   # we're in an upgrade and we need to use an older version
   current_version = stack_select.get_role_component_current_stack_version()
+  if service is not None:
+    current_version = upgrade_summary.get_source_version(service_name=service, default_version=current_version)
+
   if current_version is None:
     Logger.warning("Unable to determine the current version of the component for this command; unable to copy the tarball")
     return False

http://git-wip-us.apache.org/repos/asf/ambari/blob/001c77f5/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
new file mode 100644
index 0000000..b2c11fc
--- /dev/null
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py.rej
@@ -0,0 +1,78 @@
+diff a/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py b/ambari-common/src/main/python/resource_management/libraries/functions/copy_tarball.py	(rejected hunks)
+@@ -41,26 +41,65 @@ STACK_VERSION_PATTERN = "{{ stack_version }}"
+ # especially since it is an attribute of a stack and becomes
+ # complicated to change during a Rolling/Express upgrade.
+ TARBALL_MAP = {
+-  "slider": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++  "slider": {
++    "dirs": ("{0}/{1}/slider/lib/slider.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+              "/{0}/apps/{1}/slider/slider.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "tez": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "SLIDER"
++  },
++
++  "tez": {
++    "dirs": ("{0}/{1}/tez/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/tez/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "tez_hive2": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "TEZ"
++  },
++
++  "tez_hive2": {
++    "dirs": ("{0}/{1}/tez_hive2/lib/tez.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/tez_hive2/tez.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "hive": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "HIVE"
++  },
++
++  "hive": {
++    "dirs": ("{0}/{1}/hive/hive.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+            "/{0}/apps/{1}/hive/hive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "pig": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "HIVE"
++  },
++
++  "pig": {
++    "dirs": ("{0}/{1}/pig/pig.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+           "/{0}/apps/{1}/pig/pig.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "hadoop_streaming": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "PIG"
++  },
++
++  "hadoop_streaming": {
++    "dirs": ("{0}/{1}/hadoop-mapreduce/hadoop-streaming.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+                        "/{0}/apps/{1}/mapreduce/hadoop-streaming.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "sqoop": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "MAPREDUCE2"
++  },
++
++  "sqoop": {
++    "dirs": ("{0}/{1}/sqoop/sqoop.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+             "/{0}/apps/{1}/sqoop/sqoop.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "mapreduce": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
++    "service": "SQOOP"
++  },
++
++  "mapreduce": {
++    "dirs": ("{0}/{1}/hadoop/mapreduce.tar.gz".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN),
+                 "/{0}/apps/{1}/mapreduce/mapreduce.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "spark": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
++    "service": "MAPREDUCE2"
++  },
++
++  "spark": {
++    "dirs": ("{0}/{1}/spark/lib/spark-{2}-assembly.jar".format(STACK_ROOT_PATTERN, STACK_VERSION_PATTERN, STACK_NAME_PATTERN),
+             "/{0}/apps/{1}/spark/spark-{0}-assembly.jar".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
+-  "spark2": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
+-             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN))
++    "service": "SPARK"
++  },
++
++  "spark2": {
++    "dirs": ("/tmp/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN),
++             "/{0}/apps/{1}/spark2/spark2-{0}-yarn-archive.tar.gz".format(STACK_NAME_PATTERN, STACK_VERSION_PATTERN)),
++    "service": "SPARK2"
++  }
+ }
+ 
+ 

http://git-wip-us.apache.org/repos/asf/ambari/blob/001c77f5/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
index 0796ad1..64f9d54 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
@@ -424,7 +424,7 @@ def copy_atlas_hive_hook_to_dfs_share_lib(upgrade_type=None, upgrade_direction=N
                  "and performing a Downgrade.")
     return
 
-  effective_version = get_current_version()
+  effective_version = get_current_version(service="ATLAS")
   atlas_hive_hook_dir = format("{stack_root}/{effective_version}/atlas/hook/hive/")
   if not os.path.exists(atlas_hive_hook_dir):
     Logger.error(format("ERROR. Atlas is installed in cluster but this Oozie server doesn't "


[47/50] [abbrv] ambari git commit: AMBARI-22014. Patch upgrade is going into incorrect state during package installation with invalid VDF (ncole)

Posted by jl...@apache.org.
AMBARI-22014. Patch upgrade is going into incorrect state during package installation with invalid VDF (ncole)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 4c49b4bd006cdd3929f5e341552b200af608bc32
Parents: b653ee0
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Sep 25 15:23:42 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Sep 25 16:14:35 2017 -0400

----------------------------------------------------------------------
 .../server/controller/ControllerModule.java     |   2 +
 .../controller/ResourceProviderFactory.java     |   6 +-
 .../AbstractControllerResourceProvider.java     |   2 +-
 .../ClusterStackVersionResourceProvider.java    |   9 +-
 .../internal/DefaultProviderModule.java         |   2 -
 ...ClusterStackVersionResourceProviderTest.java | 223 ++++++-------------
 6 files changed, 87 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index e151e63..968e9b6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -62,6 +62,7 @@ import org.apache.ambari.server.cleanup.ClasspathScannerUtils;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.configuration.Configuration.ConnectionPoolType;
 import org.apache.ambari.server.configuration.Configuration.DatabaseType;
+import org.apache.ambari.server.controller.internal.ClusterStackVersionResourceProvider;
 import org.apache.ambari.server.controller.internal.ComponentResourceProvider;
 import org.apache.ambari.server.controller.internal.CredentialResourceProvider;
 import org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
@@ -467,6 +468,7 @@ public class ControllerModule extends AbstractModule {
         .implement(ResourceProvider.class, Names.named("credential"), CredentialResourceProvider.class)
         .implement(ResourceProvider.class, Names.named("kerberosDescriptor"), KerberosDescriptorResourceProvider.class)
         .implement(ResourceProvider.class, Names.named("upgrade"), UpgradeResourceProvider.class)
+        .implement(ResourceProvider.class, Names.named("clusterStackVersion"), ClusterStackVersionResourceProvider.class)
         .build(ResourceProviderFactory.class));
 
     install(new FactoryModuleBuilder().implement(

http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
index 3912138..9cd1d74 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
@@ -22,6 +22,7 @@ package org.apache.ambari.server.controller;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.controller.internal.ClusterStackVersionResourceProvider;
 import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.Resource.Type;
@@ -68,4 +69,7 @@ public interface ResourceProviderFactory {
   @Named("upgrade")
   UpgradeResourceProvider getUpgradeResourceProvider(AmbariManagementController managementController);
 
-}
+  @Named("clusterStackVersion")
+  ClusterStackVersionResourceProvider getClusterStackVersionResourceProvider(AmbariManagementController managementController);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index b35b2a8..b4b13eb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -183,7 +183,7 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
       case StackVersion:
         return new StackVersionResourceProvider(propertyIds, keyPropertyIds, managementController);
       case ClusterStackVersion:
-        return new ClusterStackVersionResourceProvider(managementController);
+        return resourceProviderFactory.getClusterStackVersionResourceProvider(managementController);
       case HostStackVersion:
         return new HostStackVersionResourceProvider(managementController);
       case StackService:

http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index f8a679a..ba5a4e7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -213,6 +213,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
   /**
    * Constructor.
    */
+  @Inject
   public ClusterStackVersionResourceProvider(
           AmbariManagementController managementController) {
     super(propertyIds, keyPropertyIds, managementController);
@@ -454,7 +455,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
     }
   }
 
-  @Transactional
+  @Transactional(rollbackOn = {RuntimeException.class, SystemException.class, AmbariException.class})
   RequestStatus createOrUpdateHostVersions(Cluster cluster,
       RepositoryVersionEntity repoVersionEntity, VersionDefinitionXml versionDefinitionXml,
       StackId stackId, boolean forceInstalled, Map<String, Object> propertyMap)
@@ -666,11 +667,13 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
     }
   }
 
-  private ActionExecutionContext getHostVersionInstallCommand(RepositoryVersionEntity repoVersion,
+  @Transactional
+  ActionExecutionContext getHostVersionInstallCommand(RepositoryVersionEntity repoVersion,
       Cluster cluster, AmbariManagementController managementController, AmbariMetaInfo ami,
       final StackId stackId, Set<String> repoServices, Stage stage1, Host host)
           throws SystemException {
 
+
     // Determine repositories for host
     String osFamily = host.getOsFamily();
 
@@ -684,7 +687,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
 
     if (null == osEntity || CollectionUtils.isEmpty(osEntity.getRepositories())) {
       throw new SystemException(String.format("Repositories for os type %s are " +
-          "not defined. Repo version=%s, stackId=%s",
+          "not defined for version %s of Stack %s.",
             osFamily, repoVersion.getVersion(), stackId));
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
index 074f8e1..5e5bff5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
@@ -106,8 +106,6 @@ public class DefaultProviderModule extends AbstractProviderModule {
         return new UpgradeItemResourceProvider(managementController);
       case UpgradeSummary:
         return new UpgradeSummaryResourceProvider(managementController);
-      case ClusterStackVersion:
-        return new ClusterStackVersionResourceProvider(managementController);
       case PreUpgradeCheck:
         return new PreUpgradeCheckResourceProvider(managementController);
       case HostStackVersion:

http://git-wip-us.apache.org/repos/asf/ambari/blob/4c49b4bd/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index c766f1e..a1415703 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -31,7 +31,6 @@ import static org.easymock.EasyMock.verify;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -68,6 +67,7 @@ import org.apache.ambari.server.controller.spi.Predicate;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.RequestStatus;
 import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.Resource.Type;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.utilities.PredicateBuilder;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
@@ -117,6 +117,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
@@ -124,7 +125,6 @@ import com.google.gson.JsonParser;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.Provider;
 import com.google.inject.util.Modules;
 
 import junit.framework.AssertionFailedError;
@@ -146,6 +146,10 @@ public class ClusterStackVersionResourceProviderTest {
   private HostVersionDAO hostVersionDAO;
   private HostComponentStateDAO hostComponentStateDAO;
 
+  private Clusters clusters;
+  private ActionManager actionManager;
+  private AmbariManagementController managementController;
+
   public static final String OS_JSON = "[\n" +
           "   {\n" +
           "      \"repositories\":[\n" +
@@ -179,6 +183,10 @@ public class ClusterStackVersionResourceProviderTest {
     configuration = new Configuration(properties);
     stageFactory = createNiceMock(StageFactory.class);
 
+    clusters = createNiceMock(Clusters.class);
+    actionManager = createNiceMock(ActionManager.class);
+    managementController = createMock(AmbariManagementController.class);
+
     // Initialize injector
     injector = Guice.createInjector(Modules.override(inMemoryModule).with(new MockModule()));
     injector.getInstance(GuiceJpaInitializer.class);
@@ -208,10 +216,6 @@ public class ClusterStackVersionResourceProviderTest {
   }
 
   private void testCreateResources(Authentication authentication) throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     Map<String, String> hostLevelParams = new HashMap<>();
     StackId stackId = new StackId("HDP", "2.0.1");
@@ -258,28 +262,15 @@ public class ClusterStackVersionResourceProviderTest {
     expect(schAMS.getServiceName()).andReturn("AMBARI_METRICS").anyTimes();
     expect(schAMS.getServiceComponentName()).andReturn("METRICS_COLLECTOR").anyTimes();
     // First host contains versionable components
-    final List<ServiceComponentHost> schsH1 = new ArrayList<ServiceComponentHost>(){{
-      add(schDatanode);
-      add(schNamenode);
-      add(schAMS);
-    }};
+    final List<ServiceComponentHost> schsH1 = Lists.newArrayList(schDatanode, schNamenode, schAMS);
     // Second host does not contain versionable components
-    final List<ServiceComponentHost> schsH2 = new ArrayList<ServiceComponentHost>(){{
-      add(schAMS);
-    }};
-
+    final List<ServiceComponentHost> schsH2 = Lists.newArrayList(schAMS);
 
     ServiceOsSpecific.Package hdfsPackage = new ServiceOsSpecific.Package();
     hdfsPackage.setName("hdfs");
     List<ServiceOsSpecific.Package> packages = Collections.singletonList(hdfsPackage);
 
-    ActionManager actionManager = createNiceMock(ActionManager.class);
-
     RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
-    ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
-    ResourceProvider csvResourceProvider = createNiceMock(ClusterStackVersionResourceProvider.class);
-
-    AbstractControllerResourceProvider.init(resourceProviderFactory);
 
     Map<String, Map<String, String>> hostConfigTags = new HashMap<>();
     expect(configHelper.getEffectiveDesiredTags(anyObject(ClusterImpl.class), anyObject(String.class))).andReturn(hostConfigTags);
@@ -290,12 +281,10 @@ public class ClusterStackVersionResourceProviderTest {
     expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
     expect(managementController.getJdkResourceUrl()).andReturn("/JdkResourceUrl").anyTimes();
     expect(managementController.getPackagesForServiceHost(anyObject(ServiceInfo.class),
-            EasyMock.anyObject(), anyObject(String.class))).
-            andReturn(packages).times((hostCount - 1) * 2); // 1 host has no versionable components, other hosts have 2 services
-//            // that's why we don't send commands to it
-
-    expect(resourceProviderFactory.getHostResourceProvider(EasyMock.anyObject(), EasyMock.anyObject(),
-            eq(managementController))).andReturn(csvResourceProvider).anyTimes();
+            EasyMock.<Map<String, String>>anyObject(), anyObject(String.class))).
+            andReturn(packages).anyTimes();
+    expect(managementController.findConfigurationTagsWithOverrides(anyObject(Cluster.class), EasyMock.anyString()))
+      .andReturn(new HashMap<String, Map<String, String>>()).anyTimes();
 
     expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
     expect(clusters.getHostsForCluster(anyObject(String.class))).andReturn(
@@ -357,18 +346,14 @@ public class ClusterStackVersionResourceProviderTest {
     StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
     StageUtils.setConfiguration(injector.getInstance(Configuration.class));
 
+    ResourceProvider provider = createProvider(managementController);
+    injector.injectMembers(provider);
+
     // replay
-    replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
+    replay(managementController, response, clusters,
             cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, actionManager,
             executionCommand, executionCommandWrapper,stage, stageFactory);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
-    injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
     Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
@@ -618,10 +603,6 @@ public class ClusterStackVersionResourceProviderTest {
    }
 
    private void testCreateResourcesWithRepoDefinition(Authentication authentication) throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     StackId stackId = new StackId("HDP", "2.0.1");
 
@@ -706,7 +687,7 @@ public class ClusterStackVersionResourceProviderTest {
 
     RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
     ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
-    ResourceProvider csvResourceProvider = createNiceMock(ClusterStackVersionResourceProvider.class);
+    ResourceProvider csvResourceProvider = createNiceMock(ResourceProvider.class);
 
     AbstractControllerResourceProvider.init(resourceProviderFactory);
 
@@ -725,6 +706,10 @@ public class ClusterStackVersionResourceProviderTest {
     expect(resourceProviderFactory.getHostResourceProvider(EasyMock.anyObject(), EasyMock.anyObject(),
             eq(managementController))).andReturn(csvResourceProvider).anyTimes();
 
+    expect(managementController.findConfigurationTagsWithOverrides(anyObject(Cluster.class), EasyMock.anyString()))
+      .andReturn(new HashMap<String, Map<String, String>>()).anyTimes();
+
+
     expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
     expect(clusters.getHostsForCluster(anyObject(String.class))).andReturn(
         hostsForCluster).anyTimes();
@@ -796,12 +781,7 @@ public class ClusterStackVersionResourceProviderTest {
             cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schHBM, actionManager,
             executionCommandWrapper,stage, stageFactory);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
@@ -859,10 +839,6 @@ public class ClusterStackVersionResourceProviderTest {
 
     String os_json = json.toString();
 
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     StackId stackId = new StackId("HDP", "2.0.1");
 
@@ -946,10 +922,7 @@ public class ClusterStackVersionResourceProviderTest {
     ActionManager actionManager = createNiceMock(ActionManager.class);
 
     RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
-    ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
-    ResourceProvider csvResourceProvider = createNiceMock(ClusterStackVersionResourceProvider.class);
-
-    AbstractControllerResourceProvider.init(resourceProviderFactory);
+    ResourceProvider csvResourceProvider = createNiceMock(ResourceProvider.class);
 
     Map<String, Map<String, String>> hostConfigTags = new HashMap<>();
     expect(configHelper.getEffectiveDesiredTags(anyObject(ClusterImpl.class), anyObject(String.class))).andReturn(hostConfigTags);
@@ -963,8 +936,8 @@ public class ClusterStackVersionResourceProviderTest {
             EasyMock.anyObject(), anyObject(String.class))).
             andReturn(packages).anyTimes(); // only one host has the versionable component
 
-    expect(resourceProviderFactory.getHostResourceProvider(EasyMock.anyObject(), EasyMock.anyObject(),
-            eq(managementController))).andReturn(csvResourceProvider).anyTimes();
+    expect(managementController.findConfigurationTagsWithOverrides(anyObject(Cluster.class), EasyMock.anyString()))
+    .andReturn(new HashMap<String, Map<String, String>>()).anyTimes();
 
     expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
     expect(clusters.getHostsForCluster(anyObject(String.class))).andReturn(
@@ -992,11 +965,9 @@ public class ClusterStackVersionResourceProviderTest {
     expect(cluster.transitionHostsToInstalling(anyObject(RepositoryVersionEntity.class),
         anyObject(VersionDefinitionXml.class), eq(false))).andReturn(hostsNeedingInstallCommands).atLeastOnce();
 
-//    ExecutionCommand executionCommand = createNiceMock(ExecutionCommand.class);
     ExecutionCommand executionCommand = new ExecutionCommand();
     ExecutionCommandWrapper executionCommandWrapper = createNiceMock(ExecutionCommandWrapper.class);
 
-//    expect(executionCommand.getHostLevelParams()).andReturn(new HashMap<String, String>()).atLeastOnce();
     expect(executionCommandWrapper.getExecutionCommand()).andReturn(executionCommand).anyTimes();
 
     Stage stage = createNiceMock(Stage.class);
@@ -1031,16 +1002,11 @@ public class ClusterStackVersionResourceProviderTest {
     StageUtils.setConfiguration(injector.getInstance(Configuration.class));
 
     // replay
-    replay(managementController, response, clusters, hdfsService, hbaseService, resourceProviderFactory, csvResourceProvider,
+    replay(managementController, response, clusters, hdfsService, hbaseService, csvResourceProvider,
             cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schHBM, actionManager,
             executionCommandWrapper,stage, stageFactory);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
@@ -1096,10 +1062,6 @@ public class ClusterStackVersionResourceProviderTest {
    }
 
    private void testCreateResourcesMixed(Authentication authentication) throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     Map<String, String> hostLevelParams = new HashMap<>();
     StackId stackId = new StackId("HDP", "2.0.1");
@@ -1164,16 +1126,9 @@ public class ClusterStackVersionResourceProviderTest {
     expect(schAMS.getServiceName()).andReturn("AMBARI_METRICS").anyTimes();
     expect(schAMS.getServiceComponentName()).andReturn("METRICS_COLLECTOR").anyTimes();
     // First host contains versionable components
-    final List<ServiceComponentHost> schsH1 = new ArrayList<ServiceComponentHost>(){{
-      add(schDatanode);
-      add(schNamenode);
-      add(schAMS);
-    }};
+    final List<ServiceComponentHost> schsH1 = Lists.newArrayList(schDatanode, schNamenode, schAMS);
     // Second host does not contain versionable components
-    final List<ServiceComponentHost> schsH2 = new ArrayList<ServiceComponentHost>(){{
-      add(schAMS);
-    }};
-
+    final List<ServiceComponentHost> schsH2 = Lists.newArrayList(schAMS);
 
     ServiceOsSpecific.Package hdfsPackage = new ServiceOsSpecific.Package();
     hdfsPackage.setName("hdfs");
@@ -1182,10 +1137,6 @@ public class ClusterStackVersionResourceProviderTest {
     ActionManager actionManager = createNiceMock(ActionManager.class);
 
     RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
-    ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
-    ResourceProvider csvResourceProvider = createNiceMock(ClusterStackVersionResourceProvider.class);
-
-    AbstractControllerResourceProvider.init(resourceProviderFactory);
 
     Map<String, Map<String, String>> hostConfigTags = new HashMap<>();
     expect(configHelper.getEffectiveDesiredTags(anyObject(ClusterImpl.class), anyObject(String.class))).andReturn(hostConfigTags);
@@ -1196,12 +1147,11 @@ public class ClusterStackVersionResourceProviderTest {
     expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
     expect(managementController.getJdkResourceUrl()).andReturn("/JdkResourceUrl").anyTimes();
     expect(managementController.getPackagesForServiceHost(anyObject(ServiceInfo.class),
-            EasyMock.anyObject(), anyObject(String.class))).
-            andReturn(packages).times((hostCount - 1) * 2); // 1 host has no versionable components, other hosts have 2 services
-//            // that's why we don't send commands to it
+            EasyMock.<Map<String, String>>anyObject(), anyObject(String.class))).
+            andReturn(packages).anyTimes();
 
-    expect(resourceProviderFactory.getHostResourceProvider(EasyMock.anyObject(), EasyMock.anyObject(),
-            eq(managementController))).andReturn(csvResourceProvider).anyTimes();
+    expect(managementController.findConfigurationTagsWithOverrides(anyObject(Cluster.class), EasyMock.anyString()))
+      .andReturn(new HashMap<String, Map<String, String>>()).anyTimes();
 
     expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
     expect(clusters.getHostsForCluster(anyObject(String.class))).andReturn(
@@ -1267,16 +1217,11 @@ public class ClusterStackVersionResourceProviderTest {
 
 
     // replay
-    replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
+    replay(managementController, response, clusters,
             cluster, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, actionManager,
             executionCommand, executionCommandWrapper,stage, stageFactory);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
@@ -1329,10 +1274,6 @@ public class ClusterStackVersionResourceProviderTest {
    */
   @Test
   public void testCreateResourcesInInstalledState() throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     StackId stackId = new StackId("HDP", "2.2.0");
     String repoVersion = "2.2.0.1-885";
@@ -1408,8 +1349,7 @@ public class ClusterStackVersionResourceProviderTest {
 
     RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
     ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
-    ResourceProvider csvResourceProvider = createNiceMock(
-        ClusterStackVersionResourceProvider.class);
+    ResourceProvider csvResourceProvider = createNiceMock(ResourceProvider.class);
 
     AbstractControllerResourceProvider.init(resourceProviderFactory);
 
@@ -1454,10 +1394,7 @@ public class ClusterStackVersionResourceProviderTest {
         csvResourceProvider, cluster, repositoryVersionDAOMock, configHelper, schDatanode,
         stageFactory, hostVersionDAO);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(type,
-        PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request. add more maps for multiple
@@ -1501,10 +1438,6 @@ public class ClusterStackVersionResourceProviderTest {
 
   @Test
   public void testCreateResourcesPPC() throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     Map<String, String> hostLevelParams = new HashMap<>();
     StackId stackId = new StackId("HDP", "2.0.1");
@@ -1567,16 +1500,9 @@ public class ClusterStackVersionResourceProviderTest {
     expect(schAMS.getServiceName()).andReturn("AMBARI_METRICS").anyTimes();
     expect(schAMS.getServiceComponentName()).andReturn("METRICS_COLLECTOR").anyTimes();
     // First host contains versionable components
-    final List<ServiceComponentHost> schsH1 = new ArrayList<ServiceComponentHost>(){{
-      add(schDatanode);
-      add(schNamenode);
-      add(schAMS);
-    }};
+    final List<ServiceComponentHost> schsH1 = Lists.newArrayList(schDatanode, schNamenode, schAMS);
     // Second host does not contain versionable components
-    final List<ServiceComponentHost> schsH2 = new ArrayList<ServiceComponentHost>(){{
-      add(schAMS);
-    }};
-
+    final List<ServiceComponentHost> schsH2 = Lists.newArrayList(schAMS);
 
     ServiceOsSpecific.Package hdfsPackage = new ServiceOsSpecific.Package();
     hdfsPackage.setName("hdfs");
@@ -1600,8 +1526,11 @@ public class ClusterStackVersionResourceProviderTest {
     expect(managementController.getJdkResourceUrl()).andReturn("/JdkResourceUrl").anyTimes();
     expect(managementController.getPackagesForServiceHost(anyObject(ServiceInfo.class),
             (Map<String, String>) anyObject(List.class), anyObject(String.class))).
-            andReturn(packages).anyTimes(); // 1 host has no versionable components, other hosts have 2 services
-  //            // that's why we don't send commands to it
+            andReturn(packages).anyTimes();
+
+    expect(managementController.findConfigurationTagsWithOverrides(anyObject(Cluster.class), EasyMock.anyString()))
+      .andReturn(new HashMap<String, Map<String, String>>()).anyTimes();
+
 
     expect(resourceProviderFactory.getHostResourceProvider(anyObject(Set.class), anyObject(Map.class),
             eq(managementController))).andReturn(csvResourceProvider).anyTimes();
@@ -1672,12 +1601,7 @@ public class ClusterStackVersionResourceProviderTest {
             cluster, repoVersion, repositoryVersionDAOMock, configHelper, schDatanode, schNamenode, schAMS, actionManager,
             executionCommand, executionCommandWrapper,stage, stageFactory);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
@@ -1711,10 +1635,6 @@ public class ClusterStackVersionResourceProviderTest {
 
   @Test
   public void testGetSorted() throws Exception {
-
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    final Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
     StackId stackId = new StackId("HDP", "2.2.0");
 
@@ -1766,19 +1686,17 @@ public class ClusterStackVersionResourceProviderTest {
         csvResourceProvider, cluster, repositoryVersionDAOMock, configHelper,
         stageFactory, hostVersionDAO);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(type,
-        PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type),
-        /*managementController*/null);
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
-    Field field = ClusterStackVersionResourceProvider.class.getDeclaredField("clusters");
-    field.setAccessible(true);
-    field.set(null, new Provider<Clusters>() {
-      @Override
-      public Clusters get() {
-        return clusters;
-      }
-    });
+//    Field field = ClusterStackVersionResourceProvider.class.getDeclaredField("clusters");
+//    field.setAccessible(true);
+//    field.set(null, new Provider<Clusters>() {
+//      @Override
+//      public Clusters get() {
+//        return clusters;
+//      }
+//    });
 
     // set the security auth
     SecurityContextHolder.getContext().setAuthentication(
@@ -1913,10 +1831,6 @@ public class ClusterStackVersionResourceProviderTest {
    }
 
    private void testCreateResourcesExistingUpgrade(Authentication authentication) throws Exception {
-    Resource.Type type = Resource.Type.ClusterStackVersion;
-
-    AmbariManagementController managementController = createMock(AmbariManagementController.class);
-    Clusters clusters = createNiceMock(Clusters.class);
     Cluster cluster = createNiceMock(Cluster.class);
 
     expect(managementController.getClusters()).andReturn(clusters).anyTimes();
@@ -1934,12 +1848,7 @@ public class ClusterStackVersionResourceProviderTest {
     // replay
     replay(managementController, clusters, cluster);
 
-    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
-        type,
-        PropertyHelper.getPropertyIds(type),
-        PropertyHelper.getKeyPropertyIds(type),
-        managementController);
-
+    ResourceProvider provider = createProvider(managementController);
     injector.injectMembers(provider);
 
     // add the property map to a set for the request.  add more maps for multiple creates
@@ -1971,6 +1880,17 @@ public class ClusterStackVersionResourceProviderTest {
     verify(cluster);
 
   }
+
+   private ClusterStackVersionResourceProvider createProvider(AmbariManagementController amc) {
+     ResourceProviderFactory factory = injector.getInstance(ResourceProviderFactory.class);
+     AbstractControllerResourceProvider.init(factory);
+
+     Resource.Type type = Type.ClusterStackVersion;
+     return (ClusterStackVersionResourceProvider) AbstractControllerResourceProvider.getResourceProvider(type,
+         PropertyHelper.getPropertyIds(type), PropertyHelper.getKeyPropertyIds(type),
+         amc);
+   }
+
   private class MockModule extends AbstractModule {
     @Override
     protected void configure() {
@@ -1980,6 +1900,9 @@ public class ClusterStackVersionResourceProviderTest {
       bind(StageFactory.class).toInstance(stageFactory);
       bind(HostVersionDAO.class).toInstance(hostVersionDAO);
       bind(HostComponentStateDAO.class).toInstance(hostComponentStateDAO);
+      bind(Clusters.class).toInstance(clusters);
+      bind(ActionManager.class).toInstance(actionManager);
+      bind(AmbariManagementController.class).toInstance(managementController);
     }
   }
 


[37/50] [abbrv] ambari git commit: AMBARI-22007 - Addition of service component after patching a service still keeps the component at base version (part2) (jonathanhurley)

Posted by jl...@apache.org.
AMBARI-22007 - Addition of service component after patching a service still keeps the component at base version (part2) (jonathanhurley)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 311c7bbd8ee94b8964a7f1769b41efc40ecdcdc6
Parents: eb5bcef
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Sep 25 08:45:58 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Sep 25 08:51:38 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/version_select_util.py  |  7 ++--
 .../libraries/script/script.py                  | 36 ++++++++++++++++----
 .../src/test/python/TestVersionSelectUtil.py    |  4 +--
 3 files changed, 35 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/311c7bbd/ambari-common/src/main/python/resource_management/libraries/functions/version_select_util.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/version_select_util.py b/ambari-common/src/main/python/resource_management/libraries/functions/version_select_util.py
index 9fbb42b..73b5dc1 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/version_select_util.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/version_select_util.py
@@ -28,10 +28,11 @@ from resource_management.core import shell
 from resource_management.libraries.functions import stack_tools
 
 
-def get_component_version(stack_name, component_name):
+def get_component_version_from_symlink(stack_name, component_name):
   """
-  For any stack name, returns the version currently installed for a given component.
-  Because each stack name may have different logic, the input is a generic dictionary.
+  Gets the version of the specified component by invoking the stack-select tool to query for the
+  version which is referenced by the symlink.
+
   :param stack_name: one of HDP, HDPWIN, BIGTOP, PHD, etc. usually retrieved from
   the command-#.json file's ["hostLevelParams"]["stack_name"]
   :param component_name: Component name as a string necessary to get the version

http://git-wip-us.apache.org/repos/asf/ambari/blob/311c7bbd/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 303b640..e612638 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
@@ -47,7 +47,7 @@ from resource_management.core.environment import Environment
 from resource_management.core.logger import Logger
 from resource_management.core.exceptions import Fail, ClientComponentHasNoStatus, ComponentIsNotRunning
 from resource_management.core.resources.packaging import Package
-from resource_management.libraries.functions.version_select_util import get_component_version
+from resource_management.libraries.functions.version_select_util import get_component_version_from_symlink
 from resource_management.libraries.functions.version import compare_versions
 from resource_management.libraries.functions.version import format_stack_version
 from resource_management.libraries.functions import stack_tools
@@ -207,18 +207,40 @@ class Script(object):
       return os.path.realpath(config_path)
     return None
 
-  def save_component_version_to_structured_out(self):
+  def save_component_version_to_structured_out(self, command_name):
     """
-    :param stack_name: One of HDP, HDPWIN, PHD, BIGTOP.
-    :return: Append the version number to the structured out.
+    Saves the version of the component for this command to the structured out file. If the
+    command is an install command and the repository is trusted, then it will use the version of
+    the repository. Otherwise, it will consult the stack-select tool to read the symlink version.
+    :param command_name: command name
+    :return: None
     """
+    from resource_management.libraries.functions.default import default
     from resource_management.libraries.functions import stack_select
 
+    repository_resolved = default("repositoryFile/resolved", False)
+    repository_version = default("repositoryFile/repoVersion", None)
+    is_install_command = command_name is not None and command_name.lower() == "install"
+
+    # start out with no version
+    component_version = None
+
+    # install command + trusted repo means use the repo version and don't consult stack-select
+    # this is needed in cases where an existing symlink is on the system and stack-select can't
+    # change it on installation (because it's scared to in order to support parallel installs)
+    if is_install_command and repository_resolved and repository_version is not None:
+      Logger.info("The repository with version {0} for this command has been marked as resolved."\
+        " It will be used to report the version of the component which was installed".format(repository_version))
+
+      component_version = repository_version
+
     stack_name = Script.get_stack_name()
     stack_select_package_name = stack_select.get_package_name()
 
     if stack_select_package_name and stack_name:
-      component_version = get_component_version(stack_name, stack_select_package_name)
+      # only query for the component version from stack-select if we can't trust the repository yet
+      if component_version is None:
+        component_version = get_component_version_from_symlink(stack_name, stack_select_package_name)
 
       if component_version:
         self.put_structured_out({"version": component_version})
@@ -336,7 +358,7 @@ class Script(object):
       raise
     finally:
       if self.should_expose_component_version(self.command_name):
-        self.save_component_version_to_structured_out()
+        self.save_component_version_to_structured_out(self.command_name)
 
   def execute_prefix_function(self, command_name, afix, env):
     """
@@ -938,7 +960,7 @@ class Script(object):
           self.post_rolling_restart(env)
 
     if self.should_expose_component_version("restart"):
-      self.save_component_version_to_structured_out()
+      self.save_component_version_to_structured_out("restart")
 
 
   # TODO, remove after all services have switched to post_upgrade_restart

http://git-wip-us.apache.org/repos/asf/ambari/blob/311c7bbd/ambari-server/src/test/python/TestVersionSelectUtil.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestVersionSelectUtil.py b/ambari-server/src/test/python/TestVersionSelectUtil.py
index 5195dca..82985fa 100644
--- a/ambari-server/src/test/python/TestVersionSelectUtil.py
+++ b/ambari-server/src/test/python/TestVersionSelectUtil.py
@@ -133,7 +133,7 @@ class TestVersionSelectUtil(TestCase):
     call_mock.side_effect = [(0, "value will come from MagicFile"), ] * 2
 
     # Pass
-    version = self.module.get_component_version("HDP", "hive-server2")
+    version = self.module.get_component_version_from_symlink("HDP", "hive-server2")
     self.assertEquals(version, stack_expected_version)
-    version = self.module.get_component_version("HDP", "zookeeper-server")
+    version = self.module.get_component_version_from_symlink("HDP", "zookeeper-server")
     self.assertEquals(version, stack_expected_version)


[04/50] [abbrv] ambari git commit: AMBARI-21970. Enable sticky bit for curl_krb_cache (echekanskiy)

Posted by jl...@apache.org.
AMBARI-21970. Enable sticky bit for curl_krb_cache (echekanskiy)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 8b9370a55207ecb6baccfd02337afe7c75532f7b
Parents: 260c75f
Author: Eugene Chekanskiy <ec...@apache.org>
Authored: Wed Sep 20 16:28:11 2017 +0300
Committer: Eugene Chekanskiy <ec...@apache.org>
Committed: Wed Sep 20 16:28:11 2017 +0300

----------------------------------------------------------------------
 .../resource_management/libraries/functions/curl_krb_request.py    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8b9370a5/ambari-common/src/main/python/resource_management/libraries/functions/curl_krb_request.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/curl_krb_request.py b/ambari-common/src/main/python/resource_management/libraries/functions/curl_krb_request.py
index 72bc5c6..95e8625 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/curl_krb_request.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/curl_krb_request.py
@@ -111,7 +111,7 @@ def curl_krb_request(tmp_dir, keytab, principal, url, cache_file_prefix,
   curl_krb_cache_path = os.path.join(tmp_dir, "curl_krb_cache")
   if not os.path.exists(curl_krb_cache_path):
     os.makedirs(curl_krb_cache_path)
-  os.chmod(curl_krb_cache_path, 0777)
+  os.chmod(curl_krb_cache_path, 01777)
 
   ccache_file_path = "{0}{1}{2}_{3}_cc_{4}".format(curl_krb_cache_path, os.sep, cache_file_prefix, user, ccache_file_name)
   kerberos_env = {'KRB5CCNAME': ccache_file_path}


[05/50] [abbrv] ambari git commit: AMBARI-21999 - Always Take Target Read-Only Properties On Stack Upgrade (jonathanhurley)

Posted by jl...@apache.org.
AMBARI-21999 -  Always Take Target Read-Only Properties On Stack Upgrade (jonathanhurley)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 56c3da7846cf2b30e5860cb5bc32d3c9ecb93424
Parents: 8b9370a
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Sep 19 13:36:07 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Sep 20 10:17:31 2017 -0400

----------------------------------------------------------------------
 .../ambari/server/state/UpgradeHelper.java      |  84 ++++++++++--
 .../StackUpgradeConfigurationMergeTest.java     | 136 +++++++++++++++++++
 2 files changed, 208 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/56c3da78/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 087adc2..8f9d8e1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -926,7 +926,8 @@ public class UpgradeHelper {
    * stack and the target stack. If a value has changed between stacks, then the
    * target stack value should be taken unless the cluster's value differs from
    * the old stack. This can occur if a property has been customized after
-   * installation.</li>
+   * installation. Read-only properties, however, are always taken from the new
+   * stack.</li>
    * <li>Downgrade: Reset the latest configurations from the service's original
    * stack. The new configurations that were created on upgrade must be left
    * intact until all components have been reverted, otherwise heartbeats will
@@ -976,6 +977,11 @@ public class UpgradeHelper {
         continue;
       }
 
+      // the auto-merge must take read-only properties even if they have changed
+      // - if the properties was read-only in the source stack, then we must
+      // take the new stack's value
+      Map<String, Set<String>> readOnlyProperties = getReadOnlyProperties(sourceStackId, serviceName);
+
       // upgrade is a bit harder - we have to merge new stack configurations in
 
       // populate a map of default configurations for the service on the old
@@ -1041,8 +1047,7 @@ public class UpgradeHelper {
         Map<String, String> existingConfigurations = existingServiceConfig.getProperties();
 
         // get the new configurations
-        Map<String, String> newDefaultConfigurations = newServiceDefaultConfigsByType.get(
-            configurationType);
+        Map<String, String> newDefaultConfigurations = newServiceDefaultConfigsByType.get(configurationType);
 
         // if the new stack configurations don't have the type, then simply add
         // all of the existing in
@@ -1061,8 +1066,7 @@ public class UpgradeHelper {
           }
         }
 
-        // process every existing configuration property for this configuration
-        // type
+        // process every existing configuration property for this configuration type
         for (Map.Entry<String, String> existingConfigurationEntry : existingConfigurations.entrySet()) {
           String existingConfigurationKey = existingConfigurationEntry.getKey();
           String existingConfigurationValue = existingConfigurationEntry.getValue();
@@ -1079,17 +1083,22 @@ public class UpgradeHelper {
               // from the original stack
               String oldDefaultValue = oldServiceDefaultConfigs.get(existingConfigurationKey);
 
-              if (!StringUtils.equals(existingConfigurationValue, oldDefaultValue)) {
-                // at this point, we've determined that there is a
-                // difference
-                // between default values between stacks, but the value was
-                // also customized, so keep the customized value
+              // see if this property is a read-only property which means that
+              // we shouldn't care if it was changed - we should take the new
+              // stack's value
+              Set<String> readOnlyPropertiesForType = readOnlyProperties.get(configurationType);
+              boolean readOnly = (null != readOnlyPropertiesForType
+                  && readOnlyPropertiesForType.contains(existingConfigurationKey));
+
+              if (!readOnly && !StringUtils.equals(existingConfigurationValue, oldDefaultValue)) {
+                // at this point, we've determined that there is a difference
+                // between default values between stacks, but the value was also
+                // customized, so keep the customized value
                 newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
               }
             }
           } else {
-            // there is no entry in the map, so add the existing key/value
-            // pair
+            // there is no entry in the map, so add the existing key/value pair
             newDefaultConfigurations.put(existingConfigurationKey, existingConfigurationValue);
           }
         }
@@ -1143,4 +1152,55 @@ public class UpgradeHelper {
       }
     }
   }
+
+  /**
+   * Gets all of the read-only properties for the given service. This will also
+   * include any stack properties as well which are read-only.
+   *
+   * @param stackId
+   *          the stack to get read-only properties for (not {@code null}).
+   * @param serviceName
+   *          the namee of the service (not {@code null}).
+   * @return a map of configuration type to set of property names which are
+   *         read-only
+   * @throws AmbariException
+   */
+  private Map<String, Set<String>> getReadOnlyProperties(StackId stackId, String serviceName)
+      throws AmbariException {
+    Map<String, Set<String>> readOnlyProperties = new HashMap<>();
+
+    Set<PropertyInfo> properties = new HashSet<>();
+
+    Set<PropertyInfo> stackProperties = m_ambariMetaInfoProvider.get().getStackProperties(
+        stackId.getStackName(), stackId.getStackVersion());
+
+    Set<PropertyInfo> serviceProperties = m_ambariMetaInfoProvider.get().getServiceProperties(
+        stackId.getStackName(), stackId.getStackVersion(), serviceName);
+
+    if (CollectionUtils.isNotEmpty(stackProperties)) {
+      properties.addAll(stackProperties);
+    }
+
+    if (CollectionUtils.isNotEmpty(serviceProperties)) {
+      properties.addAll(serviceProperties);
+    }
+
+    for (PropertyInfo property : properties) {
+      ValueAttributesInfo valueAttributes = property.getPropertyValueAttributes();
+      if (null != valueAttributes && valueAttributes.getReadOnly() == Boolean.TRUE) {
+        String type = ConfigHelper.fileNameToConfigType(property.getFilename());
+
+        // get the set of properties for this type, initializing it if needed
+        Set<String> readOnlyPropertiesForType = readOnlyProperties.get(type);
+        if (null == readOnlyPropertiesForType) {
+          readOnlyPropertiesForType = new HashSet<>();
+          readOnlyProperties.put(type, readOnlyPropertiesForType);
+        }
+
+        readOnlyPropertiesForType.add(property.getName());
+      }
+    }
+
+    return readOnlyProperties;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/56c3da78/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index 734fa96..39ab1d7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
@@ -33,6 +33,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
 import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
 import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.actionmanager.StageFactory;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.KerberosHelper;
@@ -56,8 +57,10 @@ import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
 import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.PropertyInfo;
 import org.apache.ambari.server.state.RepositoryType;
 import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentFactory;
 import org.apache.ambari.server.state.ServiceComponentHostFactory;
 import org.apache.ambari.server.state.ServiceFactory;
@@ -65,6 +68,7 @@ import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.UpgradeContextFactory;
 import org.apache.ambari.server.state.UpgradeHelper;
+import org.apache.ambari.server.state.ValueAttributesInfo;
 import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
 import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
 import org.apache.ambari.server.state.stack.OsFamily;
@@ -95,12 +99,15 @@ import com.google.inject.assistedinject.FactoryModuleBuilder;
 public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
 
   private Injector m_injector;
+  private AmbariMetaInfo m_metainfo;
 
   /**
    * @throws Exception
    */
   @Before
   public void before() throws Exception {
+    m_metainfo = createNiceMock(AmbariMetaInfo.class);
+
     MockModule mockModule = new MockModule();
 
     // create an injector which will inject the mocks
@@ -286,6 +293,134 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
     assertEquals("stack-220-original", expectedBarType.get("bar-property-2"));
   }
 
+  /**
+   * Tests that any read-only properties are not taken from the existing
+   * configs, but from the new stack value.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testReadOnlyPropertyIsTakenFromTargetStack() throws Exception {
+    RepositoryVersionEntity repoVersion211 = createNiceMock(RepositoryVersionEntity.class);
+    RepositoryVersionEntity repoVersion220 = createNiceMock(RepositoryVersionEntity.class);
+
+    StackId stack211 = new StackId("HDP-2.1.1");
+    StackId stack220 = new StackId("HDP-2.2.0");
+
+    String version211 = "2.1.1.0-1234";
+    String version220 = "2.2.0.0-1234";
+
+    expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
+    expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
+
+    expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
+    expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
+
+    String fooSite = "foo-site";
+    String fooPropertyName = "foo-property-1";
+    String serviceName = "ZOOKEEPER";
+
+    Map<String, Map<String, String>> stack211Configs = new HashMap<>();
+    Map<String, String> stack211FooType = new HashMap<>();
+    stack211Configs.put(fooSite, stack211FooType);
+    stack211FooType.put(fooPropertyName, "stack-211-original");
+
+    Map<String, Map<String, String>> stack220Configs = new HashMap<>();
+    Map<String, String> stack220FooType = new HashMap<>();
+    stack220Configs.put(fooSite, stack220FooType);
+    stack220FooType.put(fooPropertyName, "stack-220-original");
+
+    PropertyInfo readOnlyProperty = new PropertyInfo();
+    ValueAttributesInfo valueAttributesInfo = new ValueAttributesInfo();
+    valueAttributesInfo.setReadOnly(true);
+    readOnlyProperty.setName(fooPropertyName);
+    readOnlyProperty.setFilename(fooSite + ".xml");
+    readOnlyProperty.setPropertyValueAttributes(null);
+    readOnlyProperty.setPropertyValueAttributes(valueAttributesInfo);
+
+    expect(m_metainfo.getServiceProperties(stack211.getStackName(), stack211.getStackVersion(),
+        serviceName)).andReturn(Sets.newHashSet(readOnlyProperty)).atLeastOnce();
+
+    Map<String, String> existingFooType = new HashMap<>();
+
+    ClusterConfigEntity fooConfigEntity = createNiceMock(ClusterConfigEntity.class);
+
+    expect(fooConfigEntity.getType()).andReturn(fooSite);
+
+    Config fooConfig = createNiceMock(Config.class);
+
+    existingFooType.put(fooPropertyName, "my-foo-property-1");
+
+    expect(fooConfig.getType()).andReturn(fooSite).atLeastOnce();
+    expect(fooConfig.getProperties()).andReturn(existingFooType);
+
+    Map<String, DesiredConfig> desiredConfigurations = new HashMap<>();
+    desiredConfigurations.put(fooSite, null);
+
+    Service zookeeper = createNiceMock(Service.class);
+    expect(zookeeper.getName()).andReturn(serviceName).atLeastOnce();
+    expect(zookeeper.getServiceComponents()).andReturn(new HashMap<String, ServiceComponent>()).once();
+    zookeeper.setDesiredRepositoryVersion(repoVersion220);
+    expectLastCall().once();
+
+    Cluster cluster = createNiceMock(Cluster.class);
+    expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
+    expect(cluster.getDesiredStackVersion()).andReturn(stack220);
+    expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
+    expect(cluster.getDesiredConfigByType(fooSite)).andReturn(fooConfig);
+    expect(cluster.getService(serviceName)).andReturn(zookeeper);
+
+    ConfigHelper configHelper = m_injector.getInstance(ConfigHelper.class);
+
+    expect(configHelper.getDefaultProperties(stack211, serviceName)).andReturn(stack211Configs).anyTimes();
+    expect(configHelper.getDefaultProperties(stack220, serviceName)).andReturn(stack220Configs).anyTimes();
+
+    Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = EasyMock.newCapture();
+
+    configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
+        EasyMock.anyObject(StackId.class), EasyMock.anyObject(AmbariManagementController.class),
+        EasyMock.capture(expectedConfigurationsCapture), EasyMock.anyObject(String.class),
+        EasyMock.anyObject(String.class));
+
+    expectLastCall().once();
+
+    // mock the service config DAO and replay it
+    ServiceConfigEntity zookeeperServiceConfig = createNiceMock(ServiceConfigEntity.class);
+    expect(zookeeperServiceConfig.getClusterConfigEntities()).andReturn(
+        Lists.newArrayList(fooConfigEntity));
+
+    ServiceConfigDAO serviceConfigDAOMock = m_injector.getInstance(ServiceConfigDAO.class);
+    List<ServiceConfigEntity> latestServiceConfigs = Lists.newArrayList(zookeeperServiceConfig);
+    expect(serviceConfigDAOMock.getLastServiceConfigsForService(EasyMock.anyLong(),
+        eq(serviceName))).andReturn(latestServiceConfigs).once();
+
+    UpgradeContext context = createNiceMock(UpgradeContext.class);
+    expect(context.getCluster()).andReturn(cluster).atLeastOnce();
+    expect(context.getType()).andReturn(UpgradeType.ROLLING).atLeastOnce();
+    expect(context.getDirection()).andReturn(Direction.UPGRADE).atLeastOnce();
+    expect(context.getRepositoryVersion()).andReturn(repoVersion220).anyTimes();
+    expect(context.getSupportedServices()).andReturn(Sets.newHashSet(serviceName)).atLeastOnce();
+    expect(context.getSourceRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion211).atLeastOnce();
+    expect(context.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).atLeastOnce();
+    expect(context.getOrchestrationType()).andReturn(RepositoryType.STANDARD).anyTimes();
+    expect(context.getHostRoleCommandFactory()).andStubReturn(m_injector.getInstance(HostRoleCommandFactory.class));
+    expect(context.getRoleGraphFactory()).andStubReturn(m_injector.getInstance(RoleGraphFactory.class));
+
+    replayAll();
+
+    UpgradeHelper upgradeHelper = m_injector.getInstance(UpgradeHelper.class);
+    upgradeHelper.updateDesiredRepositoriesAndConfigs(context);
+
+    Map<String, Map<String, String>> expectedConfigurations = expectedConfigurationsCapture.getValue();
+    Map<String, String> expectedFooType = expectedConfigurations.get(fooSite);
+
+    // As the upgrade pack did not have any Flume updates, its configs should
+    // not be updated.
+    assertEquals(1, expectedConfigurations.size());
+    assertEquals(1, expectedFooType.size());
+
+    assertEquals("stack-220-original", expectedFooType.get(fooPropertyName));
+  }
 
   private class MockModule implements Module {
 
@@ -325,6 +460,7 @@ public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
       binder.bind(ServiceConfigDAO.class).toInstance(createNiceMock(ServiceConfigDAO.class));
       binder.install(new FactoryModuleBuilder().build(UpgradeContextFactory.class));
       binder.bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
+      binder.bind(AmbariMetaInfo.class).toInstance(m_metainfo);
 
       binder.requestStaticInjection(UpgradeResourceProvider.class);
     }


[38/50] [abbrv] ambari git commit: AMBARI-21996 Provide maintenance mode off count for components (dsen)

Posted by jl...@apache.org.
AMBARI-21996 Provide maintenance mode off count for components (dsen)


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 986a65dbf4fbf36dac7073418ef368c2c207b123
Parents: 311c7bb
Author: Dmytro Sen <ds...@apache.org>
Authored: Mon Sep 25 16:32:46 2017 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Mon Sep 25 16:32:46 2017 +0300

----------------------------------------------------------------------
 .../internal/ComponentResourceProvider.java     |  4 ++++
 .../server/state/ServiceComponentImpl.java      | 25 ++++++++++++++++++++
 .../internal/ComponentResourceProviderTest.java |  6 +++++
 .../server/state/ServiceComponentTest.java      | 21 +++++++++++++---
 4 files changed, 53 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/986a65db/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index ebbf169..2e86b2d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -85,6 +85,8 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
   protected static final String COMPONENT_TOTAL_COUNT_PROPERTY_ID     = "ServiceComponentInfo/total_count";
   protected static final String COMPONENT_STARTED_COUNT_PROPERTY_ID   = "ServiceComponentInfo/started_count";
   protected static final String COMPONENT_INSTALLED_COUNT_PROPERTY_ID = "ServiceComponentInfo/installed_count";
+  protected static final String COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID
+                                                                      = "ServiceComponentInfo/installed_and_maintenance_off_count";
   protected static final String COMPONENT_INIT_COUNT_PROPERTY_ID      = "ServiceComponentInfo/init_count";
   protected static final String COMPONENT_UNKNOWN_COUNT_PROPERTY_ID   = "ServiceComponentInfo/unknown_count";
   protected static final String COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID = "ServiceComponentInfo/install_failed_count";
@@ -124,6 +126,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
     PROPERTY_IDS.add(COMPONENT_TOTAL_COUNT_PROPERTY_ID);
     PROPERTY_IDS.add(COMPONENT_STARTED_COUNT_PROPERTY_ID);
     PROPERTY_IDS.add(COMPONENT_INSTALLED_COUNT_PROPERTY_ID);
+    PROPERTY_IDS.add(COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID);
 
     PROPERTY_IDS.add(COMPONENT_INIT_COUNT_PROPERTY_ID);
     PROPERTY_IDS.add(COMPONENT_UNKNOWN_COUNT_PROPERTY_ID);
@@ -220,6 +223,7 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
       setResourceProperty(resource, COMPONENT_TOTAL_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("totalCount"), requestedIds);
       setResourceProperty(resource, COMPONENT_STARTED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("startedCount"), requestedIds);
       setResourceProperty(resource, COMPONENT_INSTALLED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installedCount"), requestedIds);
+      setResourceProperty(resource, COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installedAndMaintenanceOffCount"), requestedIds);
       setResourceProperty(resource, COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installFailedCount"), requestedIds);
       setResourceProperty(resource, COMPONENT_INIT_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("initCount"), requestedIds);
       setResourceProperty(resource, COMPONENT_UNKNOWN_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("unknownCount"), requestedIds);

http://git-wip-us.apache.org/repos/asf/ambari/blob/986a65db/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 5f85e38..22c97ed 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -31,6 +31,7 @@ import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.ObjectNotFoundException;
 import org.apache.ambari.server.ServiceComponentHostNotFoundException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.MaintenanceStateHelper;
 import org.apache.ambari.server.controller.ServiceComponentResponse;
 import org.apache.ambari.server.events.ServiceComponentRecoveryChangedEvent;
 import org.apache.ambari.server.events.listeners.upgrade.StackVersionListener;
@@ -97,6 +98,9 @@ public class ServiceComponentImpl implements ServiceComponent {
   @Inject
   private HostComponentStateDAO hostComponentDAO;
 
+  @Inject
+  private MaintenanceStateHelper maintenanceStateHelper;
+
   @AssistedInject
   public ServiceComponentImpl(@Assisted Service service, @Assisted String componentName,
       AmbariMetaInfo ambariMetaInfo,
@@ -724,10 +728,31 @@ public class ServiceComponentImpl implements ServiceComponent {
     return count;
   }
 
+  /**
+   * Count the ServiceComponentHosts that have given state and are effectively not in maintenanceMode
+   * @param state
+   * @return
+   */
+  private int getMaintenanceOffSCHCountByState(State state) {
+    int count = 0;
+    for (ServiceComponentHost sch : hostComponents.values()) {
+      try {
+        MaintenanceState effectiveMaintenanceState = maintenanceStateHelper.getEffectiveState(sch, sch.getHost());
+        if (sch.getState() == state && effectiveMaintenanceState == MaintenanceState.OFF) {
+          count++;
+        }
+      } catch (AmbariException e) {
+        e.printStackTrace();
+      }
+    }
+    return count;
+  }
+
   private Map <String, Integer> getServiceComponentStateCount() {
     Map <String, Integer> serviceComponentStateCountMap = new HashMap<>();
     serviceComponentStateCountMap.put("startedCount", getSCHCountByState(State.STARTED));
     serviceComponentStateCountMap.put("installedCount", getSCHCountByState(State.INSTALLED));
+    serviceComponentStateCountMap.put("installedAndMaintenanceOffCount", getMaintenanceOffSCHCountByState(State.INSTALLED));
     serviceComponentStateCountMap.put("installFailedCount", getSCHCountByState(State.INSTALL_FAILED));
     serviceComponentStateCountMap.put("initCount", getSCHCountByState(State.INIT));
     serviceComponentStateCountMap.put("unknownCount", getSCHCountByState(State.UNKNOWN));

http://git-wip-us.apache.org/repos/asf/ambari/blob/986a65db/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index 80cd1da..110e359 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -217,6 +217,7 @@ public class ComponentResourceProviderTest {
     Map <String, Integer> serviceComponentStateCountMap = new HashMap<>();
     serviceComponentStateCountMap.put("startedCount", 1);
     serviceComponentStateCountMap.put("installedCount", 0);
+    serviceComponentStateCountMap.put("installedAndMaintenanceOffCount", 0);
     serviceComponentStateCountMap.put("installFailedCount", 0);
     serviceComponentStateCountMap.put("initCount", 0);
     serviceComponentStateCountMap.put("unknownCount", 1);
@@ -280,6 +281,7 @@ public class ComponentResourceProviderTest {
     propertyIds.add(ComponentResourceProvider.COMPONENT_TOTAL_COUNT_PROPERTY_ID);
     propertyIds.add(ComponentResourceProvider.COMPONENT_STARTED_COUNT_PROPERTY_ID);
     propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALLED_COUNT_PROPERTY_ID);
+    propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID);
     propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID);
     propertyIds.add(ComponentResourceProvider.COMPONENT_INIT_COUNT_PROPERTY_ID);
     propertyIds.add(ComponentResourceProvider.COMPONENT_UNKNOWN_COUNT_PROPERTY_ID);
@@ -311,6 +313,8 @@ public class ComponentResourceProviderTest {
       Assert.assertEquals(0, resource.getPropertyValue(
         ComponentResourceProvider.COMPONENT_INSTALLED_COUNT_PROPERTY_ID));
       Assert.assertEquals(0, resource.getPropertyValue(
+        ComponentResourceProvider.COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID));
+      Assert.assertEquals(0, resource.getPropertyValue(
           ComponentResourceProvider.COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID));
       Assert.assertEquals(0, resource.getPropertyValue(
           ComponentResourceProvider.COMPONENT_INIT_COUNT_PROPERTY_ID));
@@ -379,6 +383,7 @@ public class ComponentResourceProviderTest {
     Map <String, Integer> serviceComponentStateCountMap = new HashMap<>();
     serviceComponentStateCountMap.put("startedCount", 0);
     serviceComponentStateCountMap.put("installedCount", 1);
+    serviceComponentStateCountMap.put("installedAndMaintenanceOffCount", 0);
     serviceComponentStateCountMap.put("installFailedCount", 0);
     serviceComponentStateCountMap.put("initCount", 0);
     serviceComponentStateCountMap.put("unknownCount", 0);
@@ -691,6 +696,7 @@ public class ComponentResourceProviderTest {
     Map <String, Integer> serviceComponentStateCountMap = new HashMap<>();
     serviceComponentStateCountMap.put("startedCount", 0);
     serviceComponentStateCountMap.put("installedCount", 1);
+    serviceComponentStateCountMap.put("installedAndMaintenanceOffCount", 0);
     serviceComponentStateCountMap.put("installFailedCount", 0);
     serviceComponentStateCountMap.put("initCount", 0);
     serviceComponentStateCountMap.put("unknownCount", 0);

http://git-wip-us.apache.org/repos/asf/ambari/blob/986a65db/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index 6320f35..c753f49 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -273,15 +273,28 @@ public class ServiceComponentTest {
     service.addServiceComponent(component);
 
     addHostToCluster("h1", service.getCluster().getClusterName());
+    addHostToCluster("h2", service.getCluster().getClusterName());
+    addHostToCluster("h3", service.getCluster().getClusterName());
     ServiceComponentHost sch =
       serviceComponentHostFactory.createNew(component, "h1");
+    ServiceComponentHost sch2 =
+      serviceComponentHostFactory.createNew(component, "h2");
+    ServiceComponentHost sch3 =
+      serviceComponentHostFactory.createNew(component, "h3");
     sch.setState(State.INSTALLED);
+    sch2.setState(State.INSTALLED);
+    sch3.setState(State.INSTALLED);
 
     Map<String, ServiceComponentHost> compHosts =
       new HashMap<>();
     compHosts.put("h1", sch);
+    compHosts.put("h2", sch2);
+    compHosts.put("h3", sch3);
     component.addServiceComponentHosts(compHosts);
-    Assert.assertEquals(1, component.getServiceComponentHosts().size());
+    Assert.assertEquals(3, component.getServiceComponentHosts().size());
+
+    component.getServiceComponentHost("h2").setMaintenanceState(MaintenanceState.ON);
+    sch3.setMaintenanceState(MaintenanceState.ON);
 
     ServiceComponent sc = service.getServiceComponent(componentName);
     Assert.assertNotNull(sc);
@@ -298,9 +311,11 @@ public class ServiceComponentTest {
     int totalCount = r.getServiceComponentStateCount().get("totalCount");
     int startedCount = r.getServiceComponentStateCount().get("startedCount");
     int installedCount = r.getServiceComponentStateCount().get("installedCount");
-    Assert.assertEquals(1, totalCount);
+    int installedAndMaintenanceOffCount = r.getServiceComponentStateCount().get("installedAndMaintenanceOffCount");
+    Assert.assertEquals(3, totalCount);
     Assert.assertEquals(0, startedCount);
-    Assert.assertEquals(1, installedCount);
+    Assert.assertEquals(3, installedCount);
+    Assert.assertEquals(1, installedAndMaintenanceOffCount);
 
     // TODO check configs
     // r.getConfigVersions()


[15/50] [abbrv] ambari git commit: AMBARI-21919. Kerberos identity references should use the "reference" attribute (rlevas)

Posted by jl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
index c03b400..d0d5dac 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
@@ -55,8 +55,8 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariManagementControllerImpl;
-import org.apache.ambari.server.controller.KerberosHelper;
 import org.apache.ambari.server.controller.MaintenanceStateHelper;
+import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
 import org.apache.ambari.server.orm.dao.ArtifactDAO;
@@ -74,6 +74,7 @@ import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
+import org.apache.ambari.server.state.kerberos.KerberosIdentityDescriptor;
 import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.apache.commons.io.FileUtils;
@@ -131,41 +132,16 @@ public class UpgradeCatalog260Test {
   @Mock(type = MockType.NICE)
   private OsFamily osFamily;
 
-  @Mock(type = MockType.NICE)
-  private KerberosHelper kerberosHelper;
-
-  @Mock(type = MockType.NICE)
-  private ActionManager actionManager;
-
-  @Mock(type = MockType.NICE)
-  private Config config;
-
-  @Mock(type = MockType.STRICT)
-  private Service service;
-
-  @Mock(type = MockType.NICE)
-  private Clusters clusters;
-
-  @Mock(type = MockType.NICE)
-  private Cluster cluster;
-
-  @Mock(type = MockType.NICE)
-  private Injector injector;
-
   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
   @Before
   public void init() {
-    reset(entityManagerProvider, injector);
+    reset(entityManagerProvider);
 
     expect(entityManagerProvider.get()).andReturn(entityManager).anyTimes();
 
-    expect(injector.getInstance(Gson.class)).andReturn(null).anyTimes();
-    expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).anyTimes();
-    expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper).anyTimes();
-
-    replay(entityManagerProvider, injector);
+    replay(entityManagerProvider);
   }
 
   @After
@@ -227,17 +203,7 @@ public class UpgradeCatalog260Test {
 
     replay(dbAccessor, configuration, connection, statement, resultSet);
 
-    Module module = new Module() {
-      @Override
-      public void configure(Binder binder) {
-        binder.bind(DBAccessor.class).toInstance(dbAccessor);
-        binder.bind(OsFamily.class).toInstance(osFamily);
-        binder.bind(EntityManager.class).toInstance(entityManager);
-        binder.bind(Configuration.class).toInstance(configuration);
-      }
-    };
-
-    Injector injector = Guice.createInjector(module);
+    Injector injector = getInjector();
     UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.executeDDLUpdates();
 
@@ -261,7 +227,7 @@ public class UpgradeCatalog260Test {
     expectLastCall().once();
   }
 
-  public  void expectRenameServiceDeletedColumn(Capture<DBColumnInfo> unmapped) throws SQLException {
+  public void expectRenameServiceDeletedColumn(Capture<DBColumnInfo> unmapped) throws SQLException {
     dbAccessor.renameColumn(eq(UpgradeCatalog260.CLUSTER_CONFIG_TABLE), eq(UpgradeCatalog260.SERVICE_DELETED_COLUMN), capture(unmapped));
     expectLastCall().once();
   }
@@ -355,7 +321,7 @@ public class UpgradeCatalog260Test {
   }
 
   public void expectUpdateUpgradeTable(Capture<DBColumnInfo> rvid,
-      Capture<DBColumnInfo> orchestration, Capture<DBColumnInfo> revertAllowed)
+                                       Capture<DBColumnInfo> orchestration, Capture<DBColumnInfo> revertAllowed)
       throws SQLException {
 
     dbAccessor.clearTable(eq(UpgradeCatalog260.UPGRADE_TABLE));
@@ -557,17 +523,7 @@ public class UpgradeCatalog260Test {
     expectLastCall().once();
     replay(dbAccessor, configuration, connection, statement, resultSet);
 
-    Module module = new Module() {
-      @Override
-      public void configure(Binder binder) {
-        binder.bind(DBAccessor.class).toInstance(dbAccessor);
-        binder.bind(OsFamily.class).toInstance(osFamily);
-        binder.bind(EntityManager.class).toInstance(entityManager);
-        binder.bind(Configuration.class).toInstance(configuration);
-      }
-    };
-
-    Injector injector = Guice.createInjector(module);
+    Injector injector = getInjector();
     UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.executePreDMLUpdates();
 
@@ -605,27 +561,17 @@ public class UpgradeCatalog260Test {
   @Test
   public void testEnsureZeppelinProxyUserConfigs() throws AmbariException {
 
-    final Clusters clusters = createMock(Clusters.class);
+    Injector injector = getInjector();
+
+    final Clusters clusters = injector.getInstance(Clusters.class);
     final Cluster cluster = createMock(Cluster.class);
     final Config zeppelinEnvConf = createMock(Config.class);
     final Config coreSiteConf = createMock(Config.class);
     final Config coreSiteConfNew = createMock(Config.class);
-    final AmbariManagementController controller = createMock(AmbariManagementController.class);
+    final AmbariManagementController controller = injector.getInstance(AmbariManagementController.class);
 
     Capture<? extends Map<String, String>> captureCoreSiteConfProperties = newCapture();
 
-    Module module = new Module() {
-      @Override
-      public void configure(Binder binder) {
-        binder.bind(DBAccessor.class).toInstance(dbAccessor);
-        binder.bind(OsFamily.class).toInstance(osFamily);
-        binder.bind(EntityManager.class).toInstance(entityManager);
-        binder.bind(Configuration.class).toInstance(configuration);
-        binder.bind(Clusters.class).toInstance(clusters);
-        binder.bind(AmbariManagementController.class).toInstance(controller);
-      }
-    };
-
     expect(clusters.getClusters()).andReturn(Collections.singletonMap("c1", cluster)).once();
 
     expect(cluster.getClusterName()).andReturn("c1").atLeastOnce();
@@ -648,7 +594,6 @@ public class UpgradeCatalog260Test {
 
     replay(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, controller);
 
-    Injector injector = Guice.createInjector(module);
     UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.ensureZeppelinProxyUserConfigs();
 
@@ -662,6 +607,8 @@ public class UpgradeCatalog260Test {
   @Test
   public void testUpdateKerberosDescriptorArtifact() throws Exception {
 
+    Injector injector = getInjector();
+
     URL systemResourceURL = ClassLoader.getSystemResource("kerberos/test_kerberos_descriptor_ranger_kms.json");
     Assert.assertNotNull(systemResourceURL);
 
@@ -672,28 +619,71 @@ public class UpgradeCatalog260Test {
     serviceDescriptor = kerberosDescriptor.getService("RANGER_KMS");
     Assert.assertNotNull(serviceDescriptor);
     Assert.assertNotNull(serviceDescriptor.getIdentity("/smokeuser"));
+    Assert.assertNotNull(serviceDescriptor.getIdentity("/spnego"));
 
     KerberosComponentDescriptor componentDescriptor;
     componentDescriptor = serviceDescriptor.getComponent("RANGER_KMS_SERVER");
     Assert.assertNotNull(componentDescriptor);
     Assert.assertNotNull(componentDescriptor.getIdentity("/smokeuser"));
+    Assert.assertNotNull(componentDescriptor.getIdentity("/spnego"));
+    Assert.assertNotNull(componentDescriptor.getIdentity("/spnego").getPrincipalDescriptor());
+    Assert.assertEquals("invalid_name@${realm}", componentDescriptor.getIdentity("/spnego").getPrincipalDescriptor().getValue());
 
     ArtifactEntity artifactEntity = createMock(ArtifactEntity.class);
 
     expect(artifactEntity.getArtifactData()).andReturn(kerberosDescriptor.toMap()).once();
 
     Capture<Map<String, Object>> captureMap = newCapture();
+    expect(artifactEntity.getForeignKeys()).andReturn(Collections.singletonMap("cluster", "2"));
     artifactEntity.setArtifactData(capture(captureMap));
     expectLastCall().once();
 
     ArtifactDAO artifactDAO = createMock(ArtifactDAO.class);
     expect(artifactDAO.merge(artifactEntity)).andReturn(artifactEntity).atLeastOnce();
 
-    replay(artifactDAO, artifactEntity);
+    Map<String, String> properties = new HashMap<>();
+    properties.put("ranger.ks.kerberos.principal", "correct_value@EXAMPLE.COM");
+    properties.put("xasecure.audit.jaas.Client.option.principal", "wrong_value@EXAMPLE.COM");
+
+    Config config = createMock(Config.class);
+    expect(config.getProperties()).andReturn(properties).anyTimes();
+    expect(config.getPropertiesAttributes()).andReturn(Collections.<String, Map<String, String>>emptyMap()).anyTimes();
+    expect(config.getTag()).andReturn("version1").anyTimes();
+    expect(config.getType()).andReturn("ranger-kms-audit").anyTimes();
+
+    Config newConfig = createMock(Config.class);
+    expect(newConfig.getTag()).andReturn("version2").anyTimes();
+    expect(newConfig.getType()).andReturn("ranger-kms-audit").anyTimes();
+
+    ServiceConfigVersionResponse response = createMock(ServiceConfigVersionResponse.class);
+
+    StackId stackId = createMock(StackId.class);
+
+    Cluster cluster = createMock(Cluster.class);
+    expect(cluster.getDesiredStackVersion()).andReturn(stackId).anyTimes();
+    expect(cluster.getDesiredConfigByType("dbks-site")).andReturn(config).anyTimes();
+    expect(cluster.getDesiredConfigByType("ranger-kms-audit")).andReturn(config).anyTimes();
+    expect(cluster.getConfigsByType("ranger-kms-audit")).andReturn(Collections.singletonMap("version1", config)).anyTimes();
+    expect(cluster.getServiceByConfigType("ranger-kms-audit")).andReturn("RANGER").anyTimes();
+    expect(cluster.getClusterName()).andReturn("cl1").anyTimes();
+    expect(cluster.getConfig(eq("ranger-kms-audit"), anyString())).andReturn(newConfig).once();
+    expect(cluster.addDesiredConfig("ambari-upgrade", Collections.singleton(newConfig), "Updated ranger-kms-audit during Ambari Upgrade from 2.5.2 to 2.6.0.")).andReturn(response).once();
+
+    final Clusters clusters = injector.getInstance(Clusters.class);
+    expect(clusters.getCluster(2L)).andReturn(cluster).anyTimes();
 
-    UpgradeCatalog260 upgradeCatalog260 = createMockBuilder(UpgradeCatalog260.class).createMock();
+    Capture<? extends Map<String, String>> captureProperties = newCapture();
+
+    AmbariManagementController controller = injector.getInstance(AmbariManagementController.class);
+    expect(controller.createConfig(eq(cluster), eq(stackId), eq("ranger-kms-audit"), capture(captureProperties), anyString(), anyObject(Map.class)))
+        .andReturn(null)
+        .once();
+
+    replay(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, response, controller, stackId);
+
+    UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.updateKerberosDescriptorArtifact(artifactDAO, artifactEntity);
-    verify(artifactDAO, artifactEntity);
+    verify(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, response, controller, stackId);
 
     KerberosDescriptor kerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(captureMap.getValue());
     Assert.assertNotNull(kerberosDescriptorUpdated);
@@ -701,10 +691,27 @@ public class UpgradeCatalog260Test {
     Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("/smokeuser"));
     Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("/smokeuser"));
 
+    KerberosIdentityDescriptor identity;
+
+    Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("/spnego"));
+    identity = kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("ranger_kms_spnego");
+    Assert.assertNotNull(identity);
+    Assert.assertEquals("/spnego", identity.getReference());
+
+    Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("/spnego"));
+    identity = kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("ranger_kms_ranger_kms_server_spnego");
+    Assert.assertNotNull(identity);
+    Assert.assertEquals("/spnego", identity.getReference());
+    Assert.assertNotNull(identity.getPrincipalDescriptor());
+    Assert.assertNull(identity.getPrincipalDescriptor().getValue());
+
+    Assert.assertTrue(captureProperties.hasCaptured());
+    Map<String, String> newProperties = captureProperties.getValue();
+    Assert.assertEquals("correct_value@EXAMPLE.COM", newProperties.get("xasecure.audit.jaas.Client.option.principal"));
   }
 
   @Test
-  public void testUpdateAmsConfigs() throws Exception{
+  public void testUpdateAmsConfigs() throws Exception {
 
     Map<String, String> oldProperties = new HashMap<String, String>() {
       {
@@ -832,5 +839,19 @@ public class UpgradeCatalog260Test {
            verify(clusters, cluster, controller, widgetDAO, widgetEntity, stackInfo, serviceInfo);
        }
 
+  private Injector getInjector() {
+
+    return Guice.createInjector(new Module() {
+      @Override
+      public void configure(Binder binder) {
+        binder.bind(DBAccessor.class).toInstance(dbAccessor);
+        binder.bind(OsFamily.class).toInstance(osFamily);
+        binder.bind(EntityManager.class).toInstance(entityManager);
+        binder.bind(Configuration.class).toInstance(configuration);
+        binder.bind(Clusters.class).toInstance(createMock(Clusters.class));
+        binder.bind(AmbariManagementController.class).toInstance(createMock(AmbariManagementController.class));
+      }
+    });
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_ranger_kms.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_ranger_kms.json b/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_ranger_kms.json
index d7e048f..e17e121 100644
--- a/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_ranger_kms.json
+++ b/ambari-server/src/test/resources/kerberos/test_kerberos_descriptor_ranger_kms.json
@@ -65,6 +65,7 @@
             {
               "name": "/spnego",
               "principal": {
+                "value" : "invalid_name@${realm}",
                 "configuration": "kms-site/hadoop.kms.authentication.signer.secret.provider.zookeeper.kerberos.principal"
               },
               "keytab": {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/ambari-server/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json b/ambari-server/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
index a555bb5..ecbdfe9 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
+++ b/ambari-server/src/test/resources/stacks/HDP/2.0.8/services/HDFS/kerberos.json
@@ -4,7 +4,8 @@
       "name": "HDFS",
       "identities": [
         {
-          "name": "/spnego",
+          "name": "hdfs_spnego",
+          "reference": "/spnego",
           "principal": {
             "configuration": "hdfs-site/dfs.web.authentication.kerberos.principal"
           },
@@ -13,7 +14,8 @@
           }
         },
         {
-          "name": "/smokeuser"
+          "name": "hdfs_smokeuser",
+          "reference": "/smokeuser"
         },
         {
           "name": "hdfs",
@@ -63,7 +65,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.namenode.kerberos.internal.spnego.principal"
               }
@@ -128,7 +131,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hdfs_secondary_namenode_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hdfs-site/dfs.secondary.namenode.kerberos.internal.spnego.principal"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/contrib/management-packs/hdf-ambari-mpack/src/main/resources/common-services/NIFI/1.0.0/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/common-services/NIFI/1.0.0/kerberos.json b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/common-services/NIFI/1.0.0/kerberos.json
index 74d84e6..0823b5e 100644
--- a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/common-services/NIFI/1.0.0/kerberos.json
+++ b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/common-services/NIFI/1.0.0/kerberos.json
@@ -7,7 +7,8 @@
           "name": "NIFI_MASTER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "nifi_nifi_master_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "nifi-properties/nifi.kerberos.spnego.principal"
               },
@@ -38,7 +39,8 @@
               }
             },
             {
-              "name": "/NIFI/NIFI_MASTER/nifi_principal",
+              "name": "nifi_nifi_master_nifi_principal",
+              "reference": "/NIFI/NIFI_MASTER/nifi_principal",
               "principal": {
                 "configuration": "ranger-nifi-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/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 aa351d1..e1e814f 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
@@ -4,7 +4,8 @@
       "name": "KAFKA",
       "identities": [
         {
-          "name": "/smokeuser"
+          "name": "kafka_smokeuser",
+          "refernce": "/smokeuser"
         }
       ],
       "configurations": [
@@ -56,7 +57,8 @@
               }
             },
             {
-              "name": "/KAFKA/KAFKA_BROKER/kafka_broker",
+              "name": "kafka_kafka_broker_kafka_broker",
+              "reference": "/KAFKA/KAFKA_BROKER/kafka_broker",
               "principal": {
                 "configuration": "ranger-kafka-audit/xasecure.audit.jaas.Client.option.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/contrib/management-packs/microsoft-r_mpack/src/main/resources/common-services/MICROSOFT_R_SERVER/8.0.5/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/microsoft-r_mpack/src/main/resources/common-services/MICROSOFT_R_SERVER/8.0.5/kerberos.json b/contrib/management-packs/microsoft-r_mpack/src/main/resources/common-services/MICROSOFT_R_SERVER/8.0.5/kerberos.json
index 6e4aa4c..0d4e621 100644
--- a/contrib/management-packs/microsoft-r_mpack/src/main/resources/common-services/MICROSOFT_R_SERVER/8.0.5/kerberos.json
+++ b/contrib/management-packs/microsoft-r_mpack/src/main/resources/common-services/MICROSOFT_R_SERVER/8.0.5/kerberos.json
@@ -4,10 +4,12 @@
       "name": "MICROSOFT_R_SERVER",
       "identities": [
         {
-          "name": "/HDFS/NAMENODE/hdfs"
+          "name": "microsoft_r_server_hdfs",
+          "reference": "/HDFS/NAMENODE/hdfs"
         },
         {
-          "name": "/smokeuser"
+          "name": "microsoft_r_server_smokeuser",
+          "reference": "/smokeuser"
         }
       ]
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/HIVE/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/HIVE/kerberos.json b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/HIVE/kerberos.json
index 4b31f7a..ad6fd4b 100755
--- a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/HIVE/kerberos.json
+++ b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/HIVE/kerberos.json
@@ -4,10 +4,12 @@
       "name": "HIVE",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "hive_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "hive_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -44,7 +46,8 @@
           "name": "HIVE_METASTORE",
           "identities": [
             {
-              "name": "/HIVE/HIVE_SERVER/hive_server_hive",
+              "name": "hive_hive_metastore_hive",
+              "reference": "/HIVE/HIVE_SERVER/hive_server_hive",
               "principal": {
                 "configuration": "hive-site/hive.metastore.kerberos.principal"
               },
@@ -58,7 +61,8 @@
           "name": "HIVE_SERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "hive_hive_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "hive_server_hive",
@@ -92,7 +96,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "hive_hive_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "hive-site/hive.server2.authentication.spnego.principal"
               },
@@ -116,7 +121,8 @@
           "name": "WEBHCAT_SERVER",
           "identities": [
             {
-              "name": "/spnego",
+              "name": "hive_webhcat_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "webhcat-site/templeton.kerberos.principal"
               },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2a060210/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/YARN/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/YARN/kerberos.json b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/YARN/kerberos.json
index 4093431..647e4fc 100755
--- a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/YARN/kerberos.json
+++ b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/YARN/kerberos.json
@@ -4,10 +4,12 @@
       "name": "YARN",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "yarn_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "yarn_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "configurations": [
@@ -67,7 +69,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_nodemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.nodemanager.webapp.spnego-principal"
               },
@@ -109,7 +112,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_resourcemanager_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.resourcemanager.webapp.spnego-principal"
               },
@@ -144,7 +148,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "yarn_app_timeline_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "yarn-site/yarn.timeline-service.http-authentication.kerberos.principal"
               },
@@ -153,7 +158,8 @@
               }
             },
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "yarn_app_timelineserver_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             }
           ]
         }
@@ -163,10 +169,12 @@
       "name": "MAPREDUCE2",
       "identities": [
         {
-          "name": "/spnego"
+          "name": "mapreduce2_spnego",
+          "reference": "/spnego"
         },
         {
-          "name": "/smokeuser"
+          "name": "mapreduce2_smokeuser",
+          "reference": "/smokeuser"
         }
       ],
       "components": [
@@ -174,7 +182,8 @@
           "name": "HISTORYSERVER",
           "identities": [
             {
-              "name": "/HDFS/NAMENODE/hdfs"
+              "name": "mapreduce2_history_server_hdfs",
+              "reference": "/HDFS/NAMENODE/hdfs"
             },
             {
               "name": "history_server_jhs",
@@ -198,7 +207,8 @@
               }
             },
             {
-              "name": "/spnego",
+              "name": "mapreduce2_history_server_spnego",
+              "reference": "/spnego",
               "principal": {
                 "configuration": "mapred-site/mapreduce.jobhistory.webapp.spnego-principal"
               },


[48/50] [abbrv] ambari git commit: AMBARI-22015. livy2 interpreter errors (unable to impersonate users/ LLAP or Hive CNF issue) due to missing proxy configs. (Mingjie Tang via Swapan Shridhar).

Posted by jl...@apache.org.
AMBARI-22015. livy2 interpreter errors (unable to impersonate users/ LLAP or Hive CNF issue) due to missing proxy configs. (Mingjie Tang via Swapan Shridhar).


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

Branch: refs/heads/branch-feature-AMBARI-14714
Commit: 12c9ca7e2fafd092149081971bcfcbbb1e49adf4
Parents: 4c49b4b
Author: Swapan Shridhar <ss...@hortonworks.com>
Authored: Mon Sep 25 15:37:41 2017 -0700
Committer: Swapan Shridhar <ss...@hortonworks.com>
Committed: Mon Sep 25 15:37:41 2017 -0700

----------------------------------------------------------------------
 .../main/resources/stacks/ODPi/2.0/services/stack_advisor.py  | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/12c9ca7e/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/stack_advisor.py b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/stack_advisor.py
index 5f70db2..418d0c0 100755
--- a/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/stack_advisor.py
+++ b/contrib/management-packs/odpi-ambari-mpack/src/main/resources/stacks/ODPi/2.0/services/stack_advisor.py
@@ -271,6 +271,13 @@ class ODPi20StackAdvisor(DefaultStackAdvisor):
         if not livyUser in users and livyUser is not None:
           users[livyUser] = {"propertyHosts" : "*","propertyGroups" : "*", "config" : "livy-env", "propertyName" : "livy_user"}
 
+    if "SPARK2" in servicesList:
+      livyUser = None
+      if "livy2-env" in services["configurations"] and "livy_user" in services["configurations"]["livy2-env"]["properties"]:
+        livyUser = services["configurations"]["livy2-env"]["properties"]["livy_user"]
+        if not livyUser in users and livyUser is not None:
+          users[livy2User] = {"propertyHosts" : "*","propertyGroups" : "*", "config" : "livy2-env", "propertyName" : "livy_user"}
+
     putCoreSiteProperty = self.putProperty(configurations, "core-site", services)
     putCoreSitePropertyAttribute = self.putPropertyAttribute(configurations, "core-site")