You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/02/19 03:03:02 UTC

[lucene-solr] branch reference_impl_dev updated: @1353 Enable metric history handler test for non Nightly.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new 8511118  @1353 Enable metric history handler test for non Nightly.
8511118 is described below

commit 85111188caf24933e945a52fa5211991b49e4be7
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Feb 18 21:02:39 2021 -0600

    @1353 Enable metric history handler test for non Nightly.
---
 solr/cloud-dev/cloud.sh                            |  5 ++--
 .../solr/handler/admin/MetricsHistoryHandler.java  | 27 ++++++++++++----------
 .../org/apache/solr/cloud/DeleteShardTest.java     |  1 +
 .../handler/admin/MetricsHistoryHandlerTest.java   | 22 ++++++++++++++----
 4 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/solr/cloud-dev/cloud.sh b/solr/cloud-dev/cloud.sh
index e278225..e4db8c7 100755
--- a/solr/cloud-dev/cloud.sh
+++ b/solr/cloud-dev/cloud.sh
@@ -274,8 +274,9 @@ copyTarball() {
     echo "baz"
     pushd # back to original dir to properly resolve vcs working dir
     echo "foobar:"$(pwd)
-    if [[ ! -f $(ls "$VCS_WORK"/solr/packaging/build/distributions/solr-*.tgz) ]]; then
-      echo "No solr tarball found try again with -r"; popd; exit 10;
+    tarball=$(ls "$VCS_WORK"/solr/packaging/build/distributions/solr-*.tgz)
+    if [[ ! -f "${tarball}" ]]; then
+      echo "No solr tarball found try again with -r location=${tarball}"; popd; exit 10;
     fi
     cp "$VCS_WORK"/solr/packaging/build/distributions/solr-*.tgz ${CLUSTER_WD}
     pushd # back into cluster wd to unpack
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
index 6707659..e675d0a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
@@ -239,6 +239,9 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
 
   // check that .system exists
   public void checkSystemCollection() {
+    if (this.overseer == null) {
+      return;
+    }
     if (cloudManager != null) {
       try {
         if (cloudManager.isClosed() || Thread.interrupted()) {
@@ -312,7 +315,7 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
 
 
   private void collectMetrics() {
-    log.debug("-- collectMetrics");
+    if (log.isDebugEnabled()) log.debug("-- collectMetrics");
     // Make sure we are a solr server thread, so we can use PKI auth, SOLR-12860
     // This is a workaround since we could not instrument the ScheduledThreadPoolExecutor in ExecutorUtils
     ExecutorUtil.setServerThreadFlag(true);
@@ -342,7 +345,7 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
       if (Thread.interrupted()) {
         return;
       }
-      log.debug("--  collecting local {}...", group);
+      if (log.isDebugEnabled()) log.debug("--  collecting local {}...", group);
       ModifiableSolrParams params = new ModifiableSolrParams();
       params.add(MetricsHandler.GROUP_PARAM, group.toString());
       params.add(MetricsHandler.COMPACT_PARAM, "true");
@@ -357,7 +360,7 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
         });
         NamedList nl = (NamedList)result.get();
         if (nl != null) {
-          try (ParWork worker = new ParWork(this)) {
+          try (ParWork worker = new ParWork(this, false, false)) {
             for (Iterator<Map.Entry<String, Object>> it = nl.iterator(); it.hasNext(); ) {
               Map.Entry<String, Object> entry = it.next();
               String key = entry.getKey();
@@ -416,7 +419,7 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
   }
 
   private void collectGlobalMetrics() {
-    if (overseer != null && overseer.isClosed()) {
+    if (overseer == null || !overseer.getCoreContainer().getZkController().isOverseerLeader()) {
       return;
     }
     Set<String> nodes = new HashSet<>(cloudManager.getClusterStateProvider().getLiveNodes());
@@ -752,14 +755,14 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
     }
     // when using in-memory DBs non-overseer node has no access to overseer DBs - in this case
     // forward the request to Overseer leader if available
-//    if (!factory.isPersistent()) {
-//      String leader = getOverseerLeader();
-//      if (leader != null && !amIOverseerLeader(leader)) {
-//        // get & merge remote response
-//        NamedList<Object> remoteRes = handleRemoteRequest(leader, req);
-//        mergeRemoteRes(rsp, remoteRes);
-//      }
-//    }
+    //    if (!factory.isPersistent()) {
+    //      String leader = getOverseerLeader();
+    //      if (leader != null && !amIOverseerLeader(leader)) {
+    //        // get & merge remote response
+    //        NamedList<Object> remoteRes = handleRemoteRequest(leader, req);
+    //        mergeRemoteRes(rsp, remoteRes);
+    //      }
+    //    }
     SimpleOrderedMap<Object> apiState = new SimpleOrderedMap<>();
     apiState.add("enableReplicas", enableReplicas);
     apiState.add("enableNodes", enableNodes);
diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
index 839ae40..457f7cb 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
@@ -41,6 +41,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+// MRM TODO: set slice state same way as efficient state updates
 public class DeleteShardTest extends SolrCloudTestCase {
 
   // TODO: Custom hash slice deletion test
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
index 603857d..cb93268 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHistoryHandlerTest.java
@@ -22,8 +22,8 @@ import javax.management.MBeanServerFactory;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
-import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.SolrTestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
@@ -32,6 +32,7 @@ import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.params.CollectionAdminParams;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.Pair;
+import org.apache.solr.common.util.TimeOut;
 import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.metrics.SolrMetricManager;
@@ -46,7 +47,6 @@ import org.rrd4j.core.RrdDb;
  *
  */
 @LogLevel("org.apache.solr.cloud=DEBUG")
-@LuceneTestCase.Nightly
 public class MetricsHistoryHandlerTest extends SolrCloudTestCase {
 
   private volatile static SolrCloudManager cloudManager;
@@ -64,15 +64,18 @@ public class MetricsHistoryHandlerTest extends SolrCloudTestCase {
   @BeforeClass
   public static void beforeClass() throws Exception {
     System.setProperty("solr.disableDefaultJmxReporter", "false");
+    System.setProperty("solr.enableMetrics", "true");
+
     TEST_MBEAN_SERVER = MBeanServerFactory.createMBeanServer();
     simulated = TEST_NIGHTLY ? random().nextBoolean() : true;
     Map<String, Object> args = new HashMap<>();
     args.put(MetricsHistoryHandler.SYNC_PERIOD_PROP, 1);
     args.put(MetricsHistoryHandler.COLLECT_PERIOD_PROP, 1);
+    args.put(MetricsHistoryHandler.ENABLE_NODES_PROP, "true");
     configureCluster(1)
         .addConfig("conf", SolrTestUtil.configset("cloud-minimal"))
         .configure();
-    
+
     cloudManager = cluster.getJettySolrRunner(0).getCoreContainer().getZkController().getSolrCloudManager();
     metricManager = cluster.getJettySolrRunner(0).getCoreContainer().getMetricManager();
     solrClient = cluster.getSolrClient();
@@ -81,6 +84,7 @@ public class MetricsHistoryHandlerTest extends SolrCloudTestCase {
         null);
     SolrMetricsContext solrMetricsContext = new SolrMetricsContext(metricManager, SolrInfoBean.Group.node.toString(), "");
     handler.initializeMetrics(solrMetricsContext, CommonParams.METRICS_HISTORY_PATH);
+    solrMetricsContext.getMetricsSnapshot();
     SPEED = 1;
     timeSource = cloudManager.getTimeSource();
 
@@ -109,10 +113,18 @@ public class MetricsHistoryHandlerTest extends SolrCloudTestCase {
   @Test
   //Commented 14-Oct-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // added 15-Sep-2018
   public void testBasic() throws Exception {
-    timeSource.sleep(10000);
     List<Pair<String, Long>> list = handler.getFactory().list(100);
+
+    if (list.size() == 0) {
+      TimeOut timeout = new TimeOut(1000, TimeUnit.MILLISECONDS, TimeSource.NANO_TIME);
+      while (!timeout.hasTimedOut() && list.size() == 0) {
+        Thread.sleep(10);
+        list = handler.getFactory().list(100);
+      }
+    }
     // solr.jvm, solr.node, solr.collection..system
-    assertEquals(list.toString(), 3, list.size());
+    // Ahem - replicas are disabled by default, nodes too, though I enabled - solr.jvm is not populated, we make this request handler ourselves.
+    assertEquals(list.toString(), 1, list.size());
     for (Pair<String, Long> p : list) {
       RrdDb db = RrdDb.getBuilder().setPath(MetricsHistoryHandler.URI_PREFIX + p.first()).setReadOnly(true).setBackendFactory( handler.getFactory()).setUsePool(true).build();
       int dsCount = db.getDsCount();