summaryrefslogtreecommitdiff
path: root/zookeeper-server/src/test/java/org/apache/zookeeper
diff options
context:
space:
mode:
authorEnrico Olivelli <eolivelli@apache.org>2019-06-04 10:55:09 +0200
committerNorbert Kalmar <nkalmar@apache.org>2019-06-04 10:55:09 +0200
commit6af151a7e44760c33165e58d3b33a4d2760283a4 (patch)
tree2a7f3799f317b8ab19c5e1ba5835ec32f6c83714 /zookeeper-server/src/test/java/org/apache/zookeeper
parentba6a0391082d984b38c509ce73ddc22896d95c7e (diff)
downloadzookeeper-6af151a7e44760c33165e58d3b33a4d2760283a4.tar.gz
ZOOKEEPER-3366: Pluggable metrics system for ZooKeeper - move remaining metrics to MetricsProvider
Migrate all remaining metrics to MetricsProvider. We are introducing now *Gauges* which are callbacks to be called when the Provider needs to publish current values, a Gauge is a numeric value that can go up and down. As during the lifecycle of a ZK server process we can have several ZooKeeperServer instances (we have several subclasses), depending on the role of the local peer, sometimes we have to clean up unused Gauges. The old approach in 4lw and on http admin API was to hard code metrics, with multiple 'instanceof' conditions. So we introduce ZooKeeperServer#registerMetrics and ZooKeeperServer#unregisterMetrics: these overridable functions enable each ZooKeeperServer subclass to declare specific Gauges. We are also introducing ZooKeeperServer#collectMonitorValues in order to push non-metrics to monitor commands (admin and 4lw), like "server state" or "version". Author: Enrico Olivelli <eolivelli@apache.org> Reviewers: Norbert Kalmar <nkalmar@apache.org> Closes #918 from eolivelli/fix/other-metrics
Diffstat (limited to 'zookeeper-server/src/test/java/org/apache/zookeeper')
-rw-r--r--zookeeper-server/src/test/java/org/apache/zookeeper/metrics/BaseTestMetricsProvider.java6
-rw-r--r--zookeeper-server/src/test/java/org/apache/zookeeper/server/admin/CommandsTest.java9
-rw-r--r--zookeeper-server/src/test/java/org/apache/zookeeper/test/ObserverMasterTest.java18
3 files changed, 19 insertions, 14 deletions
diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/metrics/BaseTestMetricsProvider.java b/zookeeper-server/src/test/java/org/apache/zookeeper/metrics/BaseTestMetricsProvider.java
index 7c6e1ae6f..3e2301997 100644
--- a/zookeeper-server/src/test/java/org/apache/zookeeper/metrics/BaseTestMetricsProvider.java
+++ b/zookeeper-server/src/test/java/org/apache/zookeeper/metrics/BaseTestMetricsProvider.java
@@ -85,10 +85,8 @@ public abstract class BaseTestMetricsProvider implements MetricsProvider {
@Override
public MetricsContext getRootContext() {
- if (!getRootContextCalled.compareAndSet(false, true)) {
- // called twice
- throw new IllegalStateException();
- }
+ getRootContextCalled.set(true);
+
return NullMetricsProvider.NullMetricsContext.INSTANCE;
}
diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/server/admin/CommandsTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/server/admin/CommandsTest.java
index f8813d006..be803c0e0 100644
--- a/zookeeper-server/src/test/java/org/apache/zookeeper/server/admin/CommandsTest.java
+++ b/zookeeper-server/src/test/java/org/apache/zookeeper/server/admin/CommandsTest.java
@@ -202,6 +202,15 @@ public class CommandsTest extends ClientBase {
Map<String, Object> metrics = MetricsUtils.currentServerMetrics();
for (String metric : metrics.keySet()) {
+ boolean alreadyDefined = fields
+ .stream()
+ .anyMatch(f -> {
+ return f.key.equals(metric);
+ });
+ if (alreadyDefined) {
+ // known metrics are defined statically in the block above
+ continue;
+ }
if (metric.startsWith("avg_")) {
fields.add(new Field(metric, Double.class));
} else {
diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/test/ObserverMasterTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/test/ObserverMasterTest.java
index 4e07d4875..f72063418 100644
--- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/ObserverMasterTest.java
+++ b/zookeeper-server/src/test/java/org/apache/zookeeper/test/ObserverMasterTest.java
@@ -516,34 +516,32 @@ public class ObserverMasterTest extends QuorumPeerTestBase implements Watcher{
Assert.assertTrue("observer not emitting observer_master_id", stats.containsKey("observer_master_id"));
// check the stats for the first peer
- stats = Commands.runCommand("mntr", q1.getQuorumPeer().getActiveServer(), emptyMap).toMap();
if (testObserverMaster) {
if (q1.getQuorumPeer().leader == null) {
- Assert.assertEquals(1, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(1), q1.getQuorumPeer().getSynced_observers_metric());
} else {
- Assert.assertEquals(0, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(0), q1.getQuorumPeer().getSynced_observers_metric());
}
} else {
if (q1.getQuorumPeer().leader == null) {
- Assert.assertNull(stats.get("synced_observers"));
+ Assert.assertNull(q1.getQuorumPeer().getSynced_observers_metric());
} else {
- Assert.assertEquals(1, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(1), q1.getQuorumPeer().getSynced_observers_metric());
}
}
// check the stats for the second peer
- stats = Commands.runCommand("mntr", q2.getQuorumPeer().getActiveServer(), emptyMap).toMap();
if (testObserverMaster) {
if (q2.getQuorumPeer().leader == null) {
- Assert.assertEquals(1, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(1), q2.getQuorumPeer().getSynced_observers_metric());
} else {
- Assert.assertEquals(0, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(0), q2.getQuorumPeer().getSynced_observers_metric());
}
} else {
if (q2.getQuorumPeer().leader == null) {
- Assert.assertNull(stats.get("synced_observers"));
+ Assert.assertNull(q2.getQuorumPeer().getSynced_observers_metric());
} else {
- Assert.assertEquals(1, stats.get("synced_observers"));
+ Assert.assertEquals(Integer.valueOf(1), q2.getQuorumPeer().getSynced_observers_metric());
}
}