This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit c798f554bb71cc92843dd429a4336f78bb429c07 Author: weichao666 <[email protected]> AuthorDate: Thu Oct 18 11:33:12 2018 +0800 [SCB-967] Support all transport --- .../loadbalance/LoadbalanceHandler.java | 15 ++++++++++---- .../loadbalance/TestLoadBalanceHandler2.java | 24 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java index ba10f8f..d8ae0e1 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadbalanceHandler.java @@ -17,6 +17,7 @@ package org.apache.servicecomb.loadbalance; +import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -66,7 +67,7 @@ import rx.Observable; public class LoadbalanceHandler implements Handler { public static final String CONTEXT_KEY_SERVER_LIST = "x-context-server-list"; - public static final String SERVICECOMB_SERVER_ENDPOINT = "servicecomb-server-endpoint"; + public static final String SERVICECOMB_SERVER_ENDPOINT = "scb-endpoint"; // just a wrapper to make sure in retry mode to choose a different server. class RetryLoadBalancer implements ILoadBalancer { @@ -177,12 +178,18 @@ public class LoadbalanceHandler implements Handler { public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception { String endpointUri = invocation.getLocalContext(SERVICECOMB_SERVER_ENDPOINT); if (endpointUri != null) { - boolean isRest = endpointUri.startsWith("rest://"); - if (!isRest) { + String endpointRule = "[a-z]+://.+"; + if (!endpointUri.matches(endpointRule)) { throw new InvocationException(Status.BAD_REQUEST, "the endpoint's format of the configuration is incorrect, e.g rest://127.0.0.1:8080"); } - Transport transport = CseContext.getInstance().getTransportManager().findTransport("rest"); + URI formatUri = new URI(endpointUri); + Transport transport = CseContext.getInstance().getTransportManager().findTransport(formatUri.getScheme()); + if (transport == null) { + LOGGER.error("not deployed transport {}, ignore {}.", formatUri.getScheme(), endpointUri); + throw new InvocationException(Status.BAD_REQUEST, + "the endpoint's transport is not found."); + } Endpoint endpoint = new Endpoint(transport, endpointUri); invocation.setEndpoint(endpoint); } diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java index efd011e..51cb333 100644 --- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java +++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceHandler2.java @@ -254,12 +254,32 @@ public class TestLoadBalanceHandler2 { } Assert.assertEquals("rest://localhost:9092", invocation.getEndpoint().getEndpoint()); - invocation.addLocalContext("servicecomb-server-endpoint", "rest://127.0.0.1:8080"); + //success + invocation.addLocalContext("scb-endpoint", "rest://127.0.0.1:8080?sslEnabled=true&protocol=http2"); try { handler.handle(invocation, asyncResp); } catch (Exception e) { } - Assert.assertEquals("rest://127.0.0.1:8080", invocation.getEndpoint().getEndpoint()); + Assert.assertEquals("rest://127.0.0.1:8080?sslEnabled=true&protocol=http2", invocation.getEndpoint().getEndpoint()); + + //endpoint format is not correct + invocation.addLocalContext("scb-endpoint", "127.0.0.1:8080"); + try { + handler.handle(invocation, asyncResp); + Assert.assertEquals("endpoint's format is not correct, throw exception", " but not throw exception"); + } catch (Exception e) { + Assert.assertTrue(e.getMessage() + .contains("the endpoint's format of the configuration is incorrect, e.g rest://127.0.0.1:8080")); + } + + //transport is not find + invocation.addLocalContext("scb-endpoint", "my://127.0.0.1:8080?sslEnabled=true&protocol=http2"); + try { + handler.handle(invocation, asyncResp); + Assert.assertEquals("endpoint's transport not found, throw exception", "but not throw exception"); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("the endpoint's transport is not found.")); + } } }
