You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2019/08/27 09:53:23 UTC

[lucene-solr] branch jira/SOLR-13723 updated: Initial commit

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

noble pushed a commit to branch jira/SOLR-13723
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/jira/SOLR-13723 by this push:
     new cb9e7ad  Initial commit
cb9e7ad is described below

commit cb9e7adffff08830e533e0add96837b122267486
Author: noble <no...@apache.org>
AuthorDate: Tue Aug 27 19:53:02 2019 +1000

    Initial commit
---
 .../solr/client/solrj/embedded/JettyConfig.java    | 14 ++++++--
 .../client/solrj/embedded/JettySolrRunner.java     | 21 ++++++++----
 .../apache/solr/cloud/MiniSolrCloudCluster.java    | 10 +++---
 .../org/apache/solr/cloud/SolrCloudTestCase.java   | 37 ++++++++++------------
 4 files changed, 48 insertions(+), 34 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
index bff63e1..e4a0547 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
@@ -32,6 +32,9 @@ public class JettyConfig {
 
   public final String context;
 
+  public final boolean enableV2;
+
+
   public final boolean stopAtShutdown;
   
   public final Long waitForLoadingCoresToFinishMs;
@@ -46,7 +49,7 @@ public class JettyConfig {
 
   private JettyConfig(boolean onlyHttp1, int port, int portRetryTime , String context, boolean stopAtShutdown,
                       Long waitForLoadingCoresToFinishMs, Map<ServletHolder, String> extraServlets,
-                      Map<Class<? extends Filter>, String> extraFilters, SSLConfig sslConfig) {
+                      Map<Class<? extends Filter>, String> extraFilters, SSLConfig sslConfig, boolean enableV2) {
     this.onlyHttp1 = onlyHttp1;
     this.port = port;
     this.context = context;
@@ -56,6 +59,7 @@ public class JettyConfig {
     this.extraFilters = extraFilters;
     this.sslConfig = sslConfig;
     this.portRetryTime = portRetryTime;
+    this.enableV2 = enableV2;
   }
 
   public static Builder builder() {
@@ -78,6 +82,7 @@ public class JettyConfig {
     boolean onlyHttp1 = false;
     int port = 0;
     String context = "/solr";
+    boolean enableV2 = true;
     boolean stopAtShutdown = true;
     Long waitForLoadingCoresToFinishMs = 300000L;
     Map<ServletHolder, String> extraServlets = new TreeMap<>();
@@ -89,6 +94,10 @@ public class JettyConfig {
       this.onlyHttp1 = useOnlyHttp1;
       return this;
     }
+    public Builder enableV2(boolean flag){
+      this.enableV2 = flag;
+      return this;
+    }
 
     public Builder setPort(int port) {
       this.port = port;
@@ -144,7 +153,8 @@ public class JettyConfig {
 
 
     public JettyConfig build() {
-      return new JettyConfig(onlyHttp1, port, portRetryTime, context, stopAtShutdown, waitForLoadingCoresToFinishMs, extraServlets, extraFilters, sslConfig);
+      return new JettyConfig(onlyHttp1, port, portRetryTime, context, stopAtShutdown,
+          waitForLoadingCoresToFinishMs, extraServlets, extraFilters, sslConfig, enableV2);
     }
 
   }
diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
index 7a6c8478..c28efa7 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
@@ -59,6 +59,8 @@ import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory;
 import org.eclipse.jetty.http2.HTTP2Cipher;
 import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory;
 import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory;
+import org.eclipse.jetty.rewrite.handler.RewriteHandler;
+import org.eclipse.jetty.rewrite.handler.RewritePatternRule;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -171,20 +173,20 @@ public class JettySolrRunner {
     private void executeDelay() {
       int delayMs = 0;
       for (Delay delay: delays) {
-        this.log.info("Delaying "+delay.delayValue+", for reason: "+delay.reason);
+        log.info("Delaying "+delay.delayValue+", for reason: "+delay.reason);
         if (delay.counter.decrementAndGet() == 0) {
           delayMs += delay.delayValue;
         }
       }
 
       if (delayMs > 0) {
-        this.log.info("Pausing this socket connection for " + delayMs + "ms...");
+        log.info("Pausing this socket connection for " + delayMs + "ms...");
         try {
           Thread.sleep(delayMs);
         } catch (InterruptedException e) {
           throw new RuntimeException(e);
         }
-        this.log.info("Waking up after the delay of " + delayMs + "ms...");
+        log.info("Waking up after the delay of " + delayMs + "ms...");
       }
     }
 
@@ -398,8 +400,15 @@ public class JettySolrRunner {
     root.addServlet(Servlet404.class, "/*");
     chain = root;
     }
-
-    chain = injectJettyHandlers(chain);
+    if(config.enableV2) {
+      RewriteHandler rwh = new RewriteHandler();
+      rwh.setRewriteRequestURI(true);
+      rwh.setRewritePathInfo(false);
+      rwh.setOriginalPathAttribute("requestedPath");
+      rwh.addRule(new RewritePatternRule("/api/*", "/solr/____v2"));
+      chain.insertHandler(rwh);
+      chain = injectJettyHandlers(chain);
+    }
 
     GzipHandler gzipHandler = new GzipHandler();
     gzipHandler.setHandler(chain);
@@ -549,7 +558,7 @@ public class JettySolrRunner {
     this.host = c.getHost();
   }
 
-  private void retryOnPortBindFailure(int portRetryTime, int port) throws Exception, InterruptedException {
+  private void retryOnPortBindFailure(int portRetryTime, int port) throws Exception {
     TimeOut timeout = new TimeOut(portRetryTime, TimeUnit.SECONDS, TimeSource.NANO_TIME);
     int tryCnt = 1;
     while (true) {
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
index eca5235..3493d6e 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
@@ -462,6 +462,7 @@ public class MiniSolrCloudCluster {
   public JettySolrRunner startJettySolrRunner(String name, String hostContext, JettyConfig config) throws Exception {
     Path runnerPath = createInstancePath(name);
     String context = getHostContextSuitableForServletContext(hostContext);
+
     JettyConfig newConfig = JettyConfig.builder(config).setContext(context).build();
     JettySolrRunner jetty = !trackJettyMetrics 
         ? new JettySolrRunner(runnerPath.toString(), newConfig)
@@ -555,7 +556,7 @@ public class MiniSolrCloudCluster {
       }
       
       for (String collection : reader.getClusterState().getCollectionStates().keySet()) {
-        reader.waitForState(collection, 15, TimeUnit.SECONDS, (collectionState) -> collectionState == null ? true : false);
+        reader.waitForState(collection, 15, TimeUnit.SECONDS, (collectionState) -> collectionState == null);
       }
      
     } 
@@ -783,11 +784,8 @@ public class MiniSolrCloudCluster {
           }
         }
       }
-      if (activeReplicas == expectedReplicas) {
-        return true;
-      }
-      
-      return false;
+      return activeReplicas == expectedReplicas;
+
     };
   }
 
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java b/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
index 5f30f21..8e98723 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/SolrCloudTestCase.java
@@ -32,6 +32,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
 import java.util.function.Predicate;
 
 import org.apache.solr.SolrTestCaseJ4;
@@ -83,7 +84,7 @@ import static org.apache.solr.common.cloud.ZkConfigManager.CONFIGS_ZKNODE;
 public class SolrCloudTestCase extends SolrTestCaseJ4 {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  
+
   public static final int DEFAULT_TIMEOUT = 45; // this is an important timeout for test stability - can't be too short
 
   private static class Config {
@@ -106,7 +107,7 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
     private final int nodeCount;
     private final Path baseDir;
     private String solrxml = MiniSolrCloudCluster.DEFAULT_CLOUD_SOLR_XML;
-    private JettyConfig jettyConfig = buildJettyConfig("/solr");
+    private JettyConfig.Builder jettyConfigBuilder = JettyConfig.builder().setContext("/solr").withSSLConfig(sslConfig.buildServerSSLConfig());
     private Optional<String> securityJson = Optional.empty();
 
     private List<Config> configs = new ArrayList<>();
@@ -124,10 +125,10 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
     }
 
     /**
-     * Use a {@link JettyConfig} to configure the cluster's jetty servers
+     * Use a {@link JettyConfig.Builder} to configure the cluster's jetty servers
      */
-    public Builder withJettyConfig(JettyConfig jettyConfig) {
-      this.jettyConfig = jettyConfig;
+    public Builder withJettyConfig(Consumer<JettyConfig.Builder> fun) {
+      fun.accept(jettyConfigBuilder);
       return this;
     }
 
@@ -203,7 +204,7 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
     }
 
     public Builder withMetrics(boolean trackJettyMetrics) {
-      this.trackJettyMetrics = trackJettyMetrics; 
+      this.trackJettyMetrics = trackJettyMetrics;
       return this;
     }
     /**
@@ -219,6 +220,7 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
      * @throws Exception if an error occurs on startup
      */
     public MiniSolrCloudCluster build() throws Exception {
+      JettyConfig jettyConfig = jettyConfigBuilder.build();
       MiniSolrCloudCluster cluster = new MiniSolrCloudCluster(nodeCount, baseDir, solrxml, jettyConfig,
           null, securityJson, trackJettyMetrics);
       CloudSolrClient client = cluster.getSolrClient();
@@ -305,7 +307,7 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
   protected static void waitForState(String message, String collection, CollectionStatePredicate predicate) {
     waitForState(message, collection, predicate, DEFAULT_TIMEOUT, TimeUnit.SECONDS);
   }
-  
+
   /**
    * Wait for a particular collection state to appear in the cluster client's state reader
    *
@@ -340,8 +342,7 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
         return false;
       if (collectionState.getSlices().size() != expectedShards)
         return false;
-      if (compareActiveReplicaCountsForShards(expectedReplicas, liveNodes, collectionState)) return true;
-      return false;
+      return compareActiveReplicaCountsForShards(expectedReplicas, liveNodes, collectionState);
     };
   }
 
@@ -356,23 +357,22 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
       log.info("active slice count: " + collectionState.getActiveSlices().size() + " expected:" + expectedShards);
       if (collectionState.getActiveSlices().size() != expectedShards)
         return false;
-      if (compareActiveReplicaCountsForShards(expectedReplicas, liveNodes, collectionState)) return true;
-      return false;
+      return compareActiveReplicaCountsForShards(expectedReplicas, liveNodes, collectionState);
     };
   }
-  
+
   public static LiveNodesPredicate containsLiveNode(String node) {
     return (oldNodes, newNodes) -> {
       return newNodes.contains(node);
     };
   }
-  
+
   public static LiveNodesPredicate missingLiveNode(String node) {
     return (oldNodes, newNodes) -> {
       return !newNodes.contains(node);
     };
   }
-  
+
   public static LiveNodesPredicate missingLiveNodes(List<String> nodes) {
     return (oldNodes, newNodes) -> {
       boolean success = true;
@@ -395,14 +395,11 @@ public class SolrCloudTestCase extends SolrTestCaseJ4 {
         }
       }
     }
-    
+
     log.info("active replica count: " + activeReplicas + " expected replica count: " + expectedReplicas);
-    
-    if (activeReplicas == expectedReplicas) {
-      return true;
-    }
 
-    return false;
+    return activeReplicas == expectedReplicas;
+
   }
 
   /**