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/01/07 08:32:01 UTC
lucene-solr:jira/solr-9856: SOLR-9856 Add metrics to PeerSync. Add
new Categories.
Repository: lucene-solr
Updated Branches:
refs/heads/jira/solr-9856 c21fbd6ff -> 482ce1e56
SOLR-9856 Add metrics to PeerSync. Add new Categories.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/482ce1e5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/482ce1e5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/482ce1e5
Branch: refs/heads/jira/solr-9856
Commit: 482ce1e5687f4dcb975f14613d5079693c8db954
Parents: c21fbd6
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Sat Jan 7 09:31:27 2017 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Sat Jan 7 09:31:27 2017 +0100
----------------------------------------------------------------------
.../org/apache/solr/core/SolrInfoMBean.java | 2 +-
.../java/org/apache/solr/update/PeerSync.java | 20 +++++++++++--
.../java/org/apache/solr/update/UpdateLog.java | 30 +++++++++-----------
.../org/apache/solr/search/TestRecovery.java | 18 ++++++------
4 files changed, 42 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/482ce1e5/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java b/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
index c64af47..35797f3 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
@@ -32,7 +32,7 @@ public interface SolrInfoMBean {
/**
* Category of {@link SolrCore} component.
*/
- enum Category { CORE, QUERYHANDLER, UPDATEHANDLER, CACHE, HIGHLIGHTING, QUERYPARSER, SEARCHER, INDEX, DIRECTORY, OTHER }
+ enum Category { CORE, QUERYHANDLER, UPDATEHANDLER, CACHE, HIGHLIGHTING, QUERYPARSER, SEARCHER, REPLICATION, TLOG, INDEX, DIRECTORY, OTHER }
/**
* Top-level group of beans for a subsystem.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/482ce1e5/solr/core/src/java/org/apache/solr/update/PeerSync.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/PeerSync.java b/solr/core/src/java/org/apache/solr/update/PeerSync.java
index 12ba7ae..428af0f 100644
--- a/solr/core/src/java/org/apache/solr/update/PeerSync.java
+++ b/solr/core/src/java/org/apache/solr/update/PeerSync.java
@@ -29,6 +29,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Timer;
import org.apache.http.NoHttpResponseException;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ConnectTimeoutException;
@@ -40,12 +42,15 @@ import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.handler.component.HttpShardHandlerFactory;
import org.apache.solr.handler.component.ShardHandler;
import org.apache.solr.handler.component.ShardHandlerFactory;
import org.apache.solr.handler.component.ShardRequest;
import org.apache.solr.handler.component.ShardResponse;
import org.apache.solr.logging.MDCLoggingContext;
+import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricProducer;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -58,7 +63,7 @@ import static org.apache.solr.update.processor.DistributedUpdateProcessor.Distri
import static org.apache.solr.update.processor.DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM;
/** @lucene.experimental */
-public class PeerSync {
+public class PeerSync implements SolrMetricProducer {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private boolean debug = log.isDebugEnabled();
@@ -87,6 +92,10 @@ public class PeerSync {
private final boolean onlyIfActive;
private SolrCore core;
+ // metrics
+ private Timer syncTime;
+ private Counter syncErrors;
+
// comparator that sorts by absolute value, putting highest first
public static Comparator<Long> absComparator = (o1, o2) -> {
long l1 = Math.abs(o1);
@@ -112,7 +121,6 @@ public class PeerSync {
return 0;
};
-
private static class SyncShardRequest extends ShardRequest {
List<Long> reportedVersions;
IndexFingerprint fingerprint;
@@ -147,6 +155,14 @@ public class PeerSync {
// TODO: close
shardHandlerFactory = (HttpShardHandlerFactory) core.getCoreDescriptor().getCoreContainer().getShardHandlerFactory();
shardHandler = shardHandlerFactory.getShardHandler(client);
+
+ core.getCoreMetricManager().registerMetricProducer(SolrInfoMBean.Category.REPLICATION.toString(), this);
+ }
+
+ @Override
+ public void initializeMetrics(SolrMetricManager manager, String registry, String scope) {
+ syncTime = manager.timer(registry, "time", scope);
+ syncErrors = manager.counter(registry, "errors", scope);
}
/** optional list of updates we had before possibly receiving new updates */
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/482ce1e5/solr/core/src/java/org/apache/solr/update/UpdateLog.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index 6286810..2598949 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -54,6 +54,7 @@ import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricProducer;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestInfo;
@@ -75,7 +76,7 @@ import static org.apache.solr.update.processor.DistributingUpdateProcessorFactor
/** @lucene.experimental */
-public class UpdateLog implements PluginInfoInitialized {
+public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
private static final long STATUS_TIME = TimeUnit.NANOSECONDS.convert(60, TimeUnit.SECONDS);
public static String LOG_FILENAME_PATTERN = "%s.%019d";
public static String TLOG_NAME="tlog";
@@ -345,8 +346,11 @@ public class UpdateLog implements PluginInfoInitialized {
}
}
- SolrMetricManager metricManager = core.getCoreDescriptor().getCoreContainer().getMetricManager();
- String registry = core.getCoreMetricManager().getRegistryName();
+ core.getCoreMetricManager().registerMetricProducer(SolrInfoMBean.Category.TLOG.toString(), this);
+ }
+
+ @Override
+ public void initializeMetrics(SolrMetricManager manager, String registry, String scope) {
bufferedOpsGauge = () -> {
if (tlog == null) {
return 0;
@@ -363,24 +367,18 @@ public class UpdateLog implements PluginInfoInitialized {
replayLogsCountGauge = () -> logs.size();
replayBytesGauge = () -> {
if (state == State.REPLAYING) {
- synchronized(this) {
- long totalBytesToProcess = 0;
- for (TransactionLog log : logs) {
- totalBytesToProcess += log.getLogSize();
- }
- return totalBytesToProcess;
- }
+ return getTotalLogsSize();
} else {
return 0L;
}
};
- metricManager.register(registry, bufferedOpsGauge, true, "ops", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog", "buffered");
- metricManager.register(registry, replayLogsCountGauge, true, "logs", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog", "replay", "remaining");
- metricManager.register(registry, replayBytesGauge, true, "bytes", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog", "replay", "remaining");
- applyingBufferedOpsMeter = metricManager.meter(registry, "ops", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog", "applying_buffered");
- replayOpsMeter = metricManager.meter(registry, "ops", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog", "replay");
+ manager.register(registry, bufferedOpsGauge, true, "ops", scope, "buffered");
+ manager.register(registry, replayLogsCountGauge, true, "logs", scope, "replay", "remaining");
+ manager.register(registry, replayBytesGauge, true, "bytes", scope, "replay", "remaining");
+ applyingBufferedOpsMeter = manager.meter(registry, "ops", scope, "applying_buffered");
+ replayOpsMeter = manager.meter(registry, "ops", scope, "replay");
stateGauge = () -> state.ordinal();
- metricManager.register(registry, stateGauge, true, "state", SolrInfoMBean.Category.UPDATEHANDLER.toString(), "tlog");
+ manager.register(registry, stateGauge, true, "state", scope);
}
/**
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/482ce1e5/solr/core/src/test/org/apache/solr/search/TestRecovery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestRecovery.java b/solr/core/src/test/org/apache/solr/search/TestRecovery.java
index 60fd1f7..d428003 100644
--- a/solr/core/src/test/org/apache/solr/search/TestRecovery.java
+++ b/solr/core/src/test/org/apache/solr/search/TestRecovery.java
@@ -146,12 +146,12 @@ public class TestRecovery extends SolrTestCaseJ4 {
assertEquals(UpdateLog.State.REPLAYING, h.getCore().getUpdateHandler().getUpdateLog().getState());
// check metrics
- Gauge<Integer> state = (Gauge<Integer>)metrics.get("UPDATEHANDLER.tlog.state");
+ Gauge<Integer> state = (Gauge<Integer>)metrics.get("TLOG.state");
assertEquals(UpdateLog.State.REPLAYING.ordinal(), state.getValue().intValue());
- Gauge<Integer> replayingLogs = (Gauge<Integer>)metrics.get("UPDATEHANDLER.tlog.replay.remaining.logs");
- assertEquals(1, replayingLogs.getValue().intValue());
- Gauge<Long> replayingDocs = (Gauge<Long>)metrics.get("UPDATEHANDLER.tlog.replay.remaining.bytes");
- assertEquals(209L, replayingDocs.getValue().longValue());
+ Gauge<Integer> replayingLogs = (Gauge<Integer>)metrics.get("TLOG.replay.remaining.logs");
+ assertTrue(replayingLogs.getValue().intValue() > 0);
+ Gauge<Long> replayingDocs = (Gauge<Long>)metrics.get("TLOG.replay.remaining.bytes");
+ assertTrue(replayingDocs.getValue().longValue() > 0);
// unblock recovery
logReplay.release(1000);
@@ -164,7 +164,7 @@ public class TestRecovery extends SolrTestCaseJ4 {
assertJQ(req("q","*:*") ,"/response/numFound==3");
- Meter replayDocs = (Meter)metrics.get("UPDATEHANDLER.tlog.replay.ops");
+ Meter replayDocs = (Meter)metrics.get("TLOG.replay.ops");
assertEquals(5L, replayDocs.getCount());
assertEquals(UpdateLog.State.ACTIVE.ordinal(), state.getValue().intValue());
@@ -247,7 +247,7 @@ public class TestRecovery extends SolrTestCaseJ4 {
ulog.bufferUpdates();
assertEquals(UpdateLog.State.BUFFERING, ulog.getState());
- Gauge<Integer> state = (Gauge<Integer>)metrics.get("UPDATEHANDLER.tlog.state");
+ Gauge<Integer> state = (Gauge<Integer>)metrics.get("TLOG.state");
assertEquals(UpdateLog.State.BUFFERING.ordinal(), state.getValue().intValue());
// simulate updates from a leader
@@ -280,7 +280,7 @@ public class TestRecovery extends SolrTestCaseJ4 {
,"=={'doc':null}"
);
- Gauge<Integer> bufferedOps = (Gauge<Integer>)metrics.get("UPDATEHANDLER.tlog.buffered.ops");
+ Gauge<Integer> bufferedOps = (Gauge<Integer>)metrics.get("TLOG.buffered.ops");
assertEquals(6, bufferedOps.getValue().intValue());
rinfoFuture = ulog.applyBufferedUpdates();
@@ -293,7 +293,7 @@ public class TestRecovery extends SolrTestCaseJ4 {
UpdateLog.RecoveryInfo rinfo = rinfoFuture.get();
assertEquals(UpdateLog.State.ACTIVE, ulog.getState());
- Meter applyingBuffered = (Meter)metrics.get("UPDATEHANDLER.tlog.applying_buffered.ops");
+ Meter applyingBuffered = (Meter)metrics.get("TLOG.applying_buffered.ops");
assertEquals(6L, applyingBuffered.getCount());
assertJQ(req("qt","/get", "getVersions","6")