You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/02/16 13:34:01 UTC
lucene-solr:jira/solr-9858: SOLR-9858 More cleanup & tests.
Repository: lucene-solr
Updated Branches:
refs/heads/jira/solr-9858 f0ea3b792 -> 4fea121b3
SOLR-9858 More cleanup & tests.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4fea121b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4fea121b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4fea121b
Branch: refs/heads/jira/solr-9858
Commit: 4fea121b33d6bcaf185ba707f49b48060ba72e59
Parents: f0ea3b7
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Thu Feb 16 14:33:45 2017 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Thu Feb 16 14:33:45 2017 +0100
----------------------------------------------------------------------
.../handler/admin/MetricsCollectorHandler.java | 12 ++--
.../apache/solr/metrics/SolrMetricManager.java | 4 +-
.../reporters/solr/SolrOverseerReporter.java | 71 +++++++++++++-------
.../reporters/solr/SolrReplicaReporter.java | 35 ++++++----
.../metrics/reporters/solr/SolrReporter.java | 61 +++++++++--------
.../src/test-files/solr/solr-solrreporter.xml | 4 +-
.../reporters/solr/SolrCloudReportersTest.java | 28 ++++++--
.../reporters/solr/SolrReplicaReporterTest.java | 7 +-
8 files changed, 139 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/java/org/apache/solr/handler/admin/MetricsCollectorHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/MetricsCollectorHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/MetricsCollectorHandler.java
index fd47768..bf1e657 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/MetricsCollectorHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/MetricsCollectorHandler.java
@@ -68,12 +68,12 @@ import org.slf4j.LoggerFactory;
* </ul>
* Remaining fields are assumed to be single-valued, and to contain metric attributes and their values. Example:
* <pre>
- * <doc>
- * <field name="_group_">solr.core.collection1.shard1.leader</field>
- * <field name="_reporter_">solr.core.collection1.shard1.replica1.core_node3</field>
- * <field name="metric">INDEX.merge.errors</field>
- * <field name="value">0</field>
- * </doc>
+ * <doc>
+ * <field name="_group_">solr.core.collection1.shard1.leader</field>
+ * <field name="_reporter_">core_node3</field>
+ * <field name="metric">INDEX.merge.errors</field>
+ * <field name="value">0</field>
+ * </doc>
* </pre>
*/
public class MetricsCollectorHandler extends RequestHandlerBase {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
index af920b1..da1ee96 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -892,7 +892,7 @@ public class SolrMetricManager {
attrs.put("group", "replica");
Map<String, Object> initArgs = new HashMap<>();
initArgs.put("groupId", leaderRegistryName);
- initArgs.put("period", 30);
+ initArgs.put("period", 60);
PluginInfo defaultPlugin = new PluginInfo("reporter", attrs, new NamedList(), null);
// collect infos and normalize
@@ -917,7 +917,7 @@ public class SolrMetricManager {
attrs.put("name", "overseerDefault");
attrs.put("group", "overseer");
Map<String, Object> initArgs = new HashMap<>();
- initArgs.put("period", 30);
+ initArgs.put("period", 60);
PluginInfo defaultPlugin = new PluginInfo("reporter", attrs, new NamedList(), null);
List<PluginInfo> infos = prepareCloudPlugins(pluginInfos, "overseer", SolrOverseerReporter.class.getName(),
attrs, initArgs, defaultPlugin);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrOverseerReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrOverseerReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrOverseerReporter.java
index f1f22a9..f05d6c1 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrOverseerReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrOverseerReporter.java
@@ -16,7 +16,6 @@ import org.apache.solr.cloud.Overseer;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
-import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.handler.admin.MetricsCollectorHandler;
@@ -28,27 +27,47 @@ import org.slf4j.LoggerFactory;
/**
* This reporter sends selected metrics from local registries to {@link Overseer}.
+ * <p>The following configuration properties are supported:</p>
+ * <ul>
+ * <li>handler - (optional str) handler path where reports are sent. Default is
+ * {@link MetricsCollectorHandler#HANDLER_PATH}.</li>
+ * <li>period - (optional int) how often reports are sent, in seconds. Default is 60. Setting this
+ * to 0 disables the reporter.</li>
+ * <li>report - (optional multiple lst) report configuration(s), see below.</li>
+ * </ul>
+ * Each report configuration consist of the following properties:
+ * <ul>
+ * <li>registry - (required str) regex pattern matching source registries (see {@link SolrMetricManager#registryNames(String...)}),
+ * may contain capture groups.</li>
+ * <li>group - (required str) target registry name where metrics will be grouped. This can be a regex pattern that
+ * contains back-references to capture groups collected by <code>registry</code> pattern</li>
+ * <li>label - (optional str) optional prefix to prepend to metric names, may contain back-references to
+ * capture groups collected by <code>registry</code> pattern</li>
+ * <li>filter - (optional multiple str) regex expression(s) matching selected metrics to be reported.</li>
+ * </ul>
+ * NOTE: this reporter uses predefined "overseer" group, and it's always created even if explicit configuration
+ * is missing. Default configuration uses report specifications from {@link #DEFAULT_REPORTS}.
* <p>Example configuration:</p>
* <pre>
- * <reporter name="test" group="overseer">
- * <str name="handler">/admin/metrics/collector</str>
- * <int name="period">11</int>
- * <lst name="report">
- * <str name="group">overseer</str>
- * <str name="label">jvm</str>
- * <str name="registry">solr\.jvm</str>
- * <str name="filter">memory\.total\..*</str>
- * <str name="filter">memory\.heap\..*</str>
- * <str name="filter">os\.SystemLoadAverage</str>
- * <str name="filter">threads\.count</str>
- * </lst>
- * <lst name="report">
- * <str name="group">overseer</str>
- * <str name="label">leader.$1</str>
- * <str name="registry">solr\.core\.(.*)\.leader</str>
- * <str name="filter">UPDATE\./update/.*</str>
- * </lst>
- * </reporter>
+ * <reporter name="test" group="overseer">
+ * <str name="handler">/admin/metrics/collector</str>
+ * <int name="period">11</int>
+ * <lst name="report">
+ * <str name="group">overseer</str>
+ * <str name="label">jvm</str>
+ * <str name="registry">solr\.jvm</str>
+ * <str name="filter">memory\.total\..*</str>
+ * <str name="filter">memory\.heap\..*</str>
+ * <str name="filter">os\.SystemLoadAverage</str>
+ * <str name="filter">threads\.count</str>
+ * </lst>
+ * <lst name="report">
+ * <str name="group">overseer</str>
+ * <str name="label">leader.$1</str>
+ * <str name="registry">solr\.core\.(.*)\.leader</str>
+ * <str name="filter">UPDATE\./update/.*</str>
+ * </lst>
+ * </reporter>
* </pre>
*
*/
@@ -94,7 +113,7 @@ public class SolrOverseerReporter extends SolrMetricReporter {
* Create a reporter for metrics managed in a named registry.
*
* @param metricManager metric manager
- * @param registryName unlike in other reporters, this is the node id
+ * @param registryName this is ignored
*/
public SolrOverseerReporter(SolrMetricManager metricManager, String registryName) {
super(metricManager, registryName);
@@ -147,6 +166,9 @@ public class SolrOverseerReporter extends SolrMetricReporter {
}
public void setCoreContainer(CoreContainer cc) {
+ if (reporter != null) {
+ reporter.close();;
+ }
// start reporter only in cloud mode
if (!cc.isZooKeeperAware()) {
return;
@@ -157,7 +179,7 @@ public class SolrOverseerReporter extends SolrMetricReporter {
HttpClient httpClient = cc.getUpdateShardHandler().getHttpClient();
ZkController zk = cc.getZkController();
String reporterId = zk.getNodeName();
- reporter = SolrReporter.Builder.forRegistries(metricManager, reports)
+ reporter = SolrReporter.Builder.forReports(metricManager, reports)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.withHandler(handler)
@@ -172,7 +194,8 @@ public class SolrOverseerReporter extends SolrMetricReporter {
}
// TODO: fix this when there is an elegant way to retrieve URL of a node that runs Overseer leader.
- private static class OverseerUrlSupplier implements Supplier<String> {
+ // package visibility for unit tests
+ static class OverseerUrlSupplier implements Supplier<String> {
private static final long DEFAULT_INTERVAL = 30000; // 30s
private ZkController zk;
private String lastKnownUrl = null;
@@ -188,7 +211,7 @@ public class SolrOverseerReporter extends SolrMetricReporter {
if (zk == null) {
return null;
}
- // primitive caching for interval
+ // primitive caching for lastKnownUrl
long now = System.currentTimeMillis();
if (lastKnownUrl != null && (now - lastCheckTime) < interval) {
return lastKnownUrl;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReplicaReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReplicaReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReplicaReporter.java
index a303ffc..4496e8c 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReplicaReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReplicaReporter.java
@@ -19,7 +19,6 @@ package org.apache.solr.metrics.reporters.solr;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -38,13 +37,23 @@ import org.slf4j.LoggerFactory;
/**
* This class reports selected metrics from replicas to shard leader.
+ * <p>The following configuration properties are supported:</p>
+ * <ul>
+ * <li>handler - (optional str) handler path where reports are sent. Default is
+ * {@link MetricsCollectorHandler#HANDLER_PATH}.</li>
+ * <li>period - (optional int) how often reports are sent, in seconds. Default is 60. Setting this
+ * to 0 disables the reporter.</li>
+ * <li>filter - (optional multiple str) regex expression(s) matching selected metrics to be reported.</li>
+ * </ul>
+ * NOTE: this reporter uses predefined "replica" group, and it's always created even if explicit configuration
+ * is missing. Default configuration uses filters defined in {@link #DEFAULT_FILTERS}.
* <p>Example configuration:</p>
* <pre>
- * <reporter name="test" group="replica">
- * <int name="period">11</int>
- * <str name="filter">UPDATE\./update/.*requests</str>
- * <str name="filter">QUERY\./select.*requests</str>
- * </reporter>
+ * <reporter name="test" group="replica">
+ * <int name="period">11</int>
+ * <str name="filter">UPDATE\./update/.*requests</str>
+ * <str name="filter">QUERY\./select.*requests</str>
+ * </reporter>
* </pre>
*/
public class SolrReplicaReporter extends SolrMetricReporter {
@@ -69,7 +78,7 @@ public class SolrReplicaReporter extends SolrMetricReporter {
/**
* Create a reporter for metrics managed in a named registry.
*
- * @param metricManager
+ * @param metricManager metric manager
* @param registryName registry to use, one of registries managed by
* {@link SolrMetricManager}
*/
@@ -89,11 +98,6 @@ public class SolrReplicaReporter extends SolrMetricReporter {
this.period = period;
}
- // for unit tests
- int getPeriod() {
- return period;
- }
-
public void setFilter(List<String> filterConfig) {
if (filterConfig == null || filterConfig.isEmpty()) {
return;
@@ -101,6 +105,11 @@ public class SolrReplicaReporter extends SolrMetricReporter {
filters = filterConfig;
}
+ // for unit tests
+ int getPeriod() {
+ return period;
+ }
+
@Override
protected void validate() throws IllegalStateException {
if (period < 1) {
@@ -134,7 +143,7 @@ public class SolrReplicaReporter extends SolrMetricReporter {
// our id is coreNodeName
String id = core.getCoreDescriptor().getCloudDescriptor().getCoreNodeName();
SolrReporter.Report spec = new SolrReporter.Report(groupId, null, registryName, filters);
- reporter = SolrReporter.Builder.forRegistries(metricManager, Collections.singletonList(spec))
+ reporter = SolrReporter.Builder.forReports(metricManager, Collections.singletonList(spec))
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.withHandler(handler)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReporter.java
index 3e8597d..d3e8759 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrReporter.java
@@ -117,7 +117,7 @@ public class SolrReporter extends ScheduledReporter {
public static class Builder {
private final SolrMetricManager metricManager;
- private final List<Report> metrics;
+ private final List<Report> reports;
private String reporterId;
private TimeUnit rateUnit;
private TimeUnit durationUnit;
@@ -130,17 +130,16 @@ public class SolrReporter extends ScheduledReporter {
/**
* Create a builder for SolrReporter.
* @param metricManager metric manager that is the source of metrics
- * @param metrics patterns to select registries, see {@link SolrMetricManager#registryNames(String...)},
- * and the corresponding metrics prefixes, see {@link org.apache.solr.metrics.SolrMetricManager.PrefixFilter}.
+ * @param reports report definitions
* @return builder
*/
- public static Builder forRegistries(SolrMetricManager metricManager, List<Report> metrics) {
- return new Builder(metricManager, metrics);
+ public static Builder forReports(SolrMetricManager metricManager, List<Report> reports) {
+ return new Builder(metricManager, reports);
}
- private Builder(SolrMetricManager metricManager, List<Report> metrics) {
+ private Builder(SolrMetricManager metricManager, List<Report> reports) {
this.metricManager = metricManager;
- this.metrics = metrics;
+ this.reports = reports;
this.rateUnit = TimeUnit.SECONDS;
this.durationUnit = TimeUnit.MILLISECONDS;
this.skipHistograms = false;
@@ -172,7 +171,7 @@ public class SolrReporter extends ScheduledReporter {
/**
* Histograms are difficult / impossible to aggregate, so it may not be
* worth to report them.
- * @param skipHistograms
+ * @param skipHistograms when true then skip histograms from reports
* @return {@code this}
*/
public Builder skipHistograms(boolean skipHistograms) {
@@ -182,7 +181,7 @@ public class SolrReporter extends ScheduledReporter {
/**
* Individual values from {@link org.apache.solr.metrics.AggregateMetric} may not be worth to report.
- * @param skipAggregateValues
+ * @param skipAggregateValues when tru then skip reporting individual values from the metric
* @return {@code this}
*/
public Builder skipAggregateValues(boolean skipAggregateValues) {
@@ -204,7 +203,7 @@ public class SolrReporter extends ScheduledReporter {
/**
* Use this id to identify metrics from this instance.
*
- * @param reporterId
+ * @param reporterId reporter id
* @return {@code this}
*/
public Builder withReporterId(String reporterId) {
@@ -243,7 +242,7 @@ public class SolrReporter extends ScheduledReporter {
* @return configured instance of reporter
*/
public SolrReporter build(HttpClient client, Supplier<String> urlProvider) {
- return new SolrReporter(client, urlProvider, metricManager, metrics, handler, reporterId, rateUnit, durationUnit,
+ return new SolrReporter(client, urlProvider, metricManager, reports, handler, reporterId, rateUnit, durationUnit,
params, skipHistograms, skipAggregateValues, cloudClient);
}
@@ -253,7 +252,7 @@ public class SolrReporter extends ScheduledReporter {
private String handler;
private Supplier<String> urlProvider;
private SolrClientCache clientCache;
- private List<CompiledSpecification> specs;
+ private List<CompiledReport> compiledReports;
private SolrMetricManager metricManager;
private boolean skipHistograms;
private boolean skipAggregateValues;
@@ -261,17 +260,17 @@ public class SolrReporter extends ScheduledReporter {
private ModifiableSolrParams params;
private Map<String, Object> metadata;
- private static final class CompiledSpecification {
+ private static final class CompiledReport {
String group;
String label;
Pattern registryPattern;
MetricFilter filter;
- CompiledSpecification(Report spec) throws PatternSyntaxException {
- this.group = spec.groupPattern;
- this.label = spec.labelPattern;
- this.registryPattern = Pattern.compile(spec.registryPattern);
- this.filter = new SolrMetricManager.RegexFilter(spec.metricFilters);
+ CompiledReport(Report report) throws PatternSyntaxException {
+ this.group = report.groupPattern;
+ this.label = report.labelPattern;
+ this.registryPattern = Pattern.compile(report.registryPattern);
+ this.filter = new SolrMetricManager.RegexFilter(report.metricFilters);
}
}
@@ -288,14 +287,14 @@ public class SolrReporter extends ScheduledReporter {
}
this.handler = handler;
this.clientCache = new SolrClientCache(httpClient);
- this.specs = new ArrayList<>();
- metrics.forEach(spec -> {
- MetricFilter filter = new SolrMetricManager.RegexFilter(spec.metricFilters);
+ this.compiledReports = new ArrayList<>();
+ metrics.forEach(report -> {
+ MetricFilter filter = new SolrMetricManager.RegexFilter(report.metricFilters);
try {
- CompiledSpecification cs = new CompiledSpecification(spec);
- specs.add(cs);
+ CompiledReport cs = new CompiledReport(report);
+ compiledReports.add(cs);
} catch (PatternSyntaxException e) {
- log.warn("Skipping spec with invalid registryPattern: " + spec.registryPattern, e);
+ log.warn("Skipping report with invalid registryPattern: " + report.registryPattern, e);
}
});
this.skipHistograms = skipHistograms;
@@ -333,24 +332,24 @@ public class SolrReporter extends ScheduledReporter {
}
UpdateRequest req = new UpdateRequest(handler);
req.setParams(params);
- specs.forEach(spec -> {
- Set<String> registryNames = metricManager.registryNames(spec.registryPattern);
+ compiledReports.forEach(report -> {
+ Set<String> registryNames = metricManager.registryNames(report.registryPattern);
registryNames.forEach(registryName -> {
- String label = spec.label;
+ String label = report.label;
if (label != null && label.indexOf('$') != -1) {
// label with back-references
- Matcher m = spec.registryPattern.matcher(registryName);
+ Matcher m = report.registryPattern.matcher(registryName);
label = m.replaceFirst(label);
}
final String effectiveLabel = label;
- String group = spec.group;
+ String group = report.group;
if (group.indexOf('$') != -1) {
// group with back-references
- Matcher m = spec.registryPattern.matcher(registryName);
+ Matcher m = report.registryPattern.matcher(registryName);
group = m.replaceFirst(group);
}
final String effectiveGroup = group;
- MetricUtils.toSolrInputDocuments(metricManager.registry(registryName), Collections.singletonList(spec.filter), MetricFilter.ALL,
+ MetricUtils.toSolrInputDocuments(metricManager.registry(registryName), Collections.singletonList(report.filter), MetricFilter.ALL,
skipHistograms, skipAggregateValues, metadata, doc -> {
doc.setField(REGISTRY_ID, registryName);
doc.setField(GROUP_ID, effectiveGroup);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/test-files/solr/solr-solrreporter.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/solr-solrreporter.xml b/solr/core/src/test-files/solr/solr-solrreporter.xml
index 05420d4..d341d45 100644
--- a/solr/core/src/test-files/solr/solr-solrreporter.xml
+++ b/solr/core/src/test-files/solr/solr-solrreporter.xml
@@ -39,13 +39,13 @@
<metrics>
<reporter name="test" group="replica">
- <int name="period">11</int>
+ <int name="period">5</int>
<str name="filter">UPDATE\./update/.*requests</str>
<str name="filter">QUERY\./select.*requests</str>
</reporter>
<reporter name="test" group="overseer">
<str name="handler">/admin/metrics/collector</str>
- <int name="period">11</int>
+ <int name="period">5</int>
<lst name="report">
<str name="group">overseer</str>
<str name="label">jvm</str>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
index 1539e16..f7431df 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
@@ -19,10 +19,12 @@ package org.apache.solr.metrics.reporters.solr;
import java.nio.file.Paths;
import java.util.Map;
+import com.codahale.metrics.Metric;
import org.apache.commons.io.IOUtils;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.core.CoreContainer;
+import org.apache.solr.metrics.AggregateMetric;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricReporter;
import org.junit.Before;
@@ -55,6 +57,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
.setMaxShardsPerNode(4)
.process(cluster.getSolrClient());
waitForState("Expected test_collection with 2 shards and 2 replicas", "test_collection", clusterShape(2, 2));
+ Thread.sleep(10000);
cluster.getJettySolrRunners().forEach(jetty -> {
CoreContainer cc = jetty.getCoreContainer();
SolrMetricManager metricManager = cc.getMetricManager();
@@ -64,7 +67,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertNotNull(reporter);
assertTrue(reporter.toString(), reporter instanceof SolrOverseerReporter);
SolrOverseerReporter sor = (SolrOverseerReporter)reporter;
- assertEquals(11, sor.getPeriod());
+ assertEquals(5, sor.getPeriod());
for (String registryName : metricManager.registryNames(".*\\.shard[0-9]\\.core.*")) {
reporters = metricManager.getReporters(registryName);
assertEquals(reporters.toString(), 1, reporters.size());
@@ -72,12 +75,29 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertNotNull(reporter);
assertTrue(reporter.toString(), reporter instanceof SolrReplicaReporter);
SolrReplicaReporter srr = (SolrReplicaReporter)reporter;
- assertEquals(11, srr.getPeriod());
+ assertEquals(5, srr.getPeriod());
}
for (String registryName : metricManager.registryNames(".*\\.leader")) {
reporters = metricManager.getReporters(registryName);
// no reporters registered for leader registry
assertEquals(reporters.toString(), 0, reporters.size());
+ // verify specific metrics
+ Map<String, Metric> metrics = metricManager.registry(registryName).getMetrics();
+ String key = "QUERY./select.requests.count";
+ assertTrue(key, metrics.containsKey(key));
+ assertTrue(key, metrics.get(key) instanceof AggregateMetric);
+ key = "UPDATE./update/json.requests.count";
+ assertTrue(key, metrics.containsKey(key));
+ assertTrue(key, metrics.get(key) instanceof AggregateMetric);
+ }
+ if (metricManager.registryNames().contains("solr.overseer")) {
+ Map<String,Metric> metrics = metricManager.registry("solr.overseer").getMetrics();
+ String key = "jvm.memory.heap.init.value";
+ assertTrue(key, metrics.containsKey(key));
+ assertTrue(key, metrics.get(key) instanceof AggregateMetric);
+ key = "leader.test_collection.shard1.UPDATE./update/json.requests.count.max";
+ assertTrue(key, metrics.containsKey(key));
+ assertTrue(key, metrics.get(key) instanceof AggregateMetric);
}
});
}
@@ -102,7 +122,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertNotNull(reporter);
assertTrue(reporter.toString(), reporter instanceof SolrOverseerReporter);
SolrOverseerReporter sor = (SolrOverseerReporter)reporter;
- assertEquals(30, sor.getPeriod());
+ assertEquals(60, sor.getPeriod());
for (String registryName : metricManager.registryNames(".*\\.shard[0-9]\\.core.*")) {
reporters = metricManager.getReporters(registryName);
assertEquals(reporters.toString(), 1, reporters.size());
@@ -110,7 +130,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertNotNull(reporter);
assertTrue(reporter.toString(), reporter instanceof SolrReplicaReporter);
SolrReplicaReporter srr = (SolrReplicaReporter)reporter;
- assertEquals(30, srr.getPeriod());
+ assertEquals(60, srr.getPeriod());
}
for (String registryName : metricManager.registryNames(".*\\.leader")) {
reporters = metricManager.getReporters(registryName);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4fea121b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrReplicaReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrReplicaReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrReplicaReporterTest.java
index 6b25a32..d18d0e3 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrReplicaReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrReplicaReporterTest.java
@@ -29,6 +29,11 @@ public class SolrReplicaReporterTest extends AbstractFullDistribZkTestBase {
schemaString = "schema15.xml"; // we need a string id
}
+ @Override
+ public String getSolrXml() {
+ return "solr-solrreporter.xml";
+ }
+
@Test
public void test() throws Exception {
waitForRecoveriesToFinish("control_collection",
@@ -37,7 +42,7 @@ public class SolrReplicaReporterTest extends AbstractFullDistribZkTestBase {
jettys.get(0).getCoreContainer().getZkController().getZkStateReader(), false);
printLayout();
// wait for at least two reports
- Thread.sleep(30000);
+ Thread.sleep(10000);
ClusterState state = jettys.get(0).getCoreContainer().getZkController().getClusterState();
for (JettySolrRunner jetty : jettys) {
CoreContainer cc = jetty.getCoreContainer();