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 2020/07/14 02:12:13 UTC

[lucene-solr] branch reference_impl updated: #130 - Harden test.

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

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


The following commit(s) were added to refs/heads/reference_impl by this push:
     new c968122  #130 - Harden test.
c968122 is described below

commit c96812277624f24a6feb5588ecd22ebdbeda61be
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Jul 13 21:11:58 2020 -0500

    #130 - Harden test.
---
 .../routing/AffinityReplicaListTransformer.java    |   8 +-
 .../solrj/routing/ReplicaListTransformer.java      |   3 +
 .../RequestReplicaListTransformerGenerator.java    |   8 +-
 .../routing/ShufflingReplicaListTransformer.java   |   8 +-
 .../solrj/routing/ReplicaListTransformerTest.java  | 127 ++++++++++++---------
 5 files changed, 94 insertions(+), 60 deletions(-)

diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/AffinityReplicaListTransformer.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/AffinityReplicaListTransformer.java
index f6dbf61..864105a 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/AffinityReplicaListTransformer.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/AffinityReplicaListTransformer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.client.solrj.routing;
 
+import java.io.Closeable;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
@@ -30,7 +31,7 @@ import org.apache.solr.common.util.Hash;
  * either explicitly configured hash routing parameter, or the hash of a query parameter (configurable, usually related
  * to the main query).
  */
-public class AffinityReplicaListTransformer implements ReplicaListTransformer {
+public class AffinityReplicaListTransformer implements ReplicaListTransformer, Closeable {
 
   private final int routingDividend;
 
@@ -83,6 +84,11 @@ public class AffinityReplicaListTransformer implements ReplicaListTransformer {
     }
   }
 
+  @Override
+  public void close() {
+
+  }
+
   private static final class SortableChoice {
 
     private final Object choice;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ReplicaListTransformer.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ReplicaListTransformer.java
index e2344c6..d8003ca 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ReplicaListTransformer.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ReplicaListTransformer.java
@@ -32,4 +32,7 @@ public interface ReplicaListTransformer {
    */
   public void transform(List<?> choices);
 
+  default void close() {
+
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
index 4853787..9ca7d0d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.client.solrj.routing;
 
+import java.io.Closeable;
 import java.lang.invoke.MethodHandles;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -124,7 +125,7 @@ public class RequestReplicaListTransformerGenerator {
    * and subsequently reordering any equivalent replica sets according to behavior specified
    * by the baseReplicaListTransformer.
    */
-  private static final class TopLevelReplicaListTransformer implements ReplicaListTransformer {
+  private static final class TopLevelReplicaListTransformer implements ReplicaListTransformer, Closeable {
 
     private final NodePreferenceRulesComparator replicaComp;
     private final ReplicaListTransformer baseReplicaListTransformer;
@@ -185,6 +186,11 @@ public class RequestReplicaListTransformerGenerator {
         }
       }
     }
+
+    @Override
+    public void close() {
+
+    }
   }
   
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ShufflingReplicaListTransformer.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ShufflingReplicaListTransformer.java
index 7c37129..7d529a6 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ShufflingReplicaListTransformer.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/ShufflingReplicaListTransformer.java
@@ -16,11 +16,12 @@
  */
 package org.apache.solr.client.solrj.routing;
 
+import java.io.Closeable;
 import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
-public class ShufflingReplicaListTransformer implements ReplicaListTransformer {
+public class ShufflingReplicaListTransformer implements ReplicaListTransformer, Closeable {
 
   private final Random r;
 
@@ -36,4 +37,9 @@ public class ShufflingReplicaListTransformer implements ReplicaListTransformer {
     }
   }
 
+  @Override
+  public void close() {
+
+  }
+
 }
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/routing/ReplicaListTransformerTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/routing/ReplicaListTransformerTest.java
index 0331ef5..75afe70 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/routing/ReplicaListTransformerTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/routing/ReplicaListTransformerTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.client.solrj.routing;
 
+import java.io.Closeable;
 import java.lang.invoke.MethodHandles;
 
 import java.util.ArrayList;
@@ -41,7 +42,7 @@ public class ReplicaListTransformerTest extends SolrTestCase {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   // A transformer that keeps only matching choices
-  private static class ToyMatchingReplicaListTransformer implements ReplicaListTransformer {
+  private static class ToyMatchingReplicaListTransformer implements ReplicaListTransformer, Closeable {
 
     private final String regex;
 
@@ -73,10 +74,15 @@ public class ReplicaListTransformerTest extends SolrTestCase {
       }
     }
 
+    @Override
+    public void close() {
+
+    }
+
   }
 
   // A transformer that makes no transformation
-  private static class ToyNoOpReplicaListTransformer implements ReplicaListTransformer {
+  private static class ToyNoOpReplicaListTransformer implements ReplicaListTransformer, Closeable {
 
     public ToyNoOpReplicaListTransformer()
     {
@@ -88,6 +94,11 @@ public class ReplicaListTransformerTest extends SolrTestCase {
       log.info("No-Op transform ignoring input: {}", choices);
     }
 
+    @Override
+    public void close() {
+
+    }
+
   }
 
   @Test
@@ -95,72 +106,74 @@ public class ReplicaListTransformerTest extends SolrTestCase {
 
     final String regex = ".*" + random().nextInt(10) + ".*";
 
-    final ReplicaListTransformer transformer;
-    if (random().nextBoolean()) {
-      log.info("Using ToyMatching Transfomer");
-      transformer = new ToyMatchingReplicaListTransformer(regex);
+    ReplicaListTransformer transformer = null;
+    try {
+      if (random().nextBoolean()) {
+        log.info("Using ToyMatching Transfomer");
+        transformer = new ToyMatchingReplicaListTransformer(regex);
 
-    } else {
-      log.info("Using conditional Transfomer");
-      transformer = new HttpShardHandlerFactory() {
+      } else {
+        log.info("Using conditional Transfomer");
+        transformer = new HttpShardHandlerFactory() {
 
-        @Override
-        protected ReplicaListTransformer getReplicaListTransformer(final SolrQueryRequest req)
-        {
-          final SolrParams params = req.getParams();
+          @Override
+          protected ReplicaListTransformer getReplicaListTransformer(final SolrQueryRequest req) {
+            final SolrParams params = req.getParams();
 
-          if (params.getBool("toyNoTransform", false)) {
-            return new ToyNoOpReplicaListTransformer();
-          }
+            if (params.getBool("toyNoTransform", false)) {
+              return new ToyNoOpReplicaListTransformer();
+            }
 
-          final String regex = params.get("toyRegEx");
-          if (regex != null) {
-            return new ToyMatchingReplicaListTransformer(regex);
+            final String regex = params.get("toyRegEx");
+            if (regex != null) {
+              return new ToyMatchingReplicaListTransformer(regex);
+            }
+
+            return super.getReplicaListTransformer(req);
           }
 
-          return super.getReplicaListTransformer(req);
-        }
+        }.getReplicaListTransformer(
+                new LocalSolrQueryRequest(null,
+                        new ModifiableSolrParams().add("toyRegEx", regex)));
+      }
 
-      }.getReplicaListTransformer(
-          new LocalSolrQueryRequest(null,
-              new ModifiableSolrParams().add("toyRegEx", regex)));
-    }
+      final List<Replica> inputs = new ArrayList<>();
+      final List<Replica> expectedTransformed = new ArrayList<>();
+
+      final List<String> urls = createRandomUrls();
+      for (int ii = 0; ii < urls.size(); ++ii) {
+
+        final String name = "replica" + (ii + 1);
+        final String url = urls.get(ii);
+        final Map<String, Object> propMap = new HashMap<String, Object>();
+        propMap.put("base_url", url);
+        propMap.put("core", "test_core");
+        propMap.put("node_name", "test_node");
+        propMap.put("type", "NRT");
+        // a skeleton replica, good enough for this test's purposes
+        final Replica replica = new Replica(name, propMap, "c1", "s1");
+
+        inputs.add(replica);
+        final String coreUrl = replica.getCoreUrl();
+        if (coreUrl.matches(regex)) {
+          log.info("adding replica=[{}] to expected due to core url ({}) regex match on {} ",
+                  replica, coreUrl, regex);
+          expectedTransformed.add(replica);
+        } else {
+          log.info("NOT expecting replica=[{}] due to core url ({}) regex mismatch ({})",
+                  replica, coreUrl, regex);
+        }
 
-    final List<Replica> inputs = new ArrayList<>();
-    final List<Replica> expectedTransformed = new ArrayList<>();
-
-    final List<String> urls = createRandomUrls();
-    for (int ii=0; ii<urls.size(); ++ii) {
-
-      final String name = "replica"+(ii+1);
-      final String url = urls.get(ii);
-      final Map<String,Object> propMap = new HashMap<String,Object>();
-      propMap.put("base_url", url);
-      propMap.put("core", "test_core");
-      propMap.put("node_name", "test_node");
-      propMap.put("type", "NRT");
-      // a skeleton replica, good enough for this test's purposes
-      final Replica replica = new Replica(name, propMap,"c1","s1");
-
-      inputs.add(replica);
-      final String coreUrl = replica.getCoreUrl();
-      if (coreUrl.matches(regex)) {
-        log.info("adding replica=[{}] to expected due to core url ({}) regex match on {} ",
-                 replica, coreUrl, regex);
-        expectedTransformed.add(replica);
-      } else {
-        log.info("NOT expecting replica=[{}] due to core url ({}) regex mismatch ({})",
-                 replica, coreUrl, regex);
       }
-      
-    }
 
-    final List<Replica> actualTransformed = new ArrayList<>(inputs);
-    transformer.transform(actualTransformed);
+      final List<Replica> actualTransformed = new ArrayList<>(inputs);
+      transformer.transform(actualTransformed);
 
-    assertEquals(expectedTransformed, actualTransformed);
-    if (transformer instanceof  HttpShardHandlerFactory) {
-      ((HttpShardHandlerFactory) transformer).close();
+      assertEquals(expectedTransformed, actualTransformed);
+    } finally {
+      if (transformer != null) {
+        transformer.close();
+      }
     }
   }