You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/09/10 08:15:13 UTC
lucene-solr:jira/http2: SOLR-12641: Support rolling updates when
jira/http2 get merged
Repository: lucene-solr
Updated Branches:
refs/heads/jira/http2 b26c6fda6 -> afe88fb8b
SOLR-12641: Support rolling updates when jira/http2 get merged
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/afe88fb8
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/afe88fb8
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/afe88fb8
Branch: refs/heads/jira/http2
Commit: afe88fb8b85eebc42b02c8bdd8fd54e70907d1e2
Parents: b26c6fd
Author: Cao Manh Dat <da...@apache.org>
Authored: Mon Sep 10 15:14:55 2018 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Mon Sep 10 15:14:55 2018 +0700
----------------------------------------------------------------------
.../solr/client/solrj/embedded/JettyConfig.java | 13 ++-
.../client/solrj/embedded/JettySolrRunner.java | 8 +-
.../solr/client/solrj/impl/Http2SolrClient.java | 4 +-
.../impl/Http2SolrClientCompatibilityTest.java | 107 +++++++++++++++++++
4 files changed, 127 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/afe88fb8/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
----------------------------------------------------------------------
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 28c3cdf..c177126 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
@@ -25,6 +25,8 @@ import java.util.TreeMap;
public class JettyConfig {
+ public final boolean useOnlyHttp1;
+
public final int port;
public final String context;
@@ -39,8 +41,9 @@ public class JettyConfig {
public final SSLConfig sslConfig;
- private JettyConfig(int port, String context, boolean stopAtShutdown, Long waitForLoadingCoresToFinishMs, Map<ServletHolder, String> extraServlets,
+ private JettyConfig(boolean useOnlyHttp1, int port, String context, boolean stopAtShutdown, Long waitForLoadingCoresToFinishMs, Map<ServletHolder, String> extraServlets,
Map<Class<? extends Filter>, String> extraFilters, SSLConfig sslConfig) {
+ this.useOnlyHttp1 = useOnlyHttp1;
this.port = port;
this.context = context;
this.stopAtShutdown = stopAtShutdown;
@@ -67,6 +70,7 @@ public class JettyConfig {
public static class Builder {
+ boolean useOnlyHttp1 = false;
int port = 0;
String context = "/solr";
boolean stopAtShutdown = true;
@@ -75,6 +79,11 @@ public class JettyConfig {
Map<Class<? extends Filter>, String> extraFilters = new LinkedHashMap<>();
SSLConfig sslConfig = null;
+ public Builder useOnlyHttp1(boolean useOnlyHttp1) {
+ this.useOnlyHttp1 = useOnlyHttp1;
+ return this;
+ }
+
public Builder setPort(int port) {
this.port = port;
return this;
@@ -123,7 +132,7 @@ public class JettyConfig {
}
public JettyConfig build() {
- return new JettyConfig(port, context, stopAtShutdown, waitForLoadingCoresToFinishMs, extraServlets, extraFilters, sslConfig);
+ return new JettyConfig(useOnlyHttp1, port, context, stopAtShutdown, waitForLoadingCoresToFinishMs, extraServlets, extraFilters, sslConfig);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/afe88fb8/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
----------------------------------------------------------------------
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 84469cd..55eb60b 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
@@ -239,8 +239,12 @@ public class JettySolrRunner {
connector = new ServerConnector(server, new SslConnectionFactory(sslcontext, "http/1.1"),
new HttpConnectionFactory(configuration));
} else {
- connector = new ServerConnector(server, new HttpConnectionFactory(configuration),
- new HTTP2CServerConnectionFactory(configuration));
+ if (config.useOnlyHttp1) {
+ connector = new ServerConnector(server, new HttpConnectionFactory(configuration));
+ } else {
+ connector = new ServerConnector(server, new HttpConnectionFactory(configuration),
+ new HTTP2CServerConnectionFactory(configuration));
+ }
}
connector.setReuseAddress(true);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/afe88fb8/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index e358aa9..57a0dd7 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -198,6 +198,7 @@ public class Http2SolrClient extends SolrClient {
HttpClientTransport transport;
if (builder.useHttp1_1 || builder.sslConfig != null) {
+ LOG.info("Create Http2SolrClient with HTTP/1.1 transport");
transport = new HttpClientTransportOverHTTP(2);
SslContextFactory sslContextFactory;
@@ -208,6 +209,7 @@ public class Http2SolrClient extends SolrClient {
}
httpClient = new HttpClient(transport, sslContextFactory);
} else {
+ LOG.info("Create Http2SolrClient with HTTP/2 transport");
//TODO adding https support for HTTP2 when use JDK 9
HTTP2Client http2client = new HTTP2Client();
transport = new HttpClientTransportOverHTTP2(http2client);
@@ -655,7 +657,7 @@ public class Http2SolrClient extends SolrClient {
private SSLConfig sslConfig = defaultSSLConfig;
private Integer idleTimeout;
private Integer connectionTimeout;
- private boolean useHttp1_1 = false;
+ private boolean useHttp1_1 = Boolean.getBoolean("solr.http1");
protected String baseSolrUrl;
private Request.BeginListener beginListener = request -> {};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/afe88fb8/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
new file mode 100644
index 0000000..b5df28a
--- /dev/null
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.impl;
+
+import org.apache.http.ParseException;
+import org.apache.solr.SolrJettyTestBase;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
+import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
+import org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2;
+import org.eclipse.jetty.servlet.ServletHolder;
+
+@SolrTestCaseJ4.SuppressSSL
+public class Http2SolrClientCompatibilityTest extends SolrJettyTestBase {
+
+ public void testSystemPropertyFlag() {
+ System.setProperty("solr.http1", "true");
+ try (Http2SolrClient client = new Http2SolrClient.Builder("")
+ .build()) {
+ assertTrue(client.getHttpClient().getTransport() instanceof HttpClientTransportOverHTTP);
+ }
+ System.clearProperty("solr.http1");
+ try (Http2SolrClient client = new Http2SolrClient.Builder("")
+ .build()) {
+ assertTrue(client.getHttpClient().getTransport() instanceof HttpClientTransportOverHTTP2);
+ }
+ }
+
+ public void testConnectToOldNodesUsingHttp1() throws Exception {
+
+ JettyConfig jettyConfig = JettyConfig.builder()
+ .withServlet(new ServletHolder(Http2SolrClientTest.DebugServlet.class), "/debug/*")
+ .useOnlyHttp1(true)
+ .build();
+ createJetty(legacyExampleCollection1SolrHome(), jettyConfig);
+
+ try (Http2SolrClient client = new Http2SolrClient.Builder(jetty.getBaseUrl().toString() + "/debug/foo")
+ .useHttp1_1(true)
+ .build()) {
+ assertTrue(client.getHttpClient().getTransport() instanceof HttpClientTransportOverHTTP);
+ try {
+ client.query(new SolrQuery("*:*"), SolrRequest.METHOD.GET);
+ } catch (ParseException ignored) {}
+ }
+ afterSolrJettyTestBase();
+ }
+
+ public void testConnectToNewNodesUsingHttp1() throws Exception {
+
+ JettyConfig jettyConfig = JettyConfig.builder()
+ .withServlet(new ServletHolder(Http2SolrClientTest.DebugServlet.class), "/debug/*")
+ .useOnlyHttp1(false)
+ .build();
+ createJetty(legacyExampleCollection1SolrHome(), jettyConfig);
+
+ try (Http2SolrClient client = new Http2SolrClient.Builder(jetty.getBaseUrl().toString() + "/debug/foo")
+ .useHttp1_1(true)
+ .build()) {
+ assertTrue(client.getHttpClient().getTransport() instanceof HttpClientTransportOverHTTP);
+ try {
+ client.query(new SolrQuery("*:*"), SolrRequest.METHOD.GET);
+ } catch (ParseException ignored) {}
+ }
+ afterSolrJettyTestBase();
+ }
+
+ public void testConnectToOldNodesUsingHttp2() throws Exception {
+ // if this test some how failure, this mean that Jetty client now be able to switch between HTTP/1
+ // and HTTP/2.2 protocol dynamically therefore rolling updates will be easier we should then notify this to users
+ JettyConfig jettyConfig = JettyConfig.builder()
+ .withServlet(new ServletHolder(Http2SolrClientTest.DebugServlet.class), "/debug/*")
+ .useOnlyHttp1(true)
+ .build();
+ createJetty(legacyExampleCollection1SolrHome(), jettyConfig);
+ try (Http2SolrClient client = new Http2SolrClient.Builder(jetty.getBaseUrl().toString() + "/debug/foo")
+ .build()) {
+ assertTrue(client.getHttpClient().getTransport() instanceof HttpClientTransportOverHTTP2);
+ try {
+ client.query(new SolrQuery("*:*"), SolrRequest.METHOD.GET);
+ fail("Jetty client with HTTP2 transport should not be able to connect to HTTP1 only nodes");
+ } catch (ParseException ignored) {
+ fail("Jetty client with HTTP2 transport should not be able to connect to HTTP1 only nodes");
+ } catch (SolrServerException e) {
+ // expected
+ }
+ }
+ afterSolrJettyTestBase();
+ }
+}