Merge branch 'trunk' into branch-feature-AMBARI-18456
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/936626bd Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/936626bd Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/936626bd Branch: refs/heads/branch-feature-AMBARI-18456 Commit: 936626bdba424d3972704a68f98b34cc542f8a64 Parents: ab1c100 c9a4881 Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Mon Nov 21 11:03:42 2016 -0500 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Mon Nov 21 11:08:19 2016 -0500 ---------------------------------------------------------------------- .../src/main/python/ambari_agent/AmbariAgent.py | 19 +- .../ambari_agent/StatusCommandsExecutor.py | 4 +- .../test/python/ambari_agent/TestAmbariAgent.py | 7 +- .../timeline/AbstractTimelineMetricsSink.java | 5 +- .../availability/MetricCollectorHAHelper.java | 6 + .../availability/MetricCollectorHATest.java | 10 +- .../apache/ambari/server/state/ConfigImpl.java | 13 +- .../alerts/alert_segment_registration_status.py | 10 +- .../package/scripts/hive_server_interactive.py | 22 +- .../0.12.0.2.0/package/scripts/params_linux.py | 1 + .../MAHOUT/1.0.0.2.3/metainfo.xml | 2 +- .../OOZIE/4.0.0.2.0/metainfo.xml | 2 +- .../OOZIE/4.2.0.2.3/metainfo.xml | 2 +- .../common-services/PIG/0.12.0.2.0/metainfo.xml | 2 +- .../common-services/TEZ/0.4.0.2.1/metainfo.xml | 2 +- .../common-services/YARN/2.1.0.2.0/metainfo.xml | 2 +- .../stacks/HDP/2.5/services/SPARK/kerberos.json | 60 +- .../stacks/HDP/2.6/services/SPARK/kerberos.json | 62 +- .../GRUMPY/configuration/grumpy-site.xml | 36 + .../PERF/1.0/services/GRUMPY/metainfo.xml | 57 + .../services/GRUMPY/package/scripts/dwarf.py | 38 + .../GRUMPY/package/scripts/service_check.py | 30 + .../PERF/1.0/services/GRUMPY/themes/theme.json | 65 + .../stacks/PERF/1.0/services/HBASE/alerts.json | 127 + .../services/HBASE/configuration/hbase-env.xml | 292 + .../HBASE/configuration/hbase-log4j.xml | 146 + .../configuration/hbase-logsearch-conf.xml | 111 + .../HBASE/configuration/hbase-policy.xml | 53 + .../services/HBASE/configuration/hbase-site.xml | 573 ++ .../HBASE/configuration/ranger-hbase-audit.xml | 122 + .../ranger-hbase-policymgr-ssl.xml | 66 + .../configuration/ranger-hbase-security.xml | 68 + .../PERF/1.0/services/HBASE/kerberos.json | 159 + .../stacks/PERF/1.0/services/HBASE/metainfo.xml | 196 + .../stacks/PERF/1.0/services/HBASE/metrics.json | 9374 ++++++++++++++++++ .../HBASE/package/scripts/hbase_client.py | 38 + .../HBASE/package/scripts/hbase_master.py | 41 + .../HBASE/package/scripts/hbase_regionserver.py | 41 + .../package/scripts/phoenix_queryserver.py | 38 + .../HBASE/package/scripts/service_check.py | 30 + .../services/HBASE/quicklinks/quicklinks.json | 97 + .../PERF/1.0/services/HBASE/themes/theme.json | 411 + .../stacks/PERF/1.0/services/HBASE/widgets.json | 510 + .../stacks/PERF/1.0/services/HDFS/alerts.json | 1786 ++++ .../services/HDFS/configuration/core-site.xml | 225 + .../services/HDFS/configuration/hadoop-env.xml | 419 + .../hadoop-metrics2.properties.xml | 125 + .../HDFS/configuration/hadoop-policy.xml | 130 + .../services/HDFS/configuration/hdfs-log4j.xml | 225 + .../HDFS/configuration/hdfs-logsearch-conf.xml | 248 + .../services/HDFS/configuration/hdfs-site.xml | 633 ++ .../HDFS/configuration/ranger-hdfs-audit.xml | 124 + .../ranger-hdfs-plugin-properties.xml | 88 + .../configuration/ranger-hdfs-policymgr-ssl.xml | 67 + .../HDFS/configuration/ranger-hdfs-security.xml | 65 + .../services/HDFS/configuration/ssl-client.xml | 70 + .../services/HDFS/configuration/ssl-server.xml | 80 + .../stacks/PERF/1.0/services/HDFS/kerberos.json | 246 + .../stacks/PERF/1.0/services/HDFS/metainfo.xml | 265 + .../stacks/PERF/1.0/services/HDFS/metrics.json | 7905 +++++++++++++++ .../package/alerts/alert_checkpoint_time.py | 69 + .../alerts/alert_datanode_unmounted_data_dir.py | 74 + .../package/alerts/alert_ha_namenode_health.py | 75 + .../package/alerts/alert_metrics_deviation.py | 85 + .../package/alerts/alert_upgrade_finalized.py | 74 + .../services/HDFS/package/scripts/datanode.py | 38 + .../HDFS/package/scripts/hdfs_client.py | 38 + .../HDFS/package/scripts/journalnode.py | 38 + .../services/HDFS/package/scripts/namenode.py | 54 + .../services/HDFS/package/scripts/nfsgateway.py | 38 + .../HDFS/package/scripts/service_check.py | 30 + .../services/HDFS/package/scripts/snamenode.py | 38 + .../services/HDFS/package/scripts/zkfc_slave.py | 38 + .../services/HDFS/quicklinks/quicklinks.json | 76 + .../PERF/1.0/services/HDFS/themes/theme.json | 179 + .../stacks/PERF/1.0/services/HDFS/widgets.json | 649 ++ .../SLEEPY/configuration/sleepy-site.xml | 36 + .../PERF/1.0/services/SLEEPY/metainfo.xml | 57 + .../services/SLEEPY/package/scripts/dwarf.py | 38 + .../SLEEPY/package/scripts/service_check.py | 30 + .../PERF/1.0/services/SLEEPY/themes/theme.json | 65 + .../PERF/1.0/services/YARN/YARN_metrics.json | 3486 +++++++ .../PERF/1.0/services/YARN/YARN_widgets.json | 611 ++ .../stacks/PERF/1.0/services/YARN/alerts.json | 392 + .../YARN/configuration-mapred/mapred-env.xml | 50 + .../YARN/configuration-mapred/mapred-site.xml | 134 + .../YARN/configuration/capacity-scheduler.xml | 69 + .../YARN/configuration/ranger-yarn-audit.xml | 121 + .../ranger-yarn-plugin-properties.xml | 82 + .../configuration/ranger-yarn-policymgr-ssl.xml | 66 + .../YARN/configuration/ranger-yarn-security.xml | 58 + .../services/YARN/configuration/yarn-env.xml | 201 + .../services/YARN/configuration/yarn-log4j.xml | 103 + .../services/YARN/configuration/yarn-site.xml | 796 ++ .../stacks/PERF/1.0/services/YARN/kerberos.json | 279 + .../stacks/PERF/1.0/services/YARN/metainfo.xml | 352 + .../package/alerts/alert_nodemanager_health.py | 67 + .../alerts/alert_nodemanagers_summary.py | 68 + .../scripts/application_timeline_server.py | 38 + .../YARN/package/scripts/historyserver.py | 38 + .../package/scripts/mapred_service_check.py | 30 + .../YARN/package/scripts/mapreduce2_client.py | 38 + .../YARN/package/scripts/nodemanager.py | 38 + .../YARN/package/scripts/resourcemanager.py | 44 + .../YARN/package/scripts/service_check.py | 30 + .../YARN/package/scripts/yarn_client.py | 38 + .../YARN/quicklinks-mapred/quicklinks.json | 76 + .../services/YARN/quicklinks/quicklinks.json | 76 + .../1.0/services/YARN/themes-mapred/theme.json | 132 + .../PERF/1.0/services/YARN/themes/theme.json | 250 + .../PERF/1.0/services/ZOOKEEPER/metainfo.xml | 50 + .../ZOOKEEPER/package/scripts/service_check.py | 30 + .../package/scripts/zookeeper_client.py | 38 + .../package/scripts/zookeeper_server.py | 38 + .../svccomphost/ServiceComponentHostTest.java | 30 +- .../test_alert_segment_registration_status.py | 6 +- .../stacks/2.5/HIVE/test_hive_server_int.py | 112 + .../test/python/stacks/2.5/configs/hsi_ha.json | 1254 +++ .../main/admin/service_auto_start.js | 6 +- .../controllers/main/service/add_controller.js | 17 +- ambari-web/app/controllers/wizard.js | 45 +- .../app/controllers/wizard/step6_controller.js | 41 + ambari-web/app/mappers/stack_service_mapper.js | 2 +- .../configs/config_recommendation_parser.js | 20 +- .../common/configs/config_recommendations.js | 2 +- .../mixins/common/configs/enhanced_configs.js | 30 +- ambari-web/app/styles/alerts.less | 55 +- ambari-web/app/styles/application.less | 2531 +---- ambari-web/app/styles/bootstrap_overrides.less | 294 + ambari-web/app/styles/common.less | 17 - ambari-web/app/styles/dashboard.less | 350 + ambari-web/app/styles/hosts.less | 494 + ambari-web/app/styles/modal_popups.less | 190 +- ambari-web/app/styles/timepicker-overrides.less | 59 + ambari-web/app/styles/top-nav.less | 212 + ambari-web/app/styles/wizard.less | 611 ++ ambari-web/app/templates/application.hbs | 6 +- .../templates/common/host_progress_popup.hbs | 1 + .../common/modal_popups/select_groups_popup.hbs | 6 +- ambari-web/app/templates/installer.hbs | 2 +- ambari-web/app/templates/main.hbs | 4 +- ambari-web/app/templates/main/admin.hbs | 8 +- .../app/templates/main/admin/kerberos.hbs | 3 +- .../templates/main/admin/serviceAccounts.hbs | 6 +- .../templates/main/admin/service_auto_start.hbs | 102 +- .../stack_upgrade/stack_upgrade_wizard.hbs | 2 +- .../main/alerts/definition_details.hbs | 2 +- ambari-web/app/templates/main/dashboard.hbs | 2 +- .../main/dashboard/edit_widget_popup.hbs | 30 +- .../edit_widget_popup_single_threshold.hbs | 27 +- ambari-web/app/templates/main/host/configs.hbs | 4 +- .../app/templates/main/host/host_alerts.hbs | 10 +- ambari-web/app/templates/main/service.hbs | 2 +- .../main/service/all_services_actions.hbs | 18 +- .../public_option_disabled_window_body.hbs | 4 +- .../wizard/step9/step9HostTasksLogPopup.hbs | 1 + ambari-web/app/utils/ajax/ajax.js | 2 +- ambari-web/app/utils/host_progress_popup.js | 6 +- .../configs/service_configs_by_category_view.js | 2 +- ambari-web/app/views/common/controls_view.js | 11 +- .../views/common/helpers/status_icon_view.js | 2 +- ambari-web/app/views/common/table_view.js | 6 +- .../views/main/admin/stack_and_upgrade_view.js | 4 +- .../views/wizard/step9/hostLogPopupBody_view.js | 2 +- .../main/service/add_controller_test.js | 81 + .../test/controllers/wizard/step6_test.js | 85 + .../wizard/step9/hostLogPopupBody_view_test.js | 2 +- ambari-web/vendor/styles/bootstrap.css | 34 +- .../resources/ui/hive-web/app/routes/splash.js | 56 +- .../ambari/view/zeppelin/ZeppelinServlet.java | 103 +- .../src/main/resources/WEB-INF/index.jsp | 63 - docs/pom.xml | 2 +- 172 files changed, 39665 insertions(+), 2803 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/936626bd/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java index 052ee28,28bcd5f..0a861d8 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java @@@ -51,54 -50,35 +51,59 @@@ public class ConfigImpl implements Conf */ private final static Logger LOG = LoggerFactory.getLogger(ConfigImpl.class); ++ /** ++ * A label for {@link #hostLock} to use with the {@link LockFactory}. ++ */ ++ private static final String PROPERTY_LOCK_LABEL = "configurationPropertyLock"; ++ public static final String GENERATED_TAG_PREFIX = "generatedTag_"; - private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); + private final long configId; + private final Cluster cluster; + private final StackId stackId; + private final String type; + private final String tag; + private final Long version; - private Cluster cluster; - private StackId stackId; - private String type; - private volatile String tag; - private volatile Long version; - private volatile Map<String, String> properties; - private volatile Map<String, Map<String, String>> propertiesAttributes; - private ClusterConfigEntity entity; - private volatile Map<PropertyInfo.PropertyType, Set<String>> propertiesTypes; + /** + * The properties of this configuration. This cannot be a + * {@link ConcurrentMap} since we allow null values. Therefore, it must be + * synchronized externally. + */ + private Map<String, String> properties; - @Inject - private ClusterDAO clusterDAO; + /** + * A lock for reading/writing of {@link #properties} concurrently. + * + * @see #properties + */ + private final ReadWriteLock propertyLock; - @Inject - private Gson gson; + /** + * The property attributes for this configuration. + */ + private Map<String, Map<String, String>> propertiesAttributes; + + private Map<PropertyInfo.PropertyType, Set<String>> propertiesTypes; + + private final ClusterDAO clusterDAO; + + private final Gson gson; @Inject private ServiceConfigDAO serviceConfigDAO; - @Inject - private AmbariEventPublisher eventPublisher; + private final AmbariEventPublisher eventPublisher; @AssistedInject - public ConfigImpl(@Assisted Cluster cluster, @Assisted String type, @Assisted Map<String, String> properties, - @Assisted Map<String, Map<String, String>> propertiesAttributes, Injector injector) { + ConfigImpl(@Assisted Cluster cluster, @Assisted("type") String type, + @Assisted("tag") @Nullable String tag, + @Assisted Map<String, String> properties, + @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO, + Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) { + - propertyLock = lockFactory.newReadWriteLock("configurationPropertyLock"); ++ propertyLock = lockFactory.newReadWriteLock(PROPERTY_LOCK_LABEL); + this.cluster = cluster; this.type = type; this.properties = properties; @@@ -135,22 -87,15 +140,24 @@@ // when creating a brand new config without a backing entity, use the // cluster's desired stack as the config's stack stackId = cluster.getDesiredStackVersion(); - - injector.injectMembers(this); propertiesTypes = cluster.getConfigPropertiesTypes(type); - } + persist(entity); + configId = entity.getConfigId(); + } @AssistedInject - public ConfigImpl(@Assisted Cluster cluster, @Assisted ClusterConfigEntity entity, Injector injector) { + ConfigImpl(@Assisted Cluster cluster, @Assisted ClusterConfigEntity entity, + ClusterDAO clusterDAO, Gson gson, AmbariEventPublisher eventPublisher, + LockFactory lockFactory) { ++ propertyLock = lockFactory.newReadWriteLock(PROPERTY_LOCK_LABEL); ++ this.cluster = cluster; + this.clusterDAO = clusterDAO; + this.gson = gson; + this.eventPublisher = eventPublisher; + configId = entity.getConfigId(); + type = entity.getType(); tag = entity.getTag(); version = entity.getVersion(); @@@ -190,37 -109,10 +197,39 @@@ } /** - * Constructor for clients not using factory. + * Constructor. This will create an instance suitable only for + * representation/serialization as it is incomplete. + * + * @param type + * @param tag + * @param properties + * @param propertiesAttributes + * @param clusterDAO + * @param gson + * @param eventPublisher */ - public ConfigImpl(String type) { + @AssistedInject + ConfigImpl(@Assisted("type") String type, + @Assisted("tag") @Nullable String tag, + @Assisted Map<String, String> properties, + @Assisted @Nullable Map<String, Map<String, String>> propertiesAttributes, ClusterDAO clusterDAO, - Gson gson, AmbariEventPublisher eventPublisher) { ++ Gson gson, AmbariEventPublisher eventPublisher, LockFactory lockFactory) { ++ ++ propertyLock = lockFactory.newReadWriteLock(PROPERTY_LOCK_LABEL); + + this.tag = tag; this.type = type; + this.properties = new HashMap<>(properties); + this.propertiesAttributes = null == propertiesAttributes ? null + : new HashMap<>(propertiesAttributes); + this.clusterDAO = clusterDAO; + this.gson = gson; + this.eventPublisher = eventPublisher; + + cluster = null; + configId = 0; + version = 0L; + stackId = null; } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/936626bd/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java ----------------------------------------------------------------------