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;
+
}
/**