Repository: ambari Updated Branches: refs/heads/branch-metrics-dev 1200d7288 -> 7c5c6fec9
AMBARI-5707. Fixed unit tests. (swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b9154bce Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b9154bce Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b9154bce Branch: refs/heads/branch-metrics-dev Commit: b9154bcee555ebee781db7a1b3878eb79be98800 Parents: 1200d72 Author: Siddharth Wagle <[email protected]> Authored: Mon Oct 27 18:01:21 2014 -0700 Committer: Siddharth Wagle <[email protected]> Committed: Mon Oct 27 18:01:21 2014 -0700 ---------------------------------------------------------------------- .../pom.xml | 25 ++ .../ApplicationHistoryManagerImpl.java | 2 +- .../timeline/AbstractTimelineAggregator.java | 2 + .../timeline/HBaseTimelineMetricStore.java | 43 ++-- .../metrics/timeline/PhoenixHBaseAccessor.java | 2 +- .../TimelineMetricAggregatorHourly.java | 6 + .../TimelineMetricAggregatorMinute.java | 6 + .../TimelineMetricClusterAggregator.java | 6 + .../TimelineMetricClusterAggregatorHourly.java | 6 + .../timeline/TimelineMetricConfiguration.java | 13 ++ .../src/test/conf/ams-site.xml | 29 +++ .../src/test/conf/hadoop-policy.xml | 134 +++++++++++ .../src/test/conf/hbase-site.xml | 230 +++++++++++++++++++ .../TestApplicationHistoryClientService.java | 3 + .../TestApplicationHistoryServer.java | 172 +++++++++++++- pom.xml | 3 - 16 files changed, 653 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/pom.xml b/ambari-metrics/ambari-metrics-hadoop-timelineservice/pom.xml index 8ed0e2d..b147936 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/pom.xml +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/pom.xml @@ -258,6 +258,31 @@ <scope>test</scope> </dependency> + <!-- for unit tests only --> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-core</artifactId> + <version>4.0.0-incubating</version> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-module-junit4</artifactId> + <version>1.4.9</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito</artifactId> + <version>1.4.9</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-easymock</artifactId> + <version>1.4.9</version> + <scope>test</scope> + </dependency> + </dependencies> <profiles> http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerImpl.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerImpl.java index b56a595..ad29320 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerImpl.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryManagerImpl.java @@ -84,7 +84,7 @@ public class ApplicationHistoryManagerImpl extends AbstractService implements Configuration conf) { return ReflectionUtils.newInstance(conf.getClass( YarnConfiguration.APPLICATION_HISTORY_STORE, - FileSystemApplicationHistoryStore.class, + NullApplicationHistoryStore.class, ApplicationHistoryStore.class), conf); } http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java index e2a6e62..5b11b51 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/AbstractTimelineAggregator.java @@ -166,6 +166,8 @@ public abstract class AbstractTimelineAggregator implements Runnable { return getCheckpointCutOffMultiplier() * getSleepInterval(); } + protected abstract boolean isDisabled(); + protected abstract String getCheckpointLocation(); @JsonSubTypes({ @JsonSubTypes.Type(value = MetricClusterAggregate.class), http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java index 92cdec2..aae8555 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/HBaseTimelineMetricStore.java @@ -31,8 +31,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; - import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.Condition; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HBASE_SITE_CONFIGURATION_FILE; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.METRICS_SITE_CONFIGURATION_FILE; public class HBaseTimelineMetricStore extends AbstractService implements TimelineMetricStore { @@ -50,10 +51,12 @@ public class HBaseTimelineMetricStore extends AbstractService @Override protected void serviceInit(Configuration conf) throws Exception { - URL hbaseResUrl = getClass().getClassLoader().getResource - (TimelineMetricConfiguration.HBASE_SITE_CONFIGURATION_FILE); - URL amsResUrl = getClass().getClassLoader().getResource - (TimelineMetricConfiguration.METRICS_SITE_CONFIGURATION_FILE); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (classLoader == null) { + classLoader = getClass().getClassLoader(); + } + URL hbaseResUrl = classLoader.getResource(HBASE_SITE_CONFIGURATION_FILE); + URL amsResUrl = classLoader.getResource(METRICS_SITE_CONFIGURATION_FILE); LOG.info("Found hbase site configuration: " + hbaseResUrl); LOG.info("Found metric service configuration: " + amsResUrl); @@ -81,26 +84,36 @@ public class HBaseTimelineMetricStore extends AbstractService hBaseAccessor.initMetricSchema(); // Start the cluster aggregator - TimelineMetricClusterAggregator clusterAggregator = + TimelineMetricClusterAggregator minuteClusterAggregator = new TimelineMetricClusterAggregator(hBaseAccessor, metricsConf); - Thread aggregatorThread = new Thread(clusterAggregator); - aggregatorThread.start(); + if (!minuteClusterAggregator.isDisabled()) { + Thread aggregatorThread = new Thread(minuteClusterAggregator); + aggregatorThread.start(); + } // Start the cluster aggregator hourly - TimelineMetricClusterAggregatorHourly clusterAggregatorHourly = + TimelineMetricClusterAggregatorHourly hourlyClusterAggregator = new TimelineMetricClusterAggregatorHourly(hBaseAccessor, metricsConf); + if (!hourlyClusterAggregator.isDisabled()) { + Thread aggregatorThread = new Thread(hourlyClusterAggregator); + aggregatorThread.start(); + } // Start the 5 minute aggregator - TimelineMetricAggregatorMinute minuteAggregator = + TimelineMetricAggregatorMinute minuteHostAggregator = new TimelineMetricAggregatorMinute(hBaseAccessor, metricsConf); - Thread minuteAggregatorThread = new Thread(minuteAggregator); - minuteAggregatorThread.start(); + if (!minuteHostAggregator.isDisabled()) { + Thread minuteAggregatorThread = new Thread(minuteHostAggregator); + minuteAggregatorThread.start(); + } // Start hourly host aggregator - TimelineMetricAggregatorHourly aggregatorHourly = + TimelineMetricAggregatorHourly hourlyHostAggregator = new TimelineMetricAggregatorHourly(hBaseAccessor, metricsConf); - Thread aggregatorHourlyThread = new Thread(aggregatorHourly); - aggregatorHourlyThread.start(); + if (!hourlyHostAggregator.isDisabled()) { + Thread aggregatorHourlyThread = new Thread(hourlyHostAggregator); + aggregatorHourlyThread.start(); + } } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java index 9fc90b8..1298973 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java @@ -107,7 +107,7 @@ public class PhoenixHBaseAccessor { * cluster. * @return @java.sql.Connection */ - protected Connection getConnection() { + public Connection getConnection() { Connection connection = null; String zookeeperClientPort = hbaseConf.getTrimmed(ZOOKEEPER_CLIENT_PORT, "2181"); String zookeeperQuorum = hbaseConf.getTrimmed(ZOOKEEPER_QUORUM); http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorHourly.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorHourly.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorHourly.java index 559a464..5569422 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorHourly.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorHourly.java @@ -35,6 +35,7 @@ import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.ti import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.GET_METRIC_AGGREGATE_ONLY_SQL; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.METRICS_AGGREGATE_HOURLY_TABLE_NAME; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.METRICS_AGGREGATE_MINUTE_TABLE_NAME; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.*; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.DEFAULT_CHECKPOINT_LOCATION; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_HOUR_CHECKPOINT_CUTOFF_MULTIPLIER; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_HOUR_SLEEP_INTERVAL; @@ -166,4 +167,9 @@ public class TimelineMetricAggregatorHourly extends AbstractTimelineAggregator { protected Integer getCheckpointCutOffMultiplier() { return checkpointCutOffMultiplier; } + + @Override + protected boolean isDisabled() { + return metricsConf.getBoolean(HOST_AGGREGATOR_HOUR_DISABLED, false); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorMinute.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorMinute.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorMinute.java index ab7b1ee..274d0b5 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorMinute.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricAggregatorMinute.java @@ -37,6 +37,7 @@ import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.ti import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.METRICS_AGGREGATE_MINUTE_TABLE_NAME; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.METRICS_RECORD_TABLE_NAME; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.prepareGetMetricsSqlStmt; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.*; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.DEFAULT_CHECKPOINT_LOCATION; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_MINUTE_CHECKPOINT_CUTOFF_MULTIPLIER; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_MINUTE_SLEEP_INTERVAL; @@ -170,4 +171,9 @@ public class TimelineMetricAggregatorMinute extends AbstractTimelineAggregator { protected Integer getCheckpointCutOffMultiplier() { return checkpointCutOffMultiplier; } + + @Override + protected boolean isDisabled() { + return metricsConf.getBoolean(HOST_AGGREGATOR_MINUTE_DISABLED, false); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregator.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregator.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregator.java index dae65db..bdc3b53 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregator.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregator.java @@ -38,6 +38,7 @@ import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.ti import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.GET_METRIC_SQL; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.METRICS_RECORD_TABLE_NAME; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixTransactSQL.prepareGetMetricsSqlStmt; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.*; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_MINUTE_CHECKPOINT_CUTOFF_MULTIPLIER; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_MINUTE_SLEEP_INTERVAL; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_TIMESLICE_INTERVAL; @@ -173,6 +174,11 @@ public class TimelineMetricClusterAggregator extends AbstractTimelineAggregator return checkpointCutOffMultiplier; } + @Override + protected boolean isDisabled() { + return metricsConf.getBoolean(CLUSTER_AGGREGATOR_MINUTE_DISABLED, false); + } + private Map<TimelineClusterMetric, Double> sliceFromTimelineMetric( TimelineMetric timelineMetric, List<Long[]> timeSlices) { http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregatorHourly.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregatorHourly.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregatorHourly.java index 6ff5c92..1d70318 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregatorHourly.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricClusterAggregatorHourly.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.*; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_HOUR_CHECKPOINT_CUTOFF_MULTIPLIER; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_HOUR_SLEEP_INTERVAL; import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.DEFAULT_CHECKPOINT_LOCATION; @@ -75,5 +76,10 @@ public class TimelineMetricClusterAggregatorHourly extends AbstractTimelineAggre return 7200000l; } + @Override + protected boolean isDisabled() { + return metricsConf.getBoolean(CLUSTER_AGGREGATOR_HOUR_DISABLED, false); + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java index efd370b..dd952b4 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/TimelineMetricConfiguration.java @@ -87,4 +87,17 @@ public interface TimelineMetricConfiguration { public static final String GLOBAL_RESULT_LIMIT = "timeline.metrics.service.default.result.limit"; + + public static final String HOST_AGGREGATOR_MINUTE_DISABLED = + "timeline.metrics.host.aggregator.minute.disabled"; + + public static final String HOST_AGGREGATOR_HOUR_DISABLED = + "timeline.metrics.host.aggregator.hourly.disabled"; + + public static final String CLUSTER_AGGREGATOR_MINUTE_DISABLED = + "timeline.metrics.cluster.aggregator.minute.disabled"; + + public static final String CLUSTER_AGGREGATOR_HOUR_DISABLED = + "timeline.metrics.cluster.aggregator.hourly.disabled"; + } http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/ams-site.xml ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/ams-site.xml b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/ams-site.xml new file mode 100644 index 0000000..b08609d --- /dev/null +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/ams-site.xml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<!-- Empty site, all defaults should be initialized in the code --> +<configuration> + <property> + <name>test</name> + <value>testReady</value> + </property> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hadoop-policy.xml ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hadoop-policy.xml b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hadoop-policy.xml new file mode 100644 index 0000000..41bde16 --- /dev/null +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hadoop-policy.xml @@ -0,0 +1,134 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> + +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Put site-specific property overrides in this file. --> + +<configuration supports_final="true"> + <property> + <name>security.client.protocol.acl</name> + <value>*</value> + <description>ACL for ClientProtocol, which is used by user code + via the DistributedFileSystem. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.client.datanode.protocol.acl</name> + <value>*</value> + <description>ACL for ClientDatanodeProtocol, the client-to-datanode protocol + for block recovery. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.datanode.protocol.acl</name> + <value>*</value> + <description>ACL for DatanodeProtocol, which is used by datanodes to + communicate with the namenode. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.inter.datanode.protocol.acl</name> + <value>*</value> + <description>ACL for InterDatanodeProtocol, the inter-datanode protocol + for updating generation timestamp. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.namenode.protocol.acl</name> + <value>*</value> + <description>ACL for NamenodeProtocol, the protocol used by the secondary + namenode to communicate with the namenode. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.inter.tracker.protocol.acl</name> + <value>*</value> + <description>ACL for InterTrackerProtocol, used by the tasktrackers to + communicate with the jobtracker. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.job.client.protocol.acl</name> + <value>*</value> + <description>ACL for JobSubmissionProtocol, used by job clients to + communciate with the jobtracker for job submission, querying job status etc. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.job.task.protocol.acl</name> + <value>*</value> + <description>ACL for TaskUmbilicalProtocol, used by the map and reduce + tasks to communicate with the parent tasktracker. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.admin.operations.protocol.acl</name> + <value>hadoop</value> + <description>ACL for AdminOperationsProtocol. Used for admin commands. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + <property> + <name>security.refresh.usertogroups.mappings.protocol.acl</name> + <value>hadoop</value> + <description>ACL for RefreshUserMappingsProtocol. Used to refresh + users mappings. The ACL is a comma-separated list of user and + group names. The user and group list is separated by a blank. For + e.g. "alice,bob users,wheel". A special value of "*" means all + users are allowed.</description> + </property> + +<property> + <name>security.refresh.policy.protocol.acl</name> + <value>hadoop</value> + <description>ACL for RefreshAuthorizationPolicyProtocol, used by the + dfsadmin and mradmin commands to refresh the security policy in-effect. + The ACL is a comma-separated list of user and group names. The user and + group list is separated by a blank. For e.g. "alice,bob users,wheel". + A special value of "*" means all users are allowed.</description> + </property> + + +</configuration> http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hbase-site.xml ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hbase-site.xml b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hbase-site.xml new file mode 100644 index 0000000..c453900 --- /dev/null +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf/hbase-site.xml @@ -0,0 +1,230 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<configuration> + <property> + <name>hbase.defaults.for.version.skip</name> + <value>true</value> + </property> + <property> + <name>hbase.rootdir</name> + <value>file:///var/lib/hbase</value> + <description> + AMS service uses HBase as default storage backend. Set the rootdir for + HBase to either local filesystem path if using AMS in embedded mode or + to a HDFS dir, example: hdfs://namenode.example.org:9000/hbase. By + default HBase writes into /tmp. Change this configuration else all data + will be lost on machine restart. + </description> + </property> + <property> + <name>hbase.tmp.dir</name> + <value>/tmp</value> + <description> + Temporary directory on the local filesystem. + Change this setting to point to a location more permanent + than '/tmp' (The '/tmp' directory is often cleared on + machine restart). + </description> + </property> + <property> + <name>hbase.local.dir</name> + <value>${hbase.tmp.dir}/local</value> + <description>Directory on the local filesystem to be used as a local storage + </description> + </property> + <property> + <name>hbase.cluster.distributed</name> + <value>true</value> + <description> + The mode the cluster will be in. Possible values are false for + standalone mode and true for distributed mode. If false, startup will run + all HBase and ZooKeeper daemons together in the one JVM. + </description> + </property> + <property> + <name>hbase.master.wait.on.regionservers.mintostart</name> + <value>1</value> + <description> + Ensure that HBase Master waits for # many region server to start. + </description> + </property> + <property> + <name>hbase.zookeeper.quorum</name> + <value>localhost</value> + <description>Comma separated list of servers in the ZooKeeper Quorum. + For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com". + By default this is set to localhost for local and pseudo-distributed modes + of operation. For a fully-distributed setup, this should be set to a full + list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh + this is the list of servers which we will start/stop ZooKeeper on. + </description> + </property> + <property> + <name>hbase.master.info.bindAddress</name> + <value>0.0.0.0</value> + <description>The bind address for the HBase Master web UI</description> + </property> + <property> + <name>hbase.master.info.port</name> + <value>90010</value> + <description>The port for the HBase Master web UI.</description> + </property> + <property> + <name>hbase.regionserver.info.port</name> + <value>90030</value> + <description>The port for the HBase RegionServer web UI.</description> + </property> + <property> + <name>hbase.hregion.majorcompaction</name> + <value>0</value> + <description> + The time (in milliseconds) between 'major' compactions of all + HStoreFiles in a region. + 0 to disable automated major compactions. + </description> + </property> + <property> + <name>phoenix.query.spoolThresholdBytes</name> + <value>12582912</value> + <description> + Threshold size in bytes after which results from parallelly executed + query results are spooled to disk. Default is 20 mb. + </description> + </property> + <property> + <name>hbase.zookeeper.property.dataDir</name> + <value>${hbase.tmp.dir}/zookeeper</value> + <description> + Property from ZooKeeper's config zoo.cfg. + The directory where the snapshot is stored. + </description> + </property> + <property> + <name>hbase.client.scanner.caching</name> + <value>10000</value> + <description> + Number of rows that will be fetched when calling next on a scanner + if it is not served from (local, client) memory. + </description> + </property> + <property> + <name>hfile.block.cache.size</name> + <value>0.3</value> + <description> + Percentage of maximum heap (-Xmx setting) to allocate to block cache + used by a StoreFile. Default of 0.4 means allocate 40%. + </description> + </property> + <property> + <name>hbase.regionserver.global.memstore.upperLimit</name> + <value>0.5</value> + <description> + Maximum size of all memstores in a region server before new + updates are blocked and flushes are forced. Defaults to 40% of heap + </description> + </property> + <property> + <name>hbase.regionserver.global.memstore.lowerLimit</name> + <value>0.4</value> + <description> + When memstores are being forced to flush to make room in + memory, keep flushing until we hit this mark. Defaults to 35% of heap. + This value equal to hbase.regionserver.global.memstore.upperLimit causes + the minimum possible flushing to occur when updates are blocked due to + memstore limiting. + </description> + </property> + <property> + <name>phoenix.groupby.maxCacheSize</name> + <value>307200000</value> + <description> + Size in bytes of pages cached during GROUP BY spilling. Default is 100Mb. + </description> + </property> + <property> + <name>hbase.hregion.memstore.block.multiplier</name> + <value>4</value> + <description> + Block updates if memstore has hbase.hregion.memstore.block.multiplier + times hbase.hregion.memstore.flush.size bytes. Useful preventing runaway + memstore during spikes in update traffic. + </description> + </property> + <property> + <name>hbase.hstore.flusher.count</name> + <value>2</value> + <description> + The number of flush threads. With fewer threads, the MemStore flushes + will be queued. With more threads, the flushes will be executed in parallel, + increasing the load on HDFS, and potentially causing more compactions. + </description> + </property> + <property> + <name>phoenix.query.timeoutMs</name> + <value>1200000</value> + <description> + Number of milliseconds after which a query will timeout on the client. + Default is 10 min. + </description> + </property> + <property> + <name>hbase.client.scanner.timeout.period</name> + <value>900000</value> + <description> + Client scanner lease period in milliseconds. + </description> + </property> + <property> + <name>hbase.regionserver.thread.compaction.large</name> + <value>2</value> + <description> + Configuration key for the large compaction threads. + </description> + </property> + <property> + <name>hbase.regionserver.thread.compaction.small</name> + <value>3</value> + <description> + Configuration key for the small compaction threads. + </description> + </property> + <property> + <name>hbase.hstore.blockingStoreFiles</name> + <value>200</value> + <description> + If more than this number of StoreFiles exist in any one Store + (one StoreFile is written per flush of MemStore), updates are blocked for + this region until a compaction is completed, or until + hbase.hstore.blockingWaitTime has been exceeded. + </description> + </property> + <property> + <name>hbase.hregion.memstore.flush.size</name> + <value>134217728</value> + <description> + Memstore will be flushed to disk if size of the memstore exceeds this + number of bytes. Value is checked by a thread that runs every + hbase.server.thread.wakefrequency. + </description> + </property> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java index f54637f..6b06918 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryClientService.java @@ -47,8 +47,11 @@ import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; +// Timeline service client support is not enabled for AMS +@Ignore public class TestApplicationHistoryClientService extends ApplicationHistoryStoreTestUtils { http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java index d6d20af..38e1265 100644 --- a/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java +++ b/ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java @@ -18,31 +18,179 @@ package org.apache.hadoop.yarn.server.applicationhistoryservice; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - +import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.service.Service.STATE; import org.apache.hadoop.util.ExitUtil; import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.PhoenixHBaseAccessor; +import org.apache.zookeeper.ClientCnxn; +import org.easymock.EasyMock; import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import javax.security.auth.Subject; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.Statement; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_HOUR_DISABLED; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.CLUSTER_AGGREGATOR_MINUTE_DISABLED; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_HOUR_DISABLED; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.HOST_AGGREGATOR_MINUTE_DISABLED; +import static org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.TimelineMetricConfiguration.METRICS_SITE_CONFIGURATION_FILE; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; +import static org.powermock.api.easymock.PowerMock.mockStatic; +import static org.powermock.api.easymock.PowerMock.replayAll; +import static org.powermock.api.easymock.PowerMock.verifyAll; +import static org.powermock.api.support.membermodification.MemberMatcher.method; +import static org.powermock.api.support.membermodification.MemberModifier.suppress; +@RunWith(PowerMockRunner.class) +@PrepareForTest({ PhoenixHBaseAccessor.class, UserGroupInformation.class, + ClientCnxn.class }) +@PowerMockIgnore( {"javax.management.*"}) public class TestApplicationHistoryServer { ApplicationHistoryServer historyServer = null; + Configuration metricsConf = null; + + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + @Before + @SuppressWarnings("all") + public void setup() throws URISyntaxException, IOException { + folder.create(); + File hbaseSite = folder.newFile("hbase-site.xml"); + File amsSite = folder.newFile("ams-site.xml"); + File hadoopPolicy = folder.newFile("hadoop-policy.xml"); + + FileUtils.copyFile(new File("ambari-metrics/ambari-metrics-hadoop" + + "-timelineservice/src/test/conf/hadoop-policy.xml"), hadoopPolicy); + + FileUtils.writeStringToFile(hbaseSite, "<configuration>\n" + + " <property>\n" + + " <name>hbase.defaults.for.version.skip</name>\n" + + " <value>true</value>\n" + + " </property>" + + " <property> " + + " <name>hbase.zookeeper.quorum</name>\n" + + " <value>localhost</value>\n" + + " </property>" + + "</configuration>"); + + FileUtils.writeStringToFile(amsSite, "<configuration>\n" + + " <property>\n" + + " <name>test</name>\n" + + " <value>testReady</value>\n" + + " </property>\n" + + " <property>\n" + + " <name>timeline.metrics.host.aggregator.hourly.disabled</name>\n" + + " <value>true</value>\n" + + " <description>\n" + + " Disable host based hourly aggregations.\n" + + " </description>\n" + + " </property>\n" + + " <property>\n" + + " <name>timeline.metrics.host.aggregator.minute.disabled</name>\n" + + " <value>true</value>\n" + + " <description>\n" + + " Disable host based minute aggregations.\n" + + " </description>\n" + + " </property>\n" + + " <property>\n" + + " <name>timeline.metrics.cluster.aggregator.hourly.disabled</name>\n" + + " <value>true</value>\n" + + " <description>\n" + + " Disable cluster based hourly aggregations.\n" + + " </description>\n" + + " </property>\n" + + " <property>\n" + + " <name>timeline.metrics.cluster.aggregator.minute.disabled</name>\n" + + " <value>true</value>\n" + + " <description>\n" + + " Disable cluster based minute aggregations.\n" + + " </description>\n" + + " </property>" + + "</configuration>"); + + ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader(); + + // Add the conf dir to the classpath + // Chain the current thread classloader + URLClassLoader urlClassLoader = null; + try { +// urlClassLoader = new URLClassLoader(new URL[] { +// new File("ambari-metrics/ambari-metrics-hadoop-timelineservice/src/test/conf").toURI().toURL() +// }, currentClassLoader); + + urlClassLoader = new URLClassLoader(new URL[] { + folder.getRoot().toURI().toURL() }, currentClassLoader); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + Thread.currentThread().setContextClassLoader(urlClassLoader); + metricsConf = new Configuration(false); + metricsConf.addResource(Thread.currentThread().getContextClassLoader() + .getResource(METRICS_SITE_CONFIGURATION_FILE).toURI().toURL()); + assertNotNull(metricsConf.get("test")); + } // simple test init/start/stop ApplicationHistoryServer. Status should change. @Test(timeout = 50000) public void testStartStopServer() throws Exception { - historyServer = new ApplicationHistoryServer(); Configuration config = new YarnConfiguration(); + UserGroupInformation ugi = + UserGroupInformation.createUserForTesting("ambari", new String[] {"ambari"}); + + mockStatic(UserGroupInformation.class); + expect(UserGroupInformation.getCurrentUser()).andReturn(ugi).anyTimes(); + expect(UserGroupInformation.isSecurityEnabled()).andReturn(false).anyTimes(); + config.set(YarnConfiguration.APPLICATION_HISTORY_STORE, + "org.apache.hadoop.yarn.server.applicationhistoryservice.NullApplicationHistoryStore"); + + Connection connection = createNiceMock(Connection.class); + Statement stmt = createNiceMock(Statement.class); + mockStatic(DriverManager.class); + expect(DriverManager.getConnection("jdbc:phoenix:localhost:2181:/hbase")) + .andReturn(connection).anyTimes(); + expect(connection.createStatement()).andReturn(stmt).anyTimes(); + suppress(method(Statement.class, "executeUpdate", String.class)); + connection.close(); + expectLastCall(); + + EasyMock.replay(connection, stmt); + replayAll(); + + historyServer = new ApplicationHistoryServer(); historyServer.init(config); + + verifyAll(); + assertEquals(STATE.INITED, historyServer.getServiceState()); - assertEquals(3, historyServer.getServices().size()); + assertEquals(4, historyServer.getServices().size()); ApplicationHistoryClientService historyService = - historyServer.getClientService(); + historyServer.getClientService(); assertNotNull(historyServer.getClientService()); assertEquals(STATE.INITED, historyService.getServiceState()); @@ -54,13 +202,19 @@ public class TestApplicationHistoryServer { } // test launch method + @Ignore @Test(timeout = 60000) public void testLaunch() throws Exception { + UserGroupInformation ugi = + UserGroupInformation.createUserForTesting("ambari", new String[] {"ambari"}); + mockStatic(UserGroupInformation.class); + expect(UserGroupInformation.getCurrentUser()).andReturn(ugi).anyTimes(); + expect(UserGroupInformation.isSecurityEnabled()).andReturn(false).anyTimes(); + ExitUtil.disableSystemExit(); try { - historyServer = - ApplicationHistoryServer.launchAppHistoryServer(new String[0]); + historyServer = ApplicationHistoryServer.launchAppHistoryServer(new String[0]); } catch (ExitUtil.ExitException e) { assertEquals(0, e.status); ExitUtil.resetFirstExitException(); http://git-wip-us.apache.org/repos/asf/ambari/blob/b9154bce/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index f041a28..c9579fc 100644 --- a/pom.xml +++ b/pom.xml @@ -23,9 +23,6 @@ <name>Ambari Main</name> <version>1.3.0-SNAPSHOT</version> <description>Ambari</description> - <modules> - <module>ambari-metrics</module> - </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <clover.license>${user.home}/clover.license</clover.license>
