You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/02/14 01:24:47 UTC

[incubator-servicecomb-java-chassis] branch master updated (9720cfc -> 0a69db5)

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

ningjiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git.


    from 9720cfc  SCB-260 Clarify copyright of HystrixCommandPropertiesExt
     new f9dd383  [SCB-314] Support custom rest transport server compress and max header size
     new 0a69db5  [SCB-314] Support custom rest transport server compress and max header size

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../demo/springmvc/client/SpringmvcClient.java           | 15 +++++++++++++++
 .../src/main/resources/microservice.yaml                 |  5 ++++-
 .../demo/springmvc/server/CodeFirstSpringmvc.java        | 16 ++++++++++++++--
 .../src/main/resources/microservice.yaml                 |  2 ++
 .../transport/rest/client/RestTransportClient.java       |  1 +
 .../transport/rest/client/TransportClientConfig.java     |  4 ++++
 .../transport/rest/client/TestTransportClientConfig.java |  5 +++++
 .../transport/rest/vertx/RestServerVerticle.java         |  2 ++
 .../transport/rest/vertx/TransportConfig.java            | 14 ++++++++++++++
 .../transport/rest/vertx/TestTransportConfig.java        | 10 ++++++++++
 10 files changed, 71 insertions(+), 3 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.

[incubator-servicecomb-java-chassis] 02/02: [SCB-314] Support custom rest transport server compress and max header size

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 0a69db52db54b6a44daded18938cea290238b341
Author: jeho0815 <je...@email.com>
AuthorDate: Tue Feb 13 09:30:05 2018 +0800

    [SCB-314] Support custom rest transport server compress and max header size
---
 .../apache/servicecomb/demo/springmvc/client/SpringmvcClient.java  | 7 +++++--
 .../springmvc-client/src/main/resources/microservice.yaml          | 5 ++++-
 .../servicecomb/transport/rest/client/RestTransportClient.java     | 1 +
 .../servicecomb/transport/rest/client/TransportClientConfig.java   | 4 ++++
 .../transport/rest/client/TestTransportClientConfig.java           | 5 +++++
 5 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index b3e0f85..c49fc05 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -95,8 +95,11 @@ public class SpringmvcClient {
     TestMgr.check(
         "Test sayhi compressed:This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This  [...]
         entityCompress.getBody());
-    TestMgr.check("gzip", entityCompress.getHeaders().get("content-encoding"));
-    TestMgr.check("75", entityCompress.getHeaders().get("content-length"));
+    // if server response is compressed, the content-length header will be removed , so can't check this.
+    // the transfer-encoding header will be missing when the server is setted to not compressed
+    if (entityCompress.getHeaders().get("transfer-encoding") != null) {
+      TestMgr.check("chunked", entityCompress.getHeaders().get("transfer-encoding").get(0));
+    }
 
     //0.5.0 later version metrics integration test
     try {
diff --git a/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml b/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
index 13cc606..72d65bf 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
@@ -35,7 +35,10 @@ cse:
           interval: 90
         watch: false
       autodiscovery: true
-
+  rest:
+    client:
+      connection:
+        compression: true
   references:
     version-rule: 0+
   handler:
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
index b326a09..1fed065 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/RestTransportClient.java
@@ -55,6 +55,7 @@ public final class RestTransportClient {
     httpClientOptions.setMaxPoolSize(TransportClientConfig.getConnectionMaxPoolSize());
     httpClientOptions.setIdleTimeout(TransportClientConfig.getConnectionIdleTimeoutInSeconds());
     httpClientOptions.setKeepAlive(TransportClientConfig.getConnectionKeepAlive());
+    httpClientOptions.setTryUseCompression(TransportClientConfig.getConnectionCompression());
 
     VertxTLSBuilder.buildHttpClientOptions(SSL_KEY, httpClientOptions);
     return httpClientOptions;
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
index f46d9b0..9803267 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java
@@ -40,4 +40,8 @@ public final class TransportClientConfig {
   public static boolean getConnectionKeepAlive() {
     return DynamicPropertyFactory.getInstance().getBooleanProperty("cse.rest.client.connection.keepAlive", true).get();
   }
+  
+  public static boolean getConnectionCompression() {
+    return DynamicPropertyFactory.getInstance().getBooleanProperty("cse.rest.client.connection.compression", false).get();
+  }
 }
diff --git a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java
index 343d64d..bbc2e75 100644
--- a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java
+++ b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java
@@ -40,4 +40,9 @@ public class TestTransportClientConfig {
   public void getConnectionKeepAlive() {
     Assert.assertTrue(TransportClientConfig.getConnectionKeepAlive());
   }
+
+  @Test
+  public void getConnectionCompression() {
+    Assert.assertFalse(TransportClientConfig.getConnectionCompression());
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.

[incubator-servicecomb-java-chassis] 01/02: [SCB-314] Support custom rest transport server compress and max header size

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit f9dd383f37564da7bd8e230fead7fde3c27e8b38
Author: jeho0815 <je...@email.com>
AuthorDate: Mon Feb 12 15:13:13 2018 +0800

    [SCB-314] Support custom rest transport server compress and max header size
---
 .../demo/springmvc/client/SpringmvcClient.java           | 12 ++++++++++++
 .../demo/springmvc/server/CodeFirstSpringmvc.java        | 16 ++++++++++++++--
 .../src/main/resources/microservice.yaml                 |  2 ++
 .../transport/rest/vertx/RestServerVerticle.java         |  2 ++
 .../transport/rest/vertx/TransportConfig.java            | 14 ++++++++++++++
 .../transport/rest/vertx/TestTransportConfig.java        | 10 ++++++++++
 6 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index f2fc0d7..b3e0f85 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.demo.springmvc.client;
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.servicecomb.core.CseContext;
 import org.apache.servicecomb.demo.DemoConst;
 import org.apache.servicecomb.demo.TestMgr;
@@ -85,6 +86,17 @@ public class SpringmvcClient {
 
       testController();
     }
+    HttpHeaders headers = new HttpHeaders();
+    headers.set("Accept-Encoding", "gzip");
+    HttpEntity<String> entity = new HttpEntity<>(headers);
+    ResponseEntity<String> entityCompress =
+        restTemplate.exchange(prefix
+            + "/codeFirstSpringmvc/sayhi/compressed/{name}/v2", HttpMethod.GET, entity, String.class, "Test");
+    TestMgr.check(
+        "Test sayhi compressed:This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This  [...]
+        entityCompress.getBody());
+    TestMgr.check("gzip", entityCompress.getHeaders().get("content-encoding"));
+    TestMgr.check("75", entityCompress.getHeaders().get("content-length"));
 
     //0.5.0 later version metrics integration test
     try {
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index 103e37e..5bbd007 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -85,7 +85,7 @@ public class CodeFirstSpringmvc {
       String content1 = IOUtils.toString(is1);
       String content2 = IOUtils.toString(is2);
       return String.format("%s:%s:%s\n"
-              + "%s:%s:%s",
+          + "%s:%s:%s",
           file1.getOriginalFilename(),
           file1.getContentType(),
           content1,
@@ -220,6 +220,18 @@ public class CodeFirstSpringmvc {
     return name + " sayhi";
   }
 
+  @RequestMapping(path = "/sayhi/compressed/{name}/v2", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+  public String sayHiForCompressed(@PathVariable(name = "name") String name) {
+    String bigText =
+        "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,"
+            + "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,"
+            + "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,"
+            + "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,"
+            + "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,"
+            + "This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text,This is a big text!";
+    return name + " sayhi compressed:" + bigText;
+  }
+
   @RequestMapping(path = "/sayhi/{name}/v2", method = RequestMethod.PUT)
   public String sayHi2(@PathVariable(name = "name") String name) {
     return name + " sayhi 2";
@@ -298,7 +310,7 @@ public class CodeFirstSpringmvc {
     return new OutputModelForTestIgnore("output_id", input.getInputId(), input.getContent(), input.getInputObject(),
         input.getInputJsonObject(), input.getInputIgnoreInterface(),
         new Person("outputSomeone"), new JsonObject("{\"OutputJsonKey\" : \"OutputJsonValue\"}"), () -> {
-    });
+        });
   }
 
   @SuppressWarnings("unchecked")
diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
index d7a69d8..34b582a 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
@@ -46,6 +46,8 @@ cse:
       autodiscovery: true
   rest:
     address: 0.0.0.0:8080?sslEnabled=true
+    server:
+      compression: true
   highway:
     address: 0.0.0.0:7070?sslEnabled=true
   handler:
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
index d011e8a..73eab86 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java
@@ -124,6 +124,8 @@ public class RestServerVerticle extends AbstractVerticle {
     HttpServerOptions serverOptions = new HttpServerOptions();
     serverOptions.setUsePooledBuffers(true);
     serverOptions.setIdleTimeout(TransportConfig.getConnectionIdleTimeoutInSeconds());
+    serverOptions.setCompressionSupported(TransportConfig.getCompressed());
+    serverOptions.setMaxHeaderSize(TransportConfig.getMaxHeaderSize());
 
     if (endpointObject.isSslEnabled()) {
       SSLOptionFactory factory =
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
index e723ef0..75bcc98 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java
@@ -21,6 +21,8 @@ import com.netflix.config.DynamicIntProperty;
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.config.DynamicStringProperty;
 
+import io.vertx.core.http.HttpServerOptions;
+
 public final class TransportConfig {
   private TransportConfig() {
   }
@@ -42,4 +44,16 @@ public final class TransportConfig {
         .getIntProperty("cse.rest.server.connection.idleTimeoutInSeconds", 60)
         .get();
   }
+
+  public static boolean getCompressed() {
+    return DynamicPropertyFactory.getInstance()
+        .getBooleanProperty("cse.rest.server.compression", false)
+        .get();
+  }
+
+  public static int getMaxHeaderSize() {
+    return DynamicPropertyFactory.getInstance()
+        .getIntProperty("cse.rest.server.maxHeaderSize", HttpServerOptions.DEFAULT_MAX_HEADER_SIZE)
+        .get();
+  }
 }
diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java
index 514fb13..e63dcd5 100644
--- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java
+++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java
@@ -63,4 +63,14 @@ public class TestTransportConfig {
     Assert.assertEquals(10, TransportConfig.getThreadCount());
     config.clearProperty("cse.rest.server.thread-count");
   }
+
+  @Test
+  public void testGetCompressedAndHeaderSize() {
+    config.addProperty("cse.rest.server.compression", true);
+    Assert.assertEquals(true, TransportConfig.getCompressed());
+    config.addProperty("cse.rest.server.maxHeaderSize", 2048);
+    Assert.assertEquals(2048, TransportConfig.getMaxHeaderSize());
+    config.clearProperty("cse.rest.server.compression");
+    config.clearProperty("cse.rest.server.maxHeaderSize");
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.