Merge remote-tracking branch 'remotes/origin/trunk' into branch-3.0-perf
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/af30ab40 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/af30ab40 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/af30ab40 Branch: refs/heads/branch-3.0-perf Commit: af30ab40972022ce4bff6a32b4ebdd29a33ef95d Parents: 7da02bb b4eddc9 Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Thu Oct 19 15:54:09 2017 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Thu Oct 19 15:54:09 2017 +0300 ---------------------------------------------------------------------- .../ui/admin-web/app/scripts/i18n.config.js | 2 +- ambari-agent/pom.xml | 4 +- .../main/python/ambari_agent/AmbariConfig.py | 74 +- .../ambari_agent/CustomServiceOrchestrator.py | 6 +- .../src/main/python/ambari_agent/FileCache.py | 5 +- .../main/python/ambari_agent/ProcessHelper.py | 71 -- .../src/main/python/ambari_agent/StatusCheck.py | 142 ---- .../src/main/python/ambari_agent/main.py | 12 +- .../test/python/ambari_agent/TestFileCache.py | 4 +- .../test/python/ambari_agent/TestLiveStatus.py | 5 +- .../src/test/python/ambari_agent/TestMain.py | 13 +- .../python/ambari_agent/TestProcessHelper.py | 70 -- .../test/python/ambari_agent/TestSecurity.py | 1 - .../test/python/ambari_agent/TestStatusCheck.py | 180 ----- .../resource_management/TestPackageResource.py | 6 +- .../python/resource_management/TestScript.py | 26 +- .../core/providers/package/__init__.py | 4 +- .../core/providers/package/apt.py | 35 +- .../core/providers/package/choco.py | 8 +- .../core/providers/package/yumrpm.py | 10 +- .../core/providers/package/zypper.py | 7 +- .../core/resources/packaging.py | 14 +- .../libraries/functions/component_version.py | 26 +- .../libraries/functions/conf_select.py | 362 +++------ .../libraries/functions/repository_util.py | 8 +- .../libraries/functions/stack_select.py | 69 +- .../libraries/script/script.py | 88 ++- ambari-infra/ambari-infra-assembly/pom.xml | 12 + .../src/main/package/deb/manager/postinst | 5 + .../src/main/package/deb/solr-client/postinst | 13 + .../src/main/package/rpm/manager/postinstall.sh | 20 + .../main/package/rpm/solr-client/postinstall.sh | 28 + .../org/apache/ambari/infra/InfraManager.java | 4 +- .../src/main/resources/infraManager.sh | 10 +- ambari-infra/ambari-infra-solr-client/build.xml | 3 + .../src/main/python/solrDataManager.py | 0 .../src/main/resources/solrIndexHelper.sh | 5 +- .../ambari-logsearch-assembly/pom.xml | 4 +- .../ambari-logsearch-logfeeder/pom.xml | 4 + .../ambari-logsearch-server/pom.xml | 4 + .../ambari-logsearch-web/package.json | 19 +- ambari-logsearch/ambari-logsearch-web/pom.xml | 20 +- .../ambari-logsearch-web/src/app/app.module.ts | 8 + .../src/app/classes/active-service-log-entry.ts | 23 + .../src/app/classes/histogram-options.ts | 36 + .../src/app/classes/list-item.class.ts | 25 - .../src/app/classes/list-item.ts | 26 + .../src/app/classes/models/app-settings.ts | 27 + .../src/app/classes/models/app-state.ts | 43 + .../src/app/classes/models/audit-log-field.ts | 225 ++++++ .../src/app/classes/models/audit-log.ts | 46 ++ .../src/app/classes/models/bar-graph.ts | 24 + .../src/app/classes/models/common-entry.ts | 22 + .../src/app/classes/models/count.ts | 22 + .../src/app/classes/models/filter.ts | 25 + .../src/app/classes/models/graph.ts | 23 + .../src/app/classes/models/log-field.ts | 27 + .../src/app/classes/models/log.ts | 38 + .../src/app/classes/models/node.ts | 30 + .../src/app/classes/models/service-log-field.ts | 107 +++ .../src/app/classes/models/service-log.ts | 27 + .../app/classes/models/solr-collection-state.ts | 23 + .../src/app/classes/models/store.ts | 180 +++++ .../src/app/classes/models/user-config.ts | 26 + .../queries/audit-logs-query-params.class.ts | 46 -- .../classes/queries/audit-logs-query-params.ts | 46 ++ .../app/classes/queries/query-params.class.ts | 23 - .../src/app/classes/queries/query-params.ts | 23 + ...ce-logs-histogram-query-params.class.spec.ts | 203 ----- ...service-logs-histogram-query-params.class.ts | 70 -- .../service-logs-histogram-query-params.spec.ts | 203 +++++ .../service-logs-histogram-query-params.ts | 70 ++ .../queries/service-logs-query-params.class.ts | 30 - .../queries/service-logs-query-params.ts | 30 + .../service-logs-truncated-query-params.ts | 36 + .../app/classes/service-log-context-entry.ts | 26 + .../accordion-panel.component.less | 2 +- .../src/app/components/app.component.less | 2 +- .../collapsible-panel.component.html | 27 + .../collapsible-panel.component.less | 42 + .../collapsible-panel.component.spec.ts | 129 +++ .../collapsible-panel.component.ts | 89 +++ .../dropdown-button.component.html | 3 +- .../dropdown-button.component.less | 2 +- .../dropdown-button.component.spec.ts | 5 +- .../dropdown-button.component.ts | 2 +- .../dropdown-list/dropdown-list.component.html | 2 +- .../dropdown-list/dropdown-list.component.less | 2 +- .../dropdown-list.component.spec.ts | 12 +- .../dropdown-list/dropdown-list.component.ts | 11 +- .../filter-button.component.spec.ts | 5 +- .../filter-button/filter-button.component.ts | 2 +- .../filter-dropdown.component.spec.ts | 5 +- .../filters-panel/filters-panel.component.html | 5 +- .../filters-panel/filters-panel.component.less | 8 +- .../filters-panel.component.spec.ts | 5 +- .../filters-panel/filters-panel.component.ts | 4 +- .../log-context/log-context.component.html | 33 + .../log-context/log-context.component.less | 23 + .../log-context/log-context.component.spec.ts | 108 +++ .../log-context/log-context.component.ts | 91 +++ .../log-file-entry.component.html | 20 + .../log-file-entry.component.less | 31 + .../log-file-entry.component.spec.ts | 56 ++ .../log-file-entry/log-file-entry.component.ts | 51 ++ .../logs-container.component.html | 20 +- .../logs-container.component.spec.ts | 10 +- .../logs-container/logs-container.component.ts | 54 +- .../logs-list/logs-list.component.html | 30 +- .../logs-list/logs-list.component.less | 38 +- .../logs-list/logs-list.component.spec.ts | 3 + .../components/logs-list/logs-list.component.ts | 34 +- .../main-container.component.html | 7 + .../main-container.component.less | 6 +- .../main-container.component.spec.ts | 13 +- .../main-container/main-container.component.ts | 32 +- .../src/app/components/main.less | 20 + .../menu-button/menu-button.component.less | 18 +- .../menu-button/menu-button.component.spec.ts | 5 +- .../menu-button/menu-button.component.ts | 7 +- .../src/app/components/mixins.less | 200 +++++ .../pagination-controls.component.less | 2 +- .../pagination/pagination.component.less | 4 +- .../search-box/search-box.component.less | 2 +- .../search-box/search-box.component.ts | 2 +- .../time-histogram.component.less | 24 +- .../time-histogram/time-histogram.component.ts | 94 ++- .../time-range-picker.component.less | 2 +- .../timezone-picker.component.spec.ts | 5 +- .../components/top-menu/top-menu.component.html | 2 +- .../components/top-menu/top-menu.component.less | 2 +- .../src/app/components/variables.less | 93 +-- .../src/app/models/app-settings.model.ts | 27 - .../src/app/models/app-state.model.ts | 35 - .../src/app/models/audit-log-field.model.ts | 225 ------ .../src/app/models/audit-log.model.ts | 46 -- .../src/app/models/bar-graph.model.ts | 24 - .../src/app/models/common-entry.model.ts | 22 - .../src/app/models/count.model.ts | 22 - .../src/app/models/filter.model.ts | 25 - .../src/app/models/graph.model.ts | 23 - .../src/app/models/log-field.model.ts | 27 - .../src/app/models/log.model.ts | 37 - .../src/app/models/node.model.ts | 29 - .../src/app/models/service-log-field.model.ts | 107 --- .../src/app/models/service-log.model.ts | 27 - .../app/models/solr-collection-state.model.ts | 23 - .../src/app/models/store.model.ts | 169 ---- .../src/app/models/user-config.model.ts | 26 - .../services/component-actions.service.spec.ts | 8 +- .../app/services/component-actions.service.ts | 52 +- .../component-generator.service.spec.ts | 10 +- .../app/services/component-generator.service.ts | 23 +- .../src/app/services/filtering.service.spec.ts | 27 + .../src/app/services/filtering.service.ts | 97 ++- .../src/app/services/http-client.service.ts | 15 +- .../app/services/logs-container.service.spec.ts | 8 +- .../src/app/services/logs-container.service.ts | 70 +- .../services/storage/app-settings.service.ts | 4 +- .../app/services/storage/app-state.service.ts | 4 +- .../storage/audit-logs-fields.service.ts | 2 +- .../app/services/storage/audit-logs.service.ts | 2 +- .../app/services/storage/clusters.service.ts | 2 +- .../app/services/storage/components.service.ts | 2 +- .../src/app/services/storage/filters.service.ts | 2 +- .../src/app/services/storage/graphs.service.ts | 2 +- .../src/app/services/storage/hosts.service.ts | 2 +- .../app/services/storage/reducers.service.ts | 2 + .../storage/service-logs-fields.service.ts | 2 +- .../service-logs-histogram-data.service.ts | 2 +- .../storage/service-logs-truncated.service.ts | 32 + .../services/storage/service-logs.service.ts | 2 +- .../services/storage/user-configs.service.ts | 2 +- .../src/assets/i18n/en.json | 14 +- .../ambari-logsearch-web/webpack.config.js | 21 +- ambari-logsearch/ambari-logsearch-web/yarn.lock | 288 +++++-- ambari-metrics/ambari-metrics-assembly/pom.xml | 2 + ambari-metrics/ambari-metrics-common/pom.xml | 6 + .../flume/FlumeTimelineMetricsSinkTest.java | 27 +- .../ambari-metrics-timelineservice/pom.xml | 10 + ambari-server/pom.xml | 2 + ambari-server/src/main/assemblies/server.xml | 30 +- .../actionmanager/ExecutionCommandWrapper.java | 3 +- .../ambari/server/actionmanager/Stage.java | 3 +- .../ambari/server/agent/HeartbeatMonitor.java | 3 +- .../ambari/server/agent/StatusCommand.java | 16 + .../agent/stomp/dto/HostRepositories.java | 19 + .../server/api/services/AmbariMetaInfo.java | 60 +- .../server/checks/AbstractCheckDescriptor.java | 81 +- .../ambari/server/checks/CheckDescription.java | 8 + .../RequiredServicesInRepositoryCheck.java | 91 +++ .../ambari/server/checks/UpgradeCheck.java | 11 + .../AmbariCustomCommandExecutionHelper.java | 10 + .../controller/AmbariManagementController.java | 6 +- .../AmbariManagementControllerImpl.java | 69 +- .../controller/AmbariManagementHelper.java | 28 +- .../server/controller/ControllerModule.java | 4 + .../server/controller/KerberosHelper.java | 9 +- .../server/controller/KerberosHelperImpl.java | 252 +++--- .../controller/ResourceProviderFactory.java | 10 +- .../ServiceComponentHostResponse.java | 15 + .../server/controller/StackVersionResponse.java | 29 - .../AbstractControllerResourceProvider.java | 4 + .../internal/AlertTargetResourceProvider.java | 3 +- .../BlueprintConfigurationProcessor.java | 87 +- .../internal/ClientConfigResourceProvider.java | 2 - .../ClusterStackVersionResourceProvider.java | 31 +- .../internal/DefaultProviderModule.java | 4 - .../internal/ExtensionLinkResourceProvider.java | 15 + .../internal/HostComponentResourceProvider.java | 4 + .../internal/ServiceResourceProvider.java | 8 - .../internal/StackArtifactResourceProvider.java | 35 +- .../internal/UpgradeResourceProvider.java | 77 +- .../internal/ViewInstanceResourceProvider.java | 147 ++-- .../utilities/RemovableIdentities.java | 2 +- .../upgrade/HostVersionOutOfSyncListener.java | 15 + .../ambari/server/metadata/ActionMetadata.java | 1 + .../ambari/server/orm/DBAccessorImpl.java | 16 +- .../orm/entities/RepositoryVersionEntity.java | 39 +- .../orm/entities/ServiceDesiredStateEntity.java | 6 +- .../server/orm/entities/WidgetLayoutEntity.java | 6 +- .../AbstractPrepareKerberosServerAction.java | 14 + .../kerberos/CreateKeytabFilesServerAction.java | 2 +- .../kerberos/CreatePrincipalsServerAction.java | 2 +- .../kerberos/KerberosServerAction.java | 71 +- .../PrepareDisableKerberosServerAction.java | 3 +- .../PrepareEnableKerberosServerAction.java | 6 +- .../PrepareKerberosIdentitiesServerAction.java | 142 +++- .../upgrades/AbstractUpgradeServerAction.java | 6 +- .../AtlasProxyUserConfigCalculation.java | 62 ++ .../upgrades/AutoSkipFailedSummaryAction.java | 15 +- .../upgrades/ComponentVersionCheckAction.java | 2 +- .../serveraction/upgrades/ConfigureAction.java | 16 +- .../upgrades/FinalizeUpgradeAction.java | 23 +- .../FixCapacitySchedulerOrderingPolicy.java | 12 +- .../serveraction/upgrades/FixLzoCodecPath.java | 10 +- .../upgrades/FixOozieAdminUsers.java | 10 +- .../upgrades/FixYarnWebServiceUrl.java | 11 +- .../upgrades/HBaseConfigCalculation.java | 10 +- .../HBaseEnvMaxDirectMemorySizeAction.java | 11 +- .../upgrades/HiveEnvClasspathAction.java | 11 +- .../upgrades/HiveZKQuorumConfigAction.java | 13 +- .../upgrades/KerberosKeytabsAction.java | 13 +- .../upgrades/ManualStageAction.java | 3 +- .../upgrades/OozieConfigCalculation.java | 11 +- .../upgrades/PreconfigureKerberosAction.java | 15 +- .../upgrades/RangerConfigCalculation.java | 11 +- .../RangerKerberosConfigCalculation.java | 11 +- .../upgrades/RangerKmsProxyConfig.java | 11 +- .../RangerUsersyncConfigCalculation.java | 11 +- .../upgrades/RangerWebAlertConfigAction.java | 9 +- .../upgrades/SparkShufflePropertyConfig.java | 11 +- .../upgrades/UpdateDesiredRepositoryAction.java | 10 +- .../upgrades/UpgradeUserKerberosDescriptor.java | 6 +- .../upgrades/YarnConfigCalculation.java | 11 +- .../ambari/server/stack/ExtensionHelper.java | 88 ++- .../ambari/server/stack/ServiceDirectory.java | 3 +- .../ambari/server/stack/StackDirectory.java | 74 +- .../ambari/server/stack/StackManager.java | 5 + .../apache/ambari/server/stack/StackModule.java | 49 +- .../ambari/server/state/ConfigHelper.java | 164 +++- .../org/apache/ambari/server/state/Host.java | 17 + .../ambari/server/state/PropertyInfo.java | 29 + .../ambari/server/state/RefreshCommand.java | 52 ++ .../state/RefreshCommandConfiguration.java | 71 ++ .../ambari/server/state/RepositoryType.java | 18 + .../apache/ambari/server/state/ServiceInfo.java | 2 +- .../apache/ambari/server/state/StackInfo.java | 49 +- .../ambari/server/state/UpgradeContext.java | 79 +- .../ambari/server/state/host/HostImpl.java | 43 + .../kerberos/AbstractKerberosDescriptor.java | 25 + .../AbstractKerberosDescriptorContainer.java | 16 +- .../state/kerberos/KerberosDescriptor.java | 3 +- .../kerberos/KerberosIdentityDescriptor.java | 160 ++++ .../server/state/repository/StackPackage.java | 69 ++ .../state/repository/VersionDefinitionXml.java | 87 ++ .../ambari/server/state/stack/UpgradePack.java | 36 +- .../state/stack/upgrade/ClusterGrouping.java | 13 + .../state/stack/upgrade/ConfigureTask.java | 16 + .../stack/upgrade/ServerSideActionTask.java | 15 + .../state/stack/upgrade/TaskParameter.java | 41 + .../svccomphost/ServiceComponentHostImpl.java | 19 +- .../ServiceComponentHostSummary.java | 123 --- .../server/topology/AsyncCallableService.java | 110 ++- .../ambari/server/topology/TopologyManager.java | 26 +- .../topology/tasks/ConfigureClusterTask.java | 124 +-- .../server/upgrade/UpgradeCatalog260.java | 25 + .../ambari_server/dbConfiguration_linux.py | 9 +- .../python/ambari_server/resourceFilesKeeper.py | 7 +- .../python/ambari_server/serverConfiguration.py | 2 +- .../main/python/ambari_server/setupMpacks.py | 2 +- .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 8 +- .../1.6.1.2.2.0/configuration/accumulo-env.xml | 6 + .../package/scripts/accumulo_script.py | 1 + .../0.1.0/configuration/infra-solr-env.xml | 6 + .../0.1.0/configuration/ams-env.xml | 6 + .../0.1.0/package/scripts/metrics_collector.py | 4 +- .../0.1.0/package/scripts/metrics_grafana.py | 4 +- .../0.1.0/package/scripts/metrics_monitor.py | 4 +- .../AMBARI_METRICS/0.1.0/service_advisor.py | 787 +++++++++++++++++++ .../ATLAS/0.1.0.2.3/configuration/atlas-env.xml | 6 + .../ATLAS/0.7.0.3.0/configuration/atlas-env.xml | 6 + .../ATLAS/0.7.0.3.0/service_advisor.py | 5 +- .../DRUID/0.10.1/configuration/druid-broker.xml | 106 +++ .../DRUID/0.10.1/configuration/druid-common.xml | 270 +++++++ .../0.10.1/configuration/druid-coordinator.xml | 43 + .../DRUID/0.10.1/configuration/druid-env.xml | 248 ++++++ .../0.10.1/configuration/druid-historical.xml | 94 +++ .../DRUID/0.10.1/configuration/druid-log4j.xml | 84 ++ .../0.10.1/configuration/druid-logrotate.xml | 68 ++ .../configuration/druid-middlemanager.xml | 122 +++ .../0.10.1/configuration/druid-overlord.xml | 52 ++ .../DRUID/0.10.1/configuration/druid-router.xml | 59 ++ .../common-services/DRUID/0.10.1/metainfo.xml | 223 ++++++ .../DRUID/0.10.1/package/scripts/broker.py | 28 + .../DRUID/0.10.1/package/scripts/coordinator.py | 28 + .../DRUID/0.10.1/package/scripts/druid.py | 307 ++++++++ .../DRUID/0.10.1/package/scripts/druid_node.py | 115 +++ .../DRUID/0.10.1/package/scripts/historical.py | 28 + .../0.10.1/package/scripts/middlemanager.py | 28 + .../DRUID/0.10.1/package/scripts/overlord.py | 28 + .../DRUID/0.10.1/package/scripts/params.py | 200 +++++ .../DRUID/0.10.1/package/scripts/router.py | 28 + .../0.10.1/package/scripts/service_check.py | 44 ++ .../0.10.1/package/scripts/status_params.py | 24 + .../DRUID/0.10.1/quicklinks/quicklinks.json | 37 + .../DRUID/0.10.1/role_command_order.json | 17 + .../DRUID/0.10.1/themes/theme.json | 120 +++ .../DRUID/0.9.2/configuration/druid-broker.xml | 100 --- .../DRUID/0.9.2/configuration/druid-common.xml | 270 ------- .../0.9.2/configuration/druid-coordinator.xml | 43 - .../DRUID/0.9.2/configuration/druid-env.xml | 242 ------ .../0.9.2/configuration/druid-historical.xml | 88 --- .../DRUID/0.9.2/configuration/druid-log4j.xml | 84 -- .../0.9.2/configuration/druid-logrotate.xml | 68 -- .../0.9.2/configuration/druid-middlemanager.xml | 122 --- .../0.9.2/configuration/druid-overlord.xml | 52 -- .../DRUID/0.9.2/configuration/druid-router.xml | 59 -- .../common-services/DRUID/0.9.2/metainfo.xml | 223 ------ .../DRUID/0.9.2/package/scripts/broker.py | 28 - .../DRUID/0.9.2/package/scripts/coordinator.py | 28 - .../DRUID/0.9.2/package/scripts/druid.py | 307 -------- .../DRUID/0.9.2/package/scripts/druid_node.py | 114 --- .../DRUID/0.9.2/package/scripts/historical.py | 28 - .../0.9.2/package/scripts/middlemanager.py | 28 - .../DRUID/0.9.2/package/scripts/overlord.py | 28 - .../DRUID/0.9.2/package/scripts/params.py | 200 ----- .../DRUID/0.9.2/package/scripts/router.py | 28 - .../0.9.2/package/scripts/service_check.py | 44 -- .../0.9.2/package/scripts/status_params.py | 24 - .../DRUID/0.9.2/quicklinks/quicklinks.json | 37 - .../DRUID/0.9.2/role_command_order.json | 17 - .../DRUID/0.9.2/themes/theme.json | 120 --- .../0.5.0.2.1/configuration/falcon-env.xml | 6 + .../FLUME/1.4.0.2.0/configuration/flume-env.xml | 6 + .../0.96.0.2.0/configuration/hbase-env.xml | 6 + .../0.96.0.2.0/configuration/hbase-site.xml | 17 +- .../HBASE/2.0.0.3.0/configuration/hbase-env.xml | 6 + .../HDFS/2.1.0.2.0/configuration/core-site.xml | 12 + .../HDFS/2.1.0.2.0/configuration/hadoop-env.xml | 10 + .../HDFS/2.1.0.2.0/configuration/hdfs-site.xml | 4 + .../HDFS/2.1.0.2.0/package/scripts/datanode.py | 13 +- .../HDFS/2.1.0.2.0/package/scripts/hdfs.py | 62 +- .../2.1.0.2.0/package/scripts/hdfs_client.py | 5 + .../2.1.0.2.0/package/scripts/hdfs_namenode.py | 21 + .../2.1.0.2.0/package/scripts/install_params.py | 6 - .../HDFS/2.1.0.2.0/package/scripts/namenode.py | 21 +- .../2.1.0.2.0/package/scripts/params_linux.py | 2 - .../HDFS/2.1.0.2.0/package/scripts/snamenode.py | 10 + .../HDFS/3.0.0.3.0/configuration/hadoop-env.xml | 10 + .../HDFS/3.0.0.3.0/configuration/hdfs-site.xml | 7 + .../HDFS/3.0.0.3.0/package/scripts/datanode.py | 13 +- .../HDFS/3.0.0.3.0/package/scripts/hdfs.py | 62 +- .../3.0.0.3.0/package/scripts/hdfs_client.py | 5 + .../3.0.0.3.0/package/scripts/hdfs_namenode.py | 20 + .../3.0.0.3.0/package/scripts/install_params.py | 6 - .../HDFS/3.0.0.3.0/package/scripts/namenode.py | 21 +- .../3.0.0.3.0/package/scripts/params_linux.py | 2 - .../HDFS/3.0.0.3.0/package/scripts/snamenode.py | 10 + .../HIVE/0.12.0.2.0/configuration/hive-env.xml | 12 + .../HIVE/0.12.0.2.0/configuration/hive-site.xml | 228 +----- .../HIVE/0.12.0.2.0/package/scripts/hive.py | 34 +- .../package/scripts/hive_interactive.py | 13 + .../package/scripts/hive_server_upgrade.py | 5 - .../0.12.0.2.0/package/scripts/params_linux.py | 9 +- .../0.12.0.2.0/package/scripts/status_params.py | 8 +- .../HIVE/0.12.0.2.0/package/scripts/webhcat.py | 2 +- .../HIVE/2.1.0.3.0/configuration/hive-env.xml | 12 + .../HIVE/2.1.0.3.0/configuration/hive-site.xml | 48 ++ .../HIVE/2.1.0.3.0/package/scripts/hive.py | 32 + .../package/scripts/hive_interactive.py | 13 + .../2.1.0.3.0/package/scripts/params_linux.py | 4 + .../0.10.0.3.0/configuration/kafka-env.xml | 6 + .../KAFKA/0.8.1/configuration/kafka-env.xml | 6 + .../KNOX/0.5.0.2.2/configuration/knox-env.xml | 10 + .../KNOX/0.5.0.3.0/configuration/knox-env.xml | 10 + .../0.5.0/configuration/logsearch-env.xml | 6 + .../1.0.0.2.3/configuration/mahout-env.xml | 6 + .../OOZIE/4.0.0.2.0/configuration/oozie-env.xml | 10 + .../OOZIE/4.0.0.2.0/package/scripts/oozie.py | 6 +- .../4.0.0.2.0/package/scripts/params_linux.py | 3 - .../OOZIE/4.2.0.3.0/configuration/oozie-env.xml | 10 + .../OOZIE/4.2.0.3.0/package/scripts/oozie.py | 5 +- .../4.2.0.3.0/package/scripts/params_linux.py | 3 - .../RANGER/0.4.0/configuration/ranger-env.xml | 10 + .../0.4.0/package/scripts/ranger_admin.py | 36 +- .../0.4.0/package/scripts/ranger_tagsync.py | 23 +- .../1.0.0.3.0/configuration/ranger-env.xml | 10 + .../1.0.0.3.0/package/scripts/ranger_admin.py | 24 +- .../1.0.0.3.0/package/scripts/ranger_tagsync.py | 23 +- .../0.5.0.2.3/configuration/kms-env.xml | 10 + .../0.5.0.2.3/package/scripts/kms_server.py | 21 +- .../1.0.0.3.0/configuration/kms-env.xml | 10 + .../1.0.0.3.0/package/scripts/kms_server.py | 19 +- .../RANGER_KMS/1.0.0.3.0/service_advisor.py | 3 +- .../SPARK/1.2.1/configuration/spark-env.xml | 10 + .../SPARK/2.2.0/configuration/livy-env.xml | 10 + .../SPARK/2.2.0/configuration/spark-env.xml | 10 + .../SPARK2/2.0.0/configuration/spark2-env.xml | 10 + .../SQOOP/1.4.4.2.0/configuration/sqoop-env.xml | 6 + .../SQOOP/1.4.4.3.0/configuration/sqoop-env.xml | 6 + .../STORM/0.9.1/configuration/storm-env.xml | 6 + .../package/scripts/supervisord_service.py | 1 + .../STORM/1.0.1.3.0/configuration/storm-env.xml | 6 + .../package/scripts/supervisord_service.py | 1 + .../0.15.0/configuration/superset-env.xml | 6 + .../TEZ/0.4.0.2.1/configuration/tez-env.xml | 10 + .../TEZ/0.9.0.3.0/configuration/tez-env.xml | 10 + .../configuration-mapred/mapred-env.xml | 6 + .../YARN/2.1.0.2.0/configuration/yarn-env.xml | 6 + .../2.1.0.2.0/package/scripts/params_linux.py | 34 +- .../2.1.0.2.0/package/scripts/status_params.py | 52 +- .../configuration-mapred/mapred-env.xml | 6 + .../YARN/3.0.0.3.0/configuration/yarn-env.xml | 6 + .../YARN/3.0.0.3.0/configuration/yarn-site.xml | 2 +- .../3.0.0.3.0/package/scripts/params_linux.py | 53 +- .../3.0.0.3.0/package/scripts/status_params.py | 52 +- .../YARN/3.0.0.3.0/service_advisor.py | 3 +- .../0.6.0/configuration/zeppelin-env.xml | 10 + .../0.7.0/configuration/zeppelin-env.xml | 10 + .../ZEPPELIN/0.7.0/package/scripts/master.py | 167 ++-- .../ZEPPELIN/0.7.0/package/scripts/params.py | 26 +- .../3.4.5/configuration/zookeeper-env.xml | 6 + .../src/main/resources/configuration-schema.xsd | 14 +- .../custom_actions/scripts/install_packages.py | 35 +- ambari-server/src/main/resources/kerberos.json | 79 ++ .../src/main/resources/properties.json | 1 + .../main/resources/scripts/Ambaripreupload.py | 4 +- .../scripts/post-user-creation-hook.sh | 2 +- .../stack-hooks/after-INSTALL/scripts/hook.py | 37 + .../stack-hooks/after-INSTALL/scripts/params.py | 108 +++ .../scripts/shared_initialization.py | 132 ++++ .../before-ANY/files/changeToSecureUid.sh | 64 ++ .../stack-hooks/before-ANY/scripts/hook.py | 36 + .../stack-hooks/before-ANY/scripts/params.py | 254 ++++++ .../before-ANY/scripts/shared_initialization.py | 273 +++++++ .../stack-hooks/before-INSTALL/scripts/hook.py | 37 + .../before-INSTALL/scripts/params.py | 115 +++ .../scripts/repo_initialization.py | 73 ++ .../scripts/shared_initialization.py | 37 + .../stack-hooks/before-RESTART/scripts/hook.py | 29 + .../before-START/files/checkForFormat.sh | 65 ++ .../before-START/files/fast-hdfs-resource.jar | Bin 0 -> 28296600 bytes .../before-START/files/task-log4j.properties | 134 ++++ .../before-START/files/topology_script.py | 66 ++ .../before-START/scripts/custom_extensions.py | 173 ++++ .../stack-hooks/before-START/scripts/hook.py | 43 + .../stack-hooks/before-START/scripts/params.py | 371 +++++++++ .../before-START/scripts/rack_awareness.py | 48 ++ .../scripts/shared_initialization.py | 256 ++++++ .../templates/commons-logging.properties.j2 | 43 + .../templates/exclude_hosts_list.j2 | 21 + .../templates/hadoop-metrics2.properties.j2 | 107 +++ .../before-START/templates/health_check.j2 | 81 ++ .../templates/include_hosts_list.j2 | 21 + .../templates/topology_mappings.data.j2 | 24 + .../HDP/2.0.6/configuration/cluster-env.xml | 10 + .../2.0.6/hooks/after-INSTALL/scripts/hook.py | 37 - .../2.0.6/hooks/after-INSTALL/scripts/params.py | 115 --- .../scripts/shared_initialization.py | 132 ---- .../hooks/before-ANY/files/changeToSecureUid.sh | 64 -- .../HDP/2.0.6/hooks/before-ANY/scripts/hook.py | 36 - .../2.0.6/hooks/before-ANY/scripts/params.py | 277 ------- .../before-ANY/scripts/shared_initialization.py | 281 ------- .../2.0.6/hooks/before-INSTALL/scripts/hook.py | 37 - .../hooks/before-INSTALL/scripts/params.py | 115 --- .../scripts/repo_initialization.py | 73 -- .../scripts/shared_initialization.py | 37 - .../2.0.6/hooks/before-RESTART/scripts/hook.py | 29 - .../hooks/before-START/files/checkForFormat.sh | 65 -- .../before-START/files/fast-hdfs-resource.jar | Bin 28296600 -> 0 bytes .../before-START/files/task-log4j.properties | 134 ---- .../hooks/before-START/files/topology_script.py | 66 -- .../before-START/scripts/custom_extensions.py | 173 ---- .../2.0.6/hooks/before-START/scripts/hook.py | 43 - .../2.0.6/hooks/before-START/scripts/params.py | 378 --------- .../before-START/scripts/rack_awareness.py | 48 -- .../scripts/shared_initialization.py | 256 ------ .../templates/commons-logging.properties.j2 | 43 - .../templates/exclude_hosts_list.j2 | 21 - .../templates/hadoop-metrics2.properties.j2 | 107 --- .../before-START/templates/health_check.j2 | 81 -- .../templates/include_hosts_list.j2 | 21 - .../templates/topology_mappings.data.j2 | 24 - .../resources/stacks/HDP/2.0.6/kerberos.json | 79 -- .../HDP/2.0.6/properties/stack_packages.json | 8 +- .../stacks/HDP/2.0.6/role_command_order.json | 2 +- .../stacks/HDP/2.0.6/services/stack_advisor.py | 562 +------------ .../resources/stacks/HDP/2.0.6/widgets.json | 95 --- .../services/HBASE/configuration/hbase-env.xml | 6 + .../stacks/HDP/2.2/services/stack_advisor.py | 1 - .../services/ECS/package/scripts/ecs_client.py | 2 +- .../services/ECS/package/scripts/params.py | 2 +- .../services/HDFS/configuration/hdfs-site.xml | 3 + .../stacks/HDP/2.3/upgrades/config-upgrade.xml | 5 + .../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 3 + .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml | 1 + .../stacks/HDP/2.4/upgrades/config-upgrade.xml | 4 + .../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 3 + .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml | 1 + .../services/ATLAS/configuration/atlas-env.xml | 6 + .../HIVE/configuration/llap-daemon-log4j.xml | 2 +- .../services/SPARK/configuration/livy-env.xml | 10 + .../stacks/HDP/2.5/services/stack_advisor.py | 6 +- .../stacks/HDP/2.5/upgrades/config-upgrade.xml | 10 + .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 7 + .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 4 + .../stacks/HDP/2.6/kerberos_preconfigure.json | 9 + .../configuration/application-properties.xml | 15 + .../stacks/HDP/2.6/services/DRUID/kerberos.json | 71 +- .../stacks/HDP/2.6/services/DRUID/metainfo.xml | 5 +- .../configuration/hive-interactive-site.xml | 225 ++++++ .../HIVE/configuration/tez-interactive-site.xml | 6 + .../services/SPARK/configuration/livy-env.xml | 10 + .../services/STORM/configuration/storm-site.xml | 6 +- .../HDP/2.6/services/SUPERSET/kerberos.json | 10 +- .../services/YARN/configuration/yarn-site.xml | 20 +- .../ZEPPELIN/configuration/zeppelin-env.xml | 10 + .../stacks/HDP/2.6/services/stack_advisor.py | 48 +- .../stacks/HDP/2.6/upgrades/config-upgrade.xml | 32 +- .../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 15 +- .../stacks/HDP/2.6/upgrades/upgrade-2.6.xml | 5 + .../HDP/3.0/configuration/cluster-env.xml | 10 + .../HDP/3.0/hooks/after-INSTALL/scripts/hook.py | 37 - .../3.0/hooks/after-INSTALL/scripts/params.py | 109 --- .../scripts/shared_initialization.py | 140 ---- .../hooks/before-ANY/files/changeToSecureUid.sh | 53 -- .../HDP/3.0/hooks/before-ANY/scripts/hook.py | 36 - .../HDP/3.0/hooks/before-ANY/scripts/params.py | 259 ------ .../before-ANY/scripts/shared_initialization.py | 239 ------ .../3.0/hooks/before-INSTALL/scripts/hook.py | 37 - .../3.0/hooks/before-INSTALL/scripts/params.py | 115 --- .../scripts/repo_initialization.py | 76 -- .../scripts/shared_initialization.py | 37 - .../3.0/hooks/before-RESTART/scripts/hook.py | 29 - .../hooks/before-START/files/checkForFormat.sh | 65 -- .../before-START/files/fast-hdfs-resource.jar | Bin 28296600 -> 0 bytes .../before-START/files/task-log4j.properties | 134 ---- .../hooks/before-START/files/topology_script.py | 66 -- .../HDP/3.0/hooks/before-START/scripts/hook.py | 40 - .../3.0/hooks/before-START/scripts/params.py | 364 --------- .../before-START/scripts/rack_awareness.py | 47 -- .../scripts/shared_initialization.py | 249 ------ .../templates/commons-logging.properties.j2 | 43 - .../templates/exclude_hosts_list.j2 | 21 - .../templates/hadoop-metrics2.properties.j2 | 107 --- .../before-START/templates/health_check.j2 | 81 -- .../templates/include_hosts_list.j2 | 21 - .../templates/topology_mappings.data.j2 | 24 - .../main/resources/stacks/HDP/3.0/kerberos.json | 79 -- .../stacks/HDP/3.0/role_command_order.json | 2 +- .../main/resources/stacks/HDP/3.0/widgets.json | 95 --- .../src/main/resources/upgrade-pack.xsd | 9 + ambari-server/src/main/resources/widgets.json | 95 +++ .../server/api/services/AmbariMetaInfoTest.java | 44 +- .../checks/AbstractCheckDescriptorTest.java | 3 + .../checks/AutoStartDisabledCheckTest.java | 12 +- .../checks/ClientRetryPropertyCheckTest.java | 2 + .../checks/ComponentExistsInRepoCheckTest.java | 2 + .../checks/ComponentsInstallationCheckTest.java | 3 + .../checks/ConfigurationMergeCheckTest.java | 2 + .../checks/DruidHighAvailabilityCheckTest.java | 2 + .../checks/HiveMultipleMetastoreCheckTest.java | 3 + .../checks/HiveNotRollingWarningTest.java | 3 + .../server/checks/HostsHeartbeatCheckTest.java | 2 + .../checks/HostsMasterMaintenanceCheckTest.java | 3 + .../checks/HostsRepositoryVersionCheckTest.java | 2 + .../server/checks/InstallPackagesCheckTest.java | 2 + .../server/checks/KafkaKerberosCheckTest.java | 2 + ...duce2JobHistoryStatePreservingCheckTest.java | 2 + .../server/checks/RangerAuditDbCheckTest.java | 3 + .../server/checks/RangerPasswordCheckTest.java | 3 + .../server/checks/RangerSSLConfigCheckTest.java | 3 + .../RequiredServicesInRepositoryCheckTest.java | 115 +++ .../SecondaryNamenodeDeletedCheckTest.java | 3 + .../ServicesMaintenanceModeCheckTest.java | 2 + ...vicesMapReduceDistributedCacheCheckTest.java | 3 + ...rvicesNamenodeHighAvailabilityCheckTest.java | 3 + .../ServicesNamenodeTruncateCheckTest.java | 2 + .../ServicesTezDistributedCacheCheckTest.java | 3 + .../server/checks/ServicesUpCheckTest.java | 2 + .../ServicesYarnWorkPreservingCheckTest.java | 2 + .../server/checks/StormShutdownWarningTest.java | 3 + .../AmbariManagementControllerImplTest.java | 6 +- .../AmbariManagementControllerTest.java | 6 + .../server/controller/KerberosHelperTest.java | 5 - .../BlueprintConfigurationProcessorTest.java | 60 +- .../internal/UpgradeResourceProviderTest.java | 46 +- .../utilities/KerberosIdentityCleanerTest.java | 8 +- .../HostVersionOutOfSyncListenerTest.java | 14 +- .../upgrade/StackVersionListenerTest.java | 1 - .../apache/ambari/server/orm/OrmTestHelper.java | 2 +- ...AbstractPrepareKerberosServerActionTest.java | 5 + .../AtlasProxyUserConfigCalculationTest.java | 127 +++ .../FixCapacitySchedulerOrderingPolicyTest.java | 2 +- .../upgrades/FixOozieAdminUsersTest.java | 2 +- .../upgrades/FixYarnWebServiceUrlTest.java | 2 +- .../HBaseEnvMaxDirectMemorySizeActionTest.java | 2 +- .../upgrades/HiveEnvClasspathActionTest.java | 2 +- .../upgrades/HiveZKQuorumConfigActionTest.java | 2 +- .../upgrades/KerberosKeytabsActionTest.java | 17 + .../upgrades/RangerConfigCalculationTest.java | 2 +- .../RangerKerberosConfigCalculationTest.java | 2 +- .../upgrades/RangerKmsProxyConfigTest.java | 2 +- .../RangerUsersyncConfigCalculationTest.java | 2 +- .../RangerWebAlertConfigActionTest.java | 6 +- .../SparkShufflePropertyConfigTest.java | 2 +- .../UpgradeUserKerberosDescriptorTest.java | 4 +- .../server/stack/StackManagerExtensionTest.java | 49 +- .../ambari/server/stack/StackManagerTest.java | 8 - .../ambari/server/state/CheckHelperTest.java | 7 + .../ambari/server/state/ConfigHelperTest.java | 76 +- .../ambari/server/state/PropertyInfoTest.java | 20 + .../ambari/server/state/UpgradeContextTest.java | 96 ++- .../state/kerberos/KerberosDescriptorTest.java | 198 ++++- .../KerberosDescriptorUpdateHelperTest.java | 1 + .../kerberos/VariableReplacementHelperTest.java | 35 +- .../state/stack/ConfigUpgradeValidityTest.java | 10 + .../svccomphost/ServiceComponentHostTest.java | 102 ++- .../topology/AsyncCallableServiceTest.java | 89 +-- .../ClusterDeployWithStartOnlyTest.java | 6 + ...InstallWithoutStartOnComponentLevelTest.java | 6 + .../ClusterInstallWithoutStartTest.java | 6 + .../topology/ConfigureClusterTaskTest.java | 64 +- .../server/topology/TopologyManagerTest.java | 14 +- .../src/test/python/TestAmbariServer.py | 4 +- ambari-server/src/test/python/TestMpacks.py | 12 +- .../src/test/python/TestResourceFilesKeeper.py | 1 + .../src/test/python/TestUpgradeSummary.py | 6 +- .../AMBARI_METRICS/test_service_advisor.py | 596 ++++++++++++++ .../HIVE/test_jdbc_driver_config.py | 18 +- .../RANGER/test_db_flavor_config.py | 17 +- .../RANGER_KMS/test_db_flavor_config.py | 17 +- .../SQOOP/test_jdbc_driver_config.py | 16 +- .../configs/ranger_admin_default.json | 55 ++ .../custom_actions/TestInstallPackages.py | 50 +- .../stacks/2.0.6/HBASE/test_hbase_client.py | 1 - .../stacks/2.0.6/HBASE/test_hbase_master.py | 8 +- .../2.0.6/HBASE/test_phoenix_queryserver.py | 7 + .../python/stacks/2.0.6/HDFS/test_datanode.py | 55 +- .../python/stacks/2.0.6/HDFS/test_namenode.py | 38 +- .../stacks/2.0.6/HIVE/test_hive_metastore.py | 42 +- .../stacks/2.0.6/HIVE/test_hive_server.py | 148 ++-- .../2.0.6/HIVE/test_hive_service_check.py | 4 +- .../stacks/2.0.6/HIVE/test_webhcat_server.py | 41 +- .../stacks/2.0.6/OOZIE/test_oozie_server.py | 9 + .../2.0.6/OOZIE/test_oozie_service_check.py | 5 +- .../stacks/2.0.6/YARN/test_historyserver.py | 5 +- .../stacks/2.0.6/YARN/test_mapreduce2_client.py | 1 + .../stacks/2.0.6/common/test_stack_advisor.py | 576 -------------- .../python/stacks/2.0.6/configs/default.json | 1 + .../hooks/after-INSTALL/test_after_install.py | 88 +-- .../2.0.6/hooks/before-ANY/test_before_any.py | 24 +- .../hooks/before-INSTALL/test_before_install.py | 14 +- .../hooks/before-START/test_before_start.py | 21 +- .../stacks/2.1/FALCON/test_falcon_server.py | 26 +- .../stacks/2.1/HIVE/test_hive_metastore.py | 54 +- .../stacks/2.2/PIG/test_pig_service_check.py | 13 + .../stacks/2.2/SPARK/test_job_history_server.py | 18 +- .../stacks/2.2/common/test_conf_select.py | 13 +- .../stacks/2.2/common/test_stack_advisor.py | 511 ------------ .../2.2/common/test_stack_advisor_perf.py | 66 +- .../stacks/2.3/MAHOUT/test_mahout_client.py | 2 +- .../2.3/MAHOUT/test_mahout_service_check.py | 28 +- .../2.3/SPARK/test_spark_thrift_server.py | 8 +- .../stacks/2.3/common/test_stack_advisor.py | 2 +- .../stacks/2.5/HIVE/test_hive_server_int.py | 16 + .../stacks/2.5/RANGER_KMS/test_kms_server.py | 24 +- .../python/stacks/2.5/SPARK/test_spark_livy.py | 16 +- .../stacks/2.5/ZEPPELIN/test_zeppelin_060.py | 20 +- .../stacks/2.5/common/test_stack_advisor.py | 5 +- .../stacks/2.5/configs/ranger-kms-secured.json | 6 +- .../test/python/stacks/2.6/DRUID/test_druid.py | 22 +- .../stacks/2.6/SPARK2/test_spark_livy2.py | 16 +- .../stacks/2.6/ZEPPELIN/test_zeppelin_070.py | 218 ++--- .../stacks/2.6/common/test_stack_advisor.py | 214 ++++- .../src/test/python/stacks/utils/RMFTestCase.py | 47 +- .../resources/extensions/EXT/0.2/metainfo.xml | 4 +- .../resources/extensions/EXT/0.3/metainfo.xml | 2 +- .../resources/extensions/EXT/0.4/metainfo.xml | 32 + .../EXT/0.4/services/OOZIE2/metainfo.xml | 118 +++ .../services/OOZIE2/themes/broken_theme.json | 3 + ambari-server/src/test/resources/kerberos.json | 42 + .../services/HDFS/configuration/hdfs-site.xml | 8 + .../resources/stacks/HDP/2.0.8/kerberos.json | 42 - .../resources/stacks/OTHER/1.0/widgets.json | 95 --- .../stacks_with_extensions/HDP/0.4/metainfo.xml | 22 + .../HDP/0.4/repos/repoinfo.xml | 63 ++ .../HDP/0.4/services/HBASE/metainfo.xml | 26 + .../0.4/services/HDFS/configuration/global.xml | 145 ++++ .../services/HDFS/configuration/hadoop-env.xml | 223 ++++++ .../services/HDFS/configuration/hbase-site.xml | 137 ++++ .../services/HDFS/configuration/hdfs-log4j.xml | 199 +++++ .../services/HDFS/configuration/hdfs-site.xml | 396 ++++++++++ .../HDP/0.4/services/HDFS/metainfo.xml | 30 + .../0.4/services/HDFS/package/dummy-script.py | 20 + .../HDP/0.4/services/HIVE/metainfo.xml | 26 + .../HDP/0.4/services/MAPREDUCE/metainfo.xml | 23 + .../HDP/0.4/services/ZOOKEEPER/metainfo.xml | 26 + ambari-server/src/test/resources/widgets.json | 95 +++ ambari-utility/pom.xml | 6 + ambari-web/app/app.js | 24 +- ambari-web/app/assets/test/tests.js | 2 + ambari-web/app/controllers.js | 1 + ambari-web/app/controllers/installer.js | 8 +- .../journalNode/progress_controller.js | 4 +- .../journalNode/step4_controller.js | 6 +- .../nameNode/step5_controller.js | 6 +- .../highAvailability/progress_controller.js | 4 +- .../main/admin/kerberos/step2_controller.js | 7 +- .../main/admin/stack_and_upgrade_controller.js | 8 +- ambari-web/app/controllers/main/host/details.js | 2 - .../app/controllers/main/service/info/metric.js | 468 +++++++++++ .../controllers/main/service/info/summary.js | 450 +---------- .../main/service/reassign/step3_controller.js | 18 +- .../main/service/reassign/step4_controller.js | 2 - .../service/widgets/create/wizard_controller.js | 2 +- .../app/controllers/wizard/step6_controller.js | 15 +- .../app/controllers/wizard/step8_controller.js | 15 +- .../app/mappers/repository_version_mapper.js | 2 +- ambari-web/app/messages.js | 10 +- .../app/mixins/common/configs/configs_saver.js | 26 +- .../main/service/configs/config_overridable.js | 1 - .../mixins/wizard/assign_master_components.js | 2 +- ambari-web/app/models/alerts/alert_group.js | 2 +- .../models/configs/service_config_version.js | 9 +- ambari-web/app/models/host_stack_version.js | 4 +- .../models/stack_version/repository_version.js | 2 +- ambari-web/app/routes/add_kerberos_routes.js | 22 +- ambari-web/app/routes/installer.js | 3 +- ambari-web/app/routes/main.js | 1 + ambari-web/app/styles/alerts.less | 14 +- ambari-web/app/styles/application.less | 15 +- ambari-web/app/styles/bootstrap_overrides.less | 4 + ambari-web/app/styles/common.less | 3 +- ambari-web/app/styles/dashboard.less | 28 +- .../app/styles/enhanced_service_dashboard.less | 26 +- ambari-web/app/styles/modal_popups.less | 2 +- ambari-web/app/styles/stack_versions.less | 13 +- .../app/styles/theme/bootstrap-ambari.css | 78 +- ambari-web/app/styles/top-nav.less | 27 +- ambari-web/app/styles/wizard.less | 33 +- ambari-web/app/templates/application.hbs | 39 +- ambari-web/app/templates/common/breadcrumbs.hbs | 4 +- .../common/configs/config_history_flow.hbs | 8 +- .../common/configs/service_version_box.hbs | 8 +- .../templates/common/host_progress_popup.hbs | 6 +- .../modal_popups/widget_browser_popup.hbs | 6 +- ambari-web/app/templates/experimental.hbs | 6 +- ambari-web/app/templates/installer.hbs | 2 +- .../stack_upgrade/stack_upgrade_wizard.hbs | 2 +- .../main/admin/stack_upgrade/versions.hbs | 6 +- ambari-web/app/templates/main/alerts.hbs | 3 +- .../main/alerts/alert_definitions_actions.hbs | 2 +- ambari-web/app/templates/main/dashboard.hbs | 2 +- .../templates/main/dashboard/config_history.hbs | 2 +- ambari-web/app/templates/main/host.hbs | 6 +- .../templates/main/host/bulk_operation_menu.hbs | 134 ++-- .../main/host/details/host_component.hbs | 176 +++-- .../app/templates/main/host/stack_versions.hbs | 4 +- ambari-web/app/templates/main/host/summary.hbs | 120 +-- .../app/templates/main/service/info/metrics.hbs | 104 +++ .../main/service/info/service_alert_popup.hbs | 6 +- .../app/templates/main/service/info/summary.hbs | 105 +-- .../service/info/summary/master_components.hbs | 4 - ambari-web/app/templates/main/service/item.hbs | 7 +- .../templates/main/service/reassign/step3.hbs | 6 +- .../templates/main/service/services/hdfs.hbs | 38 +- ambari-web/app/templates/wizard/step6.hbs | 2 +- ambari-web/app/templates/wizard/step9.hbs | 12 +- ambari-web/app/utils/ajax/ajax.js | 2 - ambari-web/app/utils/helper.js | 23 + ambari-web/app/views.js | 1 + .../stack_upgrade/upgrade_version_box_view.js | 74 +- .../upgrade_version_column_view.js | 2 +- .../admin/stack_upgrade/upgrade_wizard_view.js | 26 +- .../views/main/host/hosts_table_menu_view.js | 4 +- .../app/views/main/host/stack_versions_view.js | 2 +- ambari-web/app/views/main/service/info/menu.js | 7 + .../app/views/main/service/info/metrics_view.js | 290 +++++++ .../app/views/main/service/info/summary.js | 323 ++------ ambari-web/app/views/main/service/item.js | 8 +- .../app/views/main/service/services/hdfs.js | 2 - ambari-web/test/controllers/installer_test.js | 37 +- .../journalNode/progress_controller_test.js | 2 - .../progress_controller_test.js | 3 - .../admin/kerberos/step2_controller_test.js | 9 +- .../main/service/info/metric_test.js | 110 +++ .../main/service/info/summary_test.js | 76 -- .../mixins/common/configs/configs_saver_test.js | 28 +- .../wizard/assign_master_components_test.js | 2 +- .../test/models/alerts/alert_group_test.js | 5 +- .../stack_version/repository_version_test.js | 12 +- .../upgrade_version_box_view_test.js | 149 ++-- .../upgrade_version_column_view_test.js | 6 + .../stack_upgrade/upgrade_wizard_view_test.js | 38 + .../main/service/info/metrics_view_test.js | 334 ++++++++ .../views/main/service/info/summary_test.js | 281 +------ ambari-web/test/views/main/service/item_test.js | 6 +- .../src/main/assemblies/hdf-ambari-mpack.xml | 1 + .../HIVE/package/scripts/hive_client.py | 2 - .../HIVE/package/scripts/hive_metastore.py | 1 - .../HIVE/package/scripts/hive_server.py | 2 +- .../package/scripts/hive_server_interactive.py | 1 - .../HIVE/package/scripts/webhcat_server.py | 2 - .../scripts/application_timeline_server.py | 1 - .../YARN/package/scripts/historyserver.py | 1 - .../YARN/package/scripts/mapreduce2_client.py | 2 - .../YARN/package/scripts/nodemanager.py | 1 - .../YARN/package/scripts/resourcemanager.py | 1 - .../YARN/package/scripts/yarn_client.py | 1 - .../ui/hive-web/app/adapters/application.js | 18 + .../app/controllers/visualization-ui.js | 10 +- .../ui/hive-web/app/utils/constants.js | 1 + .../view/hive20/resources/browser/DDLProxy.java | 154 ++-- .../savedQueries/SavedQueryResourceManager.java | 17 +- .../savedQueries/SavedQueryService.java | 46 +- .../hive20/resources/uploads/UploadService.java | 12 +- .../uploads/query/InsertFromQueryInput.java | 13 +- .../resources/ui/app/components/job-item.js | 49 +- .../resources/ui/app/components/jobs-browser.js | 3 + .../ui/app/components/query-result-table.js | 2 +- .../databases/database/tables/upload-table.js | 12 + .../src/main/resources/ui/app/routes/jobs.js | 11 + .../main/resources/ui/app/routes/queries/new.js | 2 + .../resources/ui/app/routes/queries/query.js | 237 ++++-- .../src/main/resources/ui/app/services/jobs.js | 31 +- .../resources/ui/app/services/saved-queries.js | 21 + .../src/main/resources/ui/app/styles/app.scss | 8 + .../ui/app/templates/components/job-item.hbs | 2 +- .../app/templates/components/jobs-browser.hbs | 2 +- .../main/resources/ui/app/templates/jobs.hbs | 1 + .../hive20/src/main/resources/ui/yarn.lock | 2 +- .../apache/ambari/view/utils/hdfs/HdfsApi.java | 2 +- docs/pom.xml | 61 +- 855 files changed, 21145 insertions(+), 16624 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-agent/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-agent/src/main/python/ambari_agent/FileCache.py ---------------------------------------------------------------------- diff --cc ambari-agent/src/main/python/ambari_agent/FileCache.py index 17235bf,28912d1..6994044 --- a/ambari-agent/src/main/python/ambari_agent/FileCache.py +++ b/ambari-agent/src/main/python/ambari_agent/FileCache.py @@@ -82,11 -83,10 +82,10 @@@ class FileCache() Returns a base directory for hooks """ try: - hooks_subpath = command['clusterLevelParams']['hooks_folder'] - hooks_path = command['commandParams']['hooks_folder'] ++ hooks_path = command['clusterLevelParams']['hooks_folder'] except KeyError: return None - subpath = os.path.join(self.STACKS_CACHE_DIRECTORY, hooks_subpath) - return self.provide_directory(self.cache_dir, subpath, + return self.provide_directory(self.cache_dir, hooks_path, server_url_prefix) http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-agent/src/main/python/ambari_agent/main.py ---------------------------------------------------------------------- diff --cc ambari-agent/src/main/python/ambari_agent/main.py index de23ff6,5fcd051..3948290 --- a/ambari-agent/src/main/python/ambari_agent/main.py +++ b/ambari-agent/src/main/python/ambari_agent/main.py @@@ -86,9 -89,9 +86,8 @@@ import tim import locale import platform import ConfigParser - import ProcessHelper import resource from logging.handlers import SysLogHandler -from Controller import Controller import AmbariConfig from NetUtil import NetUtil from PingPortListener import PingPortListener @@@ -298,10 -290,10 +300,10 @@@ def stop_agent() pid = -1 runner = shellRunner() try: - with open(ProcessHelper.pidfile, 'r') as f: + with open(agent_pidfile, 'r') as f: pid = f.read() pid = int(pid) - + runner.run([AMBARI_SUDO_BINARY, 'kill', '-15', str(pid)]) for i in range(GRACEFUL_STOP_TRIES): result = runner.run([AMBARI_SUDO_BINARY, 'kill', '-0', str(pid)]) http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py ---------------------------------------------------------------------- diff --cc ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py index 26fbaaf,c89e767..8a53502 --- a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py @@@ -374,62 -216,82 +216,82 @@@ def convert_conf_directories_to_symlink if not os.path.exists(d): need_dirs.append(d) + # log that we'll actually be creating some directories soon if len(need_dirs) > 0: - create(stack_name, package, version) + Logger.info("Package {0} will have the following new configuration directories created: {1}".format( + package, ", ".join(dry_run_directory))) - # find the matching definition and back it up (not the most efficient way) ONLY if there is more than one directory - if len(dirs) > 1: - for need_dir in need_dirs: - for dir_def in dirs: - if 'prefix' in dir_def and need_dir.startswith(dir_def['prefix']): - old_conf = dir_def['conf_dir'] - versioned_conf = need_dir - Execute(as_sudo(["cp", "-R", "-p", os.path.join(old_conf, "*"), versioned_conf], auto_escape=False), - only_if = format("ls -d {old_conf}/*")) - elif 1 == len(dirs) and 1 == len(need_dirs): - old_conf = dirs[0]['conf_dir'] - versioned_conf = need_dirs[0] - Execute(as_sudo(["cp", "-R", "-p", os.path.join(old_conf, "*"), versioned_conf], auto_escape=False), - only_if = format("ls -d {old_conf}/*")) + # Create the versioned /etc/[component]/[version]/0 folder (using create-conf-dir) and then + # set it for the installed component: + # - Creates /etc/<component>/<version>/0 + # - Links <stack-root>/<version>/<component>/conf -> /etc/<component>/<version>/0 + select(stack_name, package, version, ignore_errors = True) + # check every existing link to see if it's a link and if it's pointed to the right spot + for directory_struct in dirs: + try: + # check if conf is a link already + old_conf = directory_struct['conf_dir'] + current_dir = directory_struct['current_dir'] + if os.path.islink(old_conf): + # it's already a link; make sure it's a link to where we want it + if os.readlink(old_conf) != current_dir: + # the link isn't to the right spot; re-link it + Logger.info("Re-linking symlink {0} to {1}".format(old_conf, current_dir)) + Link(old_conf, action = "delete") + Link(old_conf, to = current_dir) + else: + Logger.info("{0} is already linked to {1}".format(old_conf, current_dir)) + elif os.path.isdir(old_conf): + # the /etc/<component>/conf directory is not a link, so turn it into one + Logger.info("{0} is a directory - it must be converted into a symlink".format(old_conf)) - # <stack-root>/current/[component] is already set to to the correct version, e.g., <stack-root>/[version]/[component] + backup_dir = _get_backup_conf_directory(old_conf) + Logger.info("Backing up {0} to {1} if destination doesn't exist already.".format(old_conf, backup_dir)) + Execute(("cp", "-R", "-p", old_conf, backup_dir), + not_if = format("test -e {backup_dir}"), sudo = True) - select(stack_name, package, version, ignore_errors = True) + # delete the old /etc/<component>/conf directory now that it's been backed up + Directory(old_conf, action = "delete") - # Symlink /etc/[component]/conf to /etc/[component]/conf.backup - try: - # No more references to /etc/[component]/conf - for dir_def in dirs: - # E.g., /etc/[component]/conf - new_symlink = dir_def['conf_dir'] - - # Delete the existing directory/link so that linking will work - if not os.path.islink(new_symlink): - Directory(new_symlink, action = "delete") - else: - Link(new_symlink, action = "delete") - - old_conf = dir_def['conf_dir'] - backup_dir = _get_backup_conf_directory(old_conf) - # link /etc/[component]/conf -> /etc/[component]/conf.backup - # or - # link /etc/[component]/conf -> <stack-root>/current/[component]-client/conf - if link_to == DIRECTORY_TYPE_BACKUP: - Link(new_symlink, to=backup_dir) + # link /etc/[component]/conf -> <stack-root>/current/[component]-client/conf + Link(old_conf, to = current_dir) else: - Link(new_symlink, to=dir_def['current_dir']) - - #HACK + # missing entirely + # /etc/<component>/conf -> <stack-root>/current/<component>/conf if package in ["atlas", ]: - Logger.info("Seeding the new conf symlink {0} from the old backup directory {1} in case any " - "unmanaged artifacts are needed.".format(new_symlink, backup_dir)) - # If /etc/[component]/conf.backup exists, then copy any artifacts not managed by Ambari to the new symlink target - # Be careful not to clobber any existing files. - Execute(as_sudo(["cp", "-R", "--no-clobber", os.path.join(backup_dir, "*"), new_symlink], auto_escape=False), - only_if=format("test -e {new_symlink}")) - except Exception, e: - Logger.warning("Could not change symlink for package {0} to point to {1} directory. Error: {2}".format(package, link_to, e)) + # HACK for Atlas + ''' + In the case of Atlas, the Hive RPM installs /usr/$stack/$version/atlas with some partial packages that + contain Hive hooks, while the Atlas RPM is responsible for installing the full content. - ++ + If the user does not have Atlas currently installed on their stack, then /usr/$stack/current/atlas-client + will be a broken symlink, and we should not create the + symlink /etc/atlas/conf -> /usr/$stack/current/atlas-client/conf . + If we mistakenly create this symlink, then when the user performs an EU/RU and then adds Atlas service + then the Atlas RPM will not be able to copy its artifacts into /etc/atlas/conf directory and therefore + prevent Ambari from by copying those unmanaged contents into /etc/atlas/$version/0 + ''' + component_list = default("/localComponents", []) + if "ATLAS_SERVER" in component_list or "ATLAS_CLIENT" in component_list: + Logger.info("Atlas is installed on this host.") + parent_dir = os.path.dirname(current_dir) + if os.path.exists(parent_dir): + Link(old_conf, to = current_dir) + else: + Logger.info( + "Will not create symlink from {0} to {1} because the destination's parent dir does not exist.".format( + old_conf, current_dir)) + else: + Logger.info( + "Will not create symlink from {0} to {1} because Atlas is not installed on this host.".format( + old_conf, current_dir)) + else: + # Normal path for other packages + Link(old_conf, to = current_dir) + + except Exception, e: + Logger.warning("Could not change symlink for package {0} to point to current directory. Error: {1}".format(package, e)) def _seed_new_configuration_directories(package, created_directories): http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-common/src/main/python/resource_management/libraries/script/script.py ---------------------------------------------------------------------- diff --cc ambari-common/src/main/python/resource_management/libraries/script/script.py index e507b0a,12e6f98..97e7e50 --- a/ambari-common/src/main/python/resource_management/libraries/script/script.py +++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py @@@ -744,6 -771,19 +771,19 @@@ class Script(object) """ self.install_packages(env) + def load_available_packages(self): + if self.available_packages_in_repos: + return self.available_packages_in_repos + + - pkg_provider = get_provider("Package") ++ pkg_provider = get_provider("Package") + try: + self.available_packages_in_repos = pkg_provider.get_available_packages_in_repos(self.get_config()['repositoryFile']['repositories']) + except Exception as err: + Logger.exception("Unable to load available packages") + self.available_packages_in_repos = [] + + def install_packages(self, env): """ List of packages that are required< by service is received from the server @@@ -763,15 -803,9 +803,9 @@@ return pass try: - package_list_str = config['hostLevelParams']['package_list'] - agent_stack_retry_on_unavailability = bool(config['hostLevelParams']['agent_stack_retry_on_unavailability']) - agent_stack_retry_count = int(config['hostLevelParams']['agent_stack_retry_count']) + package_list_str = config['commandParams']['package_list'] + agent_stack_retry_on_unavailability = bool(config['ambariLevelParams']['agent_stack_retry_on_unavailability']) + agent_stack_retry_count = int(config['ambariLevelParams']['agent_stack_retry_count']) - pkg_provider = get_provider("Package") - try: - available_packages_in_repos = pkg_provider.get_available_packages_in_repos(config['repositoryFile']['repositories']) - except Exception as err: - Logger.exception("Unable to load available packages") - available_packages_in_repos = [] if isinstance(package_list_str, basestring) and len(package_list_str) > 0: package_list = json.loads(package_list_str) for package in package_list: http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-infra/ambari-infra-solr-client/src/main/python/solrDataManager.py ---------------------------------------------------------------------- diff --cc ambari-infra/ambari-infra-solr-client/src/main/python/solrDataManager.py index e0356bb,2675bd9..e0356bb mode 100644,100755..100755 --- a/ambari-infra/ambari-infra-solr-client/src/main/python/solrDataManager.py +++ b/ambari-infra/ambari-infra-solr-client/src/main/python/solrDataManager.py http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java index 79ca5ba,ff13d0b..1bf67c3 --- 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 @@@ -20,7 -20,9 +20,8 @@@ package org.apache.ambari.server.action 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 static org.apache.ambari.server.stack.StackManager.DEFAULT_HOOKS_FOLDER; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartbeatMonitor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/agent/StatusCommand.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/agent/StatusCommand.java index 76c2019,9f8a095..f6bfdcf --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/StatusCommand.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/StatusCommand.java @@@ -38,11 -37,12 +38,14 @@@ public class StatusCommand extends Agen private String clusterName; @SerializedName("serviceName") + @com.fasterxml.jackson.annotation.JsonProperty("serviceName") private String serviceName; + @SerializedName("role") + private String role; + @SerializedName("componentName") + @com.fasterxml.jackson.annotation.JsonProperty("componentName") private String componentName; @SerializedName("configurations") http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java index 8d0cfb0,0000000..a076c66 mode 100644,000000..100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java @@@ -1,39 -1,0 +1,58 @@@ ++/** ++ * 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 ++ * <p/> ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * <p/> ++ * 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.agent.stomp.dto; + +import java.util.Map; + +import org.apache.ambari.server.agent.CommandRepository; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class HostRepositories { + + @JsonProperty("commandRepos") + private Map<Long, CommandRepository> repositories; + + @JsonProperty("componentRepos") + private Map<String, Long> componentRepos; + + public HostRepositories(Map<Long, CommandRepository> repositories, Map<String, Long> componentRepos) { + this.repositories = repositories; + this.componentRepos = componentRepos; + } + + public Map<Long, CommandRepository> getRepositories() { + return repositories; + } + + public void setRepositories(Map<Long, CommandRepository> repositories) { + this.repositories = repositories; + } + + public Map<String, Long> getComponentRepos() { + return componentRepos; + } + + public void setComponentRepos(Map<String, Long> componentRepos) { + this.componentRepos = componentRepos; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java index 407238d,46ee65a..49679b4 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java @@@ -1663,21 -1448,7 +1675,25 @@@ public class AmbariMetaInfo return null; } + /** + * Class that is used to update base urls. There are two implementations of this - when we no + * longer are sure the deprecated repo info can be removed, so too can this class. + */ + @Experimental(feature= ExperimentalFeature.PATCH_UPGRADES) + abstract static class BaseUrlUpdater<T> implements Function<RepositoryVersionEntity, T> { + private T m_default; + + private BaseUrlUpdater(T defaultValue) { + m_default = defaultValue; + } + + private T getDefault() { + return m_default; + } + + } ++ + public File getCommonWidgetsDescriptorFile() { + return commonWidgetsDescriptorFile; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index 5ffdf26,e12477e..7a98b7c --- 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 @@@ -84,6 -89,8 +84,7 @@@ import org.apache.ambari.server.state.H import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.PropertyInfo; import org.apache.ambari.server.state.PropertyInfo.PropertyType; + import org.apache.ambari.server.state.RefreshCommandConfiguration; -import org.apache.ambari.server.state.RepositoryInfo; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.ServiceComponentHost; http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 6a7f050,1b1f524..4f57881 --- 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 @@@ -177,6 -148,6 +177,7 @@@ import org.apache.ambari.server.servera import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException; import org.apache.ambari.server.stack.ExtensionHelper; import org.apache.ambari.server.stack.RepoUtil; ++import org.apache.ambari.server.stack.StackManager; import org.apache.ambari.server.stageplanner.RoleGraph; import org.apache.ambari.server.stageplanner.RoleGraphFactory; import org.apache.ambari.server.state.Cluster; @@@ -5803,259 -5682,4 +5802,259 @@@ public class AmbariManagementController return QuickLinkVisibilityControllerFactory.get(quickLinkProfileJson); } + /** + * Collects metadata info about clusters for agent. + * @return metadata info about clusters + * @throws AmbariException + */ + public MetadataUpdateEvent getClustersMetadata() throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + + for (Cluster cl : clusters.getClusters().values()) { + StackId stackId = cl.getDesiredStackVersion(); + + SecurityType securityType = cl.getSecurityType(); + + TreeMap<String, MetadataServiceInfo> serviceLevelParams = new TreeMap<>(); + Collection<ServiceInfo> servicesInfo = ambariMetaInfo.getServices(stackId.getStackName(), + stackId.getStackVersion()).values(); + for (ServiceInfo serviceInfo : servicesInfo) { + Long statusCommandTimeout = null; + if (serviceInfo.getCommandScript() != null) { + statusCommandTimeout = new Long (ambariCustomCommandExecutionHelper.getStatusCommandTimeout(serviceInfo)); + } + + String servicePackageFolder = serviceInfo.getServicePackageFolder(); + + serviceLevelParams.put(serviceInfo.getName(), + new MetadataServiceInfo(serviceInfo.getVersion(), + serviceInfo.isCredentialStoreEnabled(), + statusCommandTimeout, + servicePackageFolder)); + } + + MetadataCluster metadataCluster = new MetadataCluster(securityType, + serviceLevelParams, + getMetadataClusterLevelParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + } + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + getMetadataAmbariLevelParams()); + return metadataUpdateEvent; + } + + public MetadataUpdateEvent getClusterMetadata(Cluster cl) throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + StackId stackId = cl.getDesiredStackVersion(); + + SecurityType securityType = cl.getSecurityType(); + + TreeMap<String, MetadataServiceInfo> serviceLevelParams = new TreeMap<>(); + Collection<ServiceInfo> servicesInfo = ambariMetaInfo.getServices(stackId.getStackName(), + stackId.getStackVersion()).values(); + for (ServiceInfo serviceInfo : servicesInfo) { + Long statusCommandTimeout = null; + if (serviceInfo.getCommandScript() != null) { + statusCommandTimeout = new Long(ambariCustomCommandExecutionHelper.getStatusCommandTimeout(serviceInfo)); + } + + String servicePackageFolder = serviceInfo.getServicePackageFolder(); + + serviceLevelParams.put(serviceInfo.getName(), + new MetadataServiceInfo(serviceInfo.getVersion(), + serviceInfo.isCredentialStoreEnabled(), + statusCommandTimeout, + servicePackageFolder)); + } + + MetadataCluster metadataCluster = new MetadataCluster(securityType, + serviceLevelParams, + getMetadataClusterLevelParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + null); + return metadataUpdateEvent; + } + + public MetadataUpdateEvent getClusterMetadataOnConfigsUpdate(Cluster cl) throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + StackId stackId = cl.getDesiredStackVersion(); + + MetadataCluster metadataCluster = new MetadataCluster(null, + new TreeMap<>(), + getMetadataClusterLevelConfigsParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + null); + return metadataUpdateEvent; + } + + private String getClientsToUpdateConfigs(ComponentInfo componentInfo) { + List<String> clientsToUpdateConfigsList = componentInfo.getClientsToUpdateConfigs(); + if (clientsToUpdateConfigsList == null) { + clientsToUpdateConfigsList = new ArrayList<>(); + clientsToUpdateConfigsList.add("*"); + } + return gson.toJson(clientsToUpdateConfigsList); + } + + private Boolean getUnlimitedKeyJCERequirement(ComponentInfo componentInfo, SecurityType clusterSecurityType) { + UnlimitedKeyJCERequirement unlimitedKeyJCERequirement = componentInfo.getUnlimitedKeyJCERequired(); + // Ensure that the unlimited key requirement is set. If null, the default value should be used. + if(unlimitedKeyJCERequirement == null) { + unlimitedKeyJCERequirement = UnlimitedKeyJCERequirement.DEFAULT; + } + + return (UnlimitedKeyJCERequirement.ALWAYS == unlimitedKeyJCERequirement) || + ((UnlimitedKeyJCERequirement.KERBEROS_ENABLED == unlimitedKeyJCERequirement) && + (clusterSecurityType == SecurityType.KERBEROS)); + + } + + //TODO will be a need to change to multi-instance usage + public TreeMap<String, String> getTopologyComponentLevelParams(StackId stackId, String serviceName, String componentName, + SecurityType clusterSecurityType) throws AmbariException { + ComponentInfo componentInfo = ambariMetaInfo.getComponent( + stackId.getStackName(), stackId.getStackVersion(), + serviceName, componentName); + + TreeMap<String, String> statusCommandParams = new TreeMap<>(); + statusCommandParams.put(ExecutionCommand.KeyNames.CLIENTS_TO_UPDATE_CONFIGS, + getClientsToUpdateConfigs(componentInfo)); + statusCommandParams.put(ExecutionCommand.KeyNames.UNLIMITED_KEY_JCE_REQUIRED, + Boolean.toString(getUnlimitedKeyJCERequirement(componentInfo, clusterSecurityType))); + return statusCommandParams; + } + + //TODO will be a need to change to multi-instance usage + public TreeMap<String, String> getTopologyCommandParams(StackId stackId, String serviceName, String componentName) throws AmbariException { + ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(), + stackId.getStackVersion(), serviceName); + ComponentInfo componentInfo = ambariMetaInfo.getComponent( + stackId.getStackName(), stackId.getStackVersion(), + serviceName, componentName); + + String scriptName = null; + String scriptCommandTimeout = ""; + CommandScriptDefinition script = componentInfo.getCommandScript(); + if (serviceInfo.getSchemaVersion().equals(AmbariMetaInfo.SCHEMA_VERSION_2)) { + if (script != null) { + scriptName = script.getScript(); + if (script.getTimeout() > 0) { + scriptCommandTimeout = String.valueOf(script.getTimeout()); + } + } else { + String message = String.format("Component %s of service %s has not " + + "command script defined", componentName, serviceName); + throw new AmbariException(message); + } + } + String agentDefaultCommandTimeout = configs.getDefaultAgentTaskTimeout(false); + String actualTimeout = (!scriptCommandTimeout.equals("") ? scriptCommandTimeout : agentDefaultCommandTimeout); + + TreeMap<String, String> commandParams = new TreeMap<>(); + commandParams.put(COMMAND_TIMEOUT, actualTimeout); + commandParams.put(SCRIPT, scriptName); + commandParams.put(SCRIPT_TYPE, script.getScriptType().toString()); + return commandParams; + } + + public TreeMap<String, String> getMetadataClusterLevelParams(Cluster cluster, StackId stackId) throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + clusterLevelParams.put(STACK_NAME, stackId.getStackName()); + clusterLevelParams.put(STACK_VERSION, stackId.getStackVersion()); + + Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + if (MapUtils.isNotEmpty(desiredConfigs)) { + + Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.USER, cluster, desiredConfigs); + String userList = gson.toJson(userSet); + clusterLevelParams.put(USER_LIST, userList); + + //Create a user_group mapping and send it as part of the hostLevelParams + Map<String, Set<String>> userGroupsMap = configHelper.createUserGroupsMap( + stackId, cluster, desiredConfigs); + String userGroups = gson.toJson(userGroupsMap); + clusterLevelParams.put(USER_GROUPS, userGroups); + + Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.GROUP, cluster, desiredConfigs); + String groupList = gson.toJson(groupSet); + clusterLevelParams.put(GROUP_LIST, groupList); + } + Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(stackId, + PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs); + String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet); + clusterLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList); + + clusterLevelParams.put(CLUSTER_NAME, cluster.getClusterName()); + + StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion()); - clusterLevelParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder()); ++ clusterLevelParams.put(HOOKS_FOLDER, StackManager.DEFAULT_HOOKS_FOLDER); + + return clusterLevelParams; + } + + public TreeMap<String, String> getMetadataClusterLevelConfigsParams(Cluster cluster, StackId stackId) throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + + Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + if (MapUtils.isNotEmpty(desiredConfigs)) { + + Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.USER, cluster, desiredConfigs); + String userList = gson.toJson(userSet); + clusterLevelParams.put(USER_LIST, userList); + + //Create a user_group mapping and send it as part of the hostLevelParams + Map<String, Set<String>> userGroupsMap = configHelper.createUserGroupsMap( + stackId, cluster, desiredConfigs); + String userGroups = gson.toJson(userGroupsMap); + clusterLevelParams.put(USER_GROUPS, userGroups); + + Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.GROUP, cluster, desiredConfigs); + String groupList = gson.toJson(groupSet); + clusterLevelParams.put(GROUP_LIST, groupList); + } + Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(stackId, + PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs); + String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet); + clusterLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList); + + return clusterLevelParams; + } + + public TreeMap<String, String> getMetadataAmbariLevelParams() throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + clusterLevelParams.put(JDK_LOCATION, getJdkResourceUrl()); + clusterLevelParams.put(JAVA_HOME, getJavaHome()); + clusterLevelParams.put(JAVA_VERSION, String.valueOf(configs.getJavaVersion())); + clusterLevelParams.put(JDK_NAME, getJDKName()); + clusterLevelParams.put(JCE_NAME, getJCEName()); + clusterLevelParams.put(DB_NAME, getServerDB()); + clusterLevelParams.put(MYSQL_JDBC_URL, getMysqljdbcUrl()); + clusterLevelParams.put(ORACLE_JDBC_URL, getOjdbcUrl()); + clusterLevelParams.put(DB_DRIVER_FILENAME, configs.getMySQLJarName()); + clusterLevelParams.putAll(getRcaParameters()); + clusterLevelParams.put(HOST_SYS_PREPPED, configs.areHostsSysPrepped()); + clusterLevelParams.put(AGENT_STACK_RETRY_ON_UNAVAILABILITY, configs.isAgentStackRetryOnInstallEnabled()); + clusterLevelParams.put(AGENT_STACK_RETRY_COUNT, configs.getAgentStackRetryOnInstallCount()); + + return clusterLevelParams; + } + + @Override + public HostRepositories retrieveHostRepositories(Cluster cluster, Host host) throws AmbariException { + List<ServiceComponentHost> hostComponents = cluster.getServiceComponentHosts(host.getHostName()); + Map<Long, CommandRepository> hostRepositories = new HashMap<>(); + Map<String, Long> componentsRepos = new HashMap<>(); + for (ServiceComponentHost serviceComponentHost : hostComponents) { + CommandRepository commandRepository = ambariMetaInfo.getCommandRepository(cluster, + serviceComponentHost.getServiceComponent(), host); + hostRepositories.put(commandRepository.getM_repoVersionId(), commandRepository); + componentsRepos.put(serviceComponentHost.getServiceComponentName(), commandRepository.getM_repoVersionId()); + } + return new HostRepositories(hostRepositories, componentsRepos); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/CreatePrincipalsServerAction.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/CreatePrincipalsServerAction.java index 2fd5abe,1c0853b9..2637f8e --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/CreatePrincipalsServerAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/CreatePrincipalsServerAction.java @@@ -128,10 -128,11 +128,10 @@@ public class CreatePrincipalsServerActi seenPrincipals.add(evaluatedPrincipal); boolean processPrincipal; - boolean regenerateKeytabs = "true".equalsIgnoreCase(getCommandParameterValue(getCommandParameters(), REGENERATE_ALL)); + boolean regenerateKeytabs = getOperationType(getCommandParameters()) == OperationType.RECREATE_ALL; if (regenerateKeytabs) { - // do not process cached identities that can be passed as is(headless identities) - processPrincipal = "false".equals(identityRecord.get(KerberosIdentityDataFileReader.ONLY_KEYTAB_WRITE).toLowerCase()); + processPrincipal = true; } else { KerberosPrincipalEntity kerberosPrincipalEntity = kerberosPrincipalDAO.find(evaluatedPrincipal); http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerUsersyncConfigCalculation.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/af30ab40/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java ----------------------------------------------------------------------