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 2016/12/20 10:48:31 UTC

[26/44] lucene-solr:jira/solr-9854: SOLR-4735 Add gauges that report the current number of cores.

SOLR-4735 Add gauges that report the current number of cores.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/92ef10db
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/92ef10db
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/92ef10db

Branch: refs/heads/jira/solr-9854
Commit: 92ef10dbdea6d8764d2a1ecba3d53abee542542d
Parents: 5a17c1b
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Mon Dec 19 13:34:15 2016 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Mon Dec 19 13:34:15 2016 +0100

----------------------------------------------------------------------
 .../src/java/org/apache/solr/core/CoreContainer.java   | 13 +++++++++++++
 .../org/apache/solr/metrics/SolrMetricManager.java     |  8 ++++----
 .../apache/solr/handler/admin/MetricsHandlerTest.java  |  2 ++
 3 files changed, 19 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/92ef10db/solr/core/src/java/org/apache/solr/core/CoreContainer.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index c423985..0703212 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -33,6 +33,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 
+import com.codahale.metrics.Gauge;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.apache.http.auth.AuthSchemeProvider;
@@ -491,6 +492,18 @@ public class CoreContainer {
 
     containerProperties.putAll(cfg.getSolrProperties());
 
+    // initialize gauges for reporting the number of cores
+    Gauge<Integer> loadedCores = () -> solrCores.getCores().size();
+    Gauge<Integer> lazyCores = () -> solrCores.getCoreNames().size() - solrCores.getCores().size();
+    Gauge<Integer> unloadedCores = () -> solrCores.getAllCoreNames().size() - solrCores.getCoreNames().size();
+
+    SolrMetricManager.register(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node),
+        loadedCores, true, "loaded", "cores");
+    SolrMetricManager.register(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node),
+        lazyCores, true, "lazy", "cores");
+    SolrMetricManager.register(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node),
+        unloadedCores, true, "unloaded", "cores");
+
     // setup executor to load cores in parallel
     ExecutorService coreLoadExecutor = ExecutorUtil.newMDCAwareFixedThreadPool(
         cfg.getCoreLoadThreadCount(isZooKeeperAware()),

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/92ef10db/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 2063689..b700782 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -280,18 +280,18 @@ public class SolrMetricManager {
    * Register an instance of {@link Metric}.
    * @param registry registry name
    * @param metric metric instance
-   * @param skipExisting if true then already an existing metric with the same name will be kept.
+   * @param force if true then an already existing metric with the same name will be replaced.
    *                     When false and a metric with the same name already exists an exception
    *                     will be thrown.
    * @param metricName metric name, either final name or a fully-qualified name
    *                   using dotted notation
    * @param metricPath (optional) additional top-most metric name path elements
    */
-  public static void register(String registry, Metric metric, boolean skipExisting, String metricName, String... metricPath) {
+  public static void register(String registry, Metric metric, boolean force, String metricName, String... metricPath) {
     MetricRegistry metricRegistry = registry(registry);
     String fullName = mkName(metricName, metricPath);
-    if (skipExisting && metricRegistry.getMetrics().containsKey(fullName)) {
-      return;
+    if (force && metricRegistry.getMetrics().containsKey(fullName)) {
+      metricRegistry.remove(fullName);
     }
     metricRegistry.register(fullName, metric);
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/92ef10db/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
index 83ce74f..3667285 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
@@ -53,6 +53,8 @@ public class MetricsHandlerTest extends SolrTestCaseJ4 {
     assertNotNull(((NamedList) nl.get("newSearcherErrors")).get("requests"));
     assertEquals(0L, ((NamedList) nl.get("newSearcherErrors")).get("requests"));
     nl = (NamedList) values.get("solr.node");
+    assertNotNull(nl.get("cores.loaded")); // int gauge
+    assertEquals(1, ((NamedList) nl.get("cores.loaded")).get("value"));
     assertNotNull(nl.get("QUERYHANDLER./admin/authorization.clientErrors")); // timer type
     assertEquals(5, ((NamedList) nl.get("QUERYHANDLER./admin/authorization.clientErrors")).size());