This is an automated email from the ASF dual-hosted git repository. wujimin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 176e0eb96e9d5a0f01e5540f26d7fdb1ba8ecb40 Author: yaohaishi <[email protected]> AuthorDate: Wed Jan 31 17:19:21 2018 +0800 [SCB-322] merge config center modification --- .../config/client/ConfigCenterClient.java | 30 +++++++++-- .../config/client/ConfigCenterConfig.java | 39 ++++++++++++-- .../servicecomb/config/client/ConnFailEvent.java} | 23 ++++---- .../servicecomb/config/client/ConnSuccEvent.java} | 18 +------ .../config/client/TestConfigCenterClient.java | 63 ++++++++++++++++++++++ .../servicecomb/config/client/TestURIConst.java | 28 +++++----- 6 files changed, 151 insertions(+), 50 deletions(-) diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java index 602f4a9..306cf7f 100644 --- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java +++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java @@ -39,6 +39,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.servicecomb.config.archaius.sources.ConfigCenterConfigurationSourceImpl; import org.apache.servicecomb.foundation.auth.AuthHeaderProvider; import org.apache.servicecomb.foundation.auth.SignRequest; +import org.apache.servicecomb.foundation.common.event.EventManager; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.foundation.common.net.NetUtils; import org.apache.servicecomb.foundation.common.utils.JsonUtils; @@ -67,6 +68,7 @@ import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.WebSocket; import io.vertx.core.http.impl.FrameType; import io.vertx.core.http.impl.ws.WebSocketFrameImpl; +import io.vertx.core.net.ProxyOptions; /** * Created by on 2016/5/17. @@ -126,8 +128,10 @@ public class ConfigCenterClient { } MemberDiscovery memberdis = new MemberDiscovery(serverUri); refreshMembers(memberdis); - EXECUTOR.scheduleWithFixedDelay(new ConfigRefresh(parseConfigUtils, memberdis), firstRefreshInterval, - refreshInterval, TimeUnit.MILLISECONDS); + EXECUTOR.scheduleWithFixedDelay(new ConfigRefresh(parseConfigUtils, memberdis), + firstRefreshInterval, + refreshInterval, + TimeUnit.MILLISECONDS); } private void refreshMembers(MemberDiscovery memberDiscovery) { @@ -167,9 +171,17 @@ public class ConfigCenterClient { private HttpClientOptions createHttpClientOptions() { HttpClientOptions httpClientOptions = new HttpClientOptions(); + if (ConfigCenterConfig.INSTANCE.isProxyEnable()) { + ProxyOptions proxy = new ProxyOptions() + .setHost(ConfigCenterConfig.INSTANCE.getProxyHost()) + .setPort(ConfigCenterConfig.INSTANCE.getProxyPort()) + .setUsername(ConfigCenterConfig.INSTANCE.getProxyUsername()) + .setPassword(ConfigCenterConfig.INSTANCE.getProxyPasswd()); + httpClientOptions.setProxyOptions(proxy); + } httpClientOptions.setConnectTimeout(CONFIG_CENTER_CONFIG.getConnectionTimeout()); if (serverUri.get(0).toLowerCase().startsWith("https")) { - LOGGER.debug("service center client performs requests over TLS"); + LOGGER.debug("config center client performs requests over TLS"); SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(SSL_KEY, ConfigCenterConfig.INSTANCE.getConcurrentCompositeConfiguration()); SSLOption sslOption; @@ -216,7 +228,7 @@ public class ConfigCenterClient { // create watch and wait for done public void doWatch(String configCenter) - throws URISyntaxException, UnsupportedEncodingException, InterruptedException { + throws UnsupportedEncodingException, InterruptedException { CountDownLatch waiter = new CountDownLatch(1); IpPort ipPort = NetUtils.parseIpPortFromURI(configCenter); String url = URIConst.REFRESH_ITEMS + "?dimensionsInfo=" @@ -285,7 +297,9 @@ public class ConfigCenterClient { private void sendHeartbeat(WebSocket ws) { try { ws.writeFrame(new WebSocketFrameImpl(FrameType.PING)); + EventManager.post(new ConnSuccEvent()); } catch (IllegalStateException e) { + EventManager.post(new ConnFailEvent("heartbeat fail, " + e.getMessage())); LOGGER.error("heartbeat fail", e); } } @@ -302,11 +316,17 @@ public class ConfigCenterClient { .refreshConfigItems(JsonUtils.OBJ_MAPPER.readValue(buf.toString(), new TypeReference<LinkedHashMap<String, Map<String, String>>>() { })); + EventManager.post(new ConnSuccEvent()); } catch (IOException e) { + EventManager.post(new ConnFailEvent("config refresh result parse fail " + e.getMessage())); LOGGER.error("config refresh result parse fail", e); } }); } else { + rsp.bodyHandler(buf -> { + LOGGER.error("fetch config fail: " + buf); + }); + EventManager.post(new ConnFailEvent("fetch config fail")); LOGGER.error("fetch config fail"); } }); @@ -333,7 +353,7 @@ public class ConfigCenterClient { try { signReq.setEndpoint(new URI(endpoint)); } catch (URISyntaxException e) { - LOGGER.warn("set uri failed, uri is {}, message: {}", endpoint.toString(), e.getMessage()); + LOGGER.warn("set uri failed, uri is {}, message: {}", endpoint, e.getMessage()); } Map<String, String[]> queryParams = new HashMap<>(); diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java index 89e7ad8..71abdd0 100644 --- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java +++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java @@ -18,7 +18,6 @@ package org.apache.servicecomb.config.client; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.google.common.base.Joiner; @@ -57,6 +56,18 @@ public final class ConfigCenterConfig { private static final String INSTANCE_TAGS = "instance_description.properties.tags"; + public static final String PROXY_PRE_NAME = "cse.proxy."; + + public static final String PROXY_ENABLE = PROXY_PRE_NAME + "enable"; + + public static final String PROXY_HOST = PROXY_PRE_NAME + "host"; + + public static final String PROXY_PORT = PROXY_PRE_NAME + "port"; + + public static final String PROXY_USERNAME = PROXY_PRE_NAME + "username"; + + public static final String PROXY_PASSWD = PROXY_PRE_NAME + "passwd"; + private static final int DEFAULT_REFRESH_MODE = 0; private static final int DEFAULT_REFRESH_PORT = 30104; @@ -71,7 +82,7 @@ public final class ConfigCenterConfig { } public static void setConcurrentCompositeConfiguration(ConcurrentCompositeConfiguration config) { - finalConfig = (ConcurrentCompositeConfiguration) config; + finalConfig = config; } public ConcurrentCompositeConfiguration getConcurrentCompositeConfiguration() { @@ -110,6 +121,26 @@ public final class ConfigCenterConfig { return finalConfig.getInt(FIRST_REFRESH_INTERVAL, DEFAULT_FIRST_REFRESH_INTERVAL); } + public Boolean isProxyEnable() { + return finalConfig.getBoolean(PROXY_ENABLE, false); + } + + public String getProxyHost() { + return finalConfig.getString(PROXY_HOST, "127.0.0.1"); + } + + public int getProxyPort() { + return finalConfig.getInt(PROXY_PORT, 8080); + } + + public String getProxyUsername() { + return finalConfig.getString(PROXY_USERNAME, "user"); + } + + public String getProxyPasswd() { + return finalConfig.getString(PROXY_PASSWD, "passwd"); + } + @SuppressWarnings("unchecked") public String getServiceName() { String service = finalConfig.getString(SERVICE_NAME); @@ -140,7 +171,9 @@ public final class ConfigCenterConfig { public List<String> getServerUri() { String[] result = finalConfig.getStringArray(SERVER_URL_KEY); List<String> configCenterUris = new ArrayList<>(result.length); - configCenterUris.addAll(Arrays.asList(result)); + for (int i = 0; i < result.length; i++) { + configCenterUris.add(result[i]); + } return configCenterUris; } diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnFailEvent.java similarity index 59% copy from dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java copy to dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnFailEvent.java index 73a002b..b608fae 100644 --- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java +++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnFailEvent.java @@ -17,22 +17,19 @@ package org.apache.servicecomb.config.client; -import org.apache.servicecomb.config.ConfigUtil; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; +public class ConnFailEvent { -public class TestURIConst { - @BeforeClass - public static void setUpClass() { - ConfigCenterConfig.setConcurrentCompositeConfiguration(ConfigUtil.createLocalConfig()); + private String msg; + + public ConnFailEvent(String msg) { + this.msg = msg; } - @Test - public void testURIV3() { - Assert.assertEquals(URIConst.MEMBERS, "/v3/default/configuration/members"); - Assert.assertEquals(URIConst.REFRESH_ITEMS, "/v3/default/configuration/refresh/items"); - Assert.assertEquals(URIConst.ITEMS, "/v3/default/configuration/items"); + public String getMsg() { + return msg; } + public void setMsg(String msg) { + this.msg = msg; + } } diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnSuccEvent.java similarity index 59% copy from dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java copy to dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnSuccEvent.java index 73a002b..54239ab 100644 --- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java +++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConnSuccEvent.java @@ -17,22 +17,6 @@ package org.apache.servicecomb.config.client; -import org.apache.servicecomb.config.ConfigUtil; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -public class TestURIConst { - @BeforeClass - public static void setUpClass() { - ConfigCenterConfig.setConcurrentCompositeConfiguration(ConfigUtil.createLocalConfig()); - } - - @Test - public void testURIV3() { - Assert.assertEquals(URIConst.MEMBERS, "/v3/default/configuration/members"); - Assert.assertEquals(URIConst.REFRESH_ITEMS, "/v3/default/configuration/refresh/items"); - Assert.assertEquals(URIConst.ITEMS, "/v3/default/configuration/items"); - } +public class ConnSuccEvent { } diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java index a372187..0f9013c 100644 --- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java +++ b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java @@ -18,12 +18,14 @@ package org.apache.servicecomb.config.client; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import org.apache.servicecomb.config.ConfigUtil; import org.apache.servicecomb.config.archaius.sources.ConfigCenterConfigurationSourceImpl; import org.apache.servicecomb.config.archaius.sources.ConfigCenterConfigurationSourceImpl.UpdateHandler; import org.apache.servicecomb.config.client.ConfigCenterClient.ConfigRefresh; +import org.apache.servicecomb.foundation.common.event.EventManager; import org.apache.servicecomb.foundation.vertx.client.http.HttpClientWithContext; import org.apache.servicecomb.foundation.vertx.client.http.HttpClientWithContext.RunHandler; import org.junit.Assert; @@ -31,6 +33,8 @@ import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mockito; +import com.google.common.eventbus.Subscribe; + import io.vertx.core.Handler; import io.vertx.core.MultiMap; import io.vertx.core.buffer.Buffer; @@ -168,4 +172,63 @@ public class TestConfigCenterClient { Deencapsulation.setField(cc, "refreshMode", 0); refresh.run(); } + + @SuppressWarnings("unchecked") + @Test + public void testConfigRefreshException() { + ConfigCenterConfigurationSourceImpl impl = new ConfigCenterConfigurationSourceImpl(); + Map<String, String> map = new HashMap<>(); + EventManager.register(new Object() { + @Subscribe + public void testMsg(Object event) { + if (event instanceof ConnFailEvent) { + map.put("result", "Fail event trigger"); + } + if (event instanceof ConnSuccEvent) { + map.put("result", "Succ event trigger"); + } + } + }); + impl.init(ConfigUtil.createLocalConfig()); + UpdateHandler updateHandler = impl.new UpdateHandler(); + HttpClientRequest request = Mockito.mock(HttpClientRequest.class); + Mockito.when(request.headers()).thenReturn(MultiMap.caseInsensitiveMultiMap()); + Buffer rsp = Mockito.mock(Buffer.class); + Mockito.when(rsp.toString()) + .thenReturn("{\"application\":{\"2\":\"2\",\"aa\":\"1\"},\"vmalledge\":{\"aa\":\"3\"}}"); + + HttpClientResponse event = Mockito.mock(HttpClientResponse.class); + Mockito.when(event.bodyHandler(Mockito.any(Handler.class))).then(invocation -> { + Handler<Buffer> handler = invocation.getArgumentAt(0, Handler.class); + handler.handle(rsp); + return null; + }); + Mockito.when(event.statusCode()).thenReturn(400); + Buffer buf = Mockito.mock(Buffer.class); + Mockito.when(buf.toJsonObject()).thenReturn(new JsonObject( + "{\"action\":\"UPDATE\",\"key\":\"vmalledge\",\"value\":\"{\\\"aa\\\":\\\"3\\\"}\"}")); + HttpClient httpClient = Mockito.mock(HttpClient.class); + Mockito.when( + httpClient.get(Mockito.anyInt(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Handler.class))) + .then(invocation -> { + Handler<HttpClientResponse> handler = invocation.getArgumentAt(3, Handler.class); + handler.handle(event); + return request; + }); + new MockUp<HttpClientWithContext>() { + @Mock + public void runOnContext(RunHandler handler) { + handler.run(httpClient); + } + }; + ConfigCenterClient cc = new ConfigCenterClient(updateHandler); + ParseConfigUtils parseConfigUtils = new ParseConfigUtils(updateHandler); + MemberDiscovery memberdis = new MemberDiscovery(Arrays.asList("http://configcentertest:30103")); + ConfigRefresh refresh = cc.new ConfigRefresh(parseConfigUtils, memberdis); + refresh.run(); + Assert.assertEquals("Fail event trigger", map.get("result")); + Mockito.when(event.statusCode()).thenReturn(200); + refresh.run(); + Assert.assertEquals("Succ event trigger", map.get("result")); + } } diff --git a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java index 73a002b..51eeffb 100644 --- a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java +++ b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestURIConst.java @@ -17,22 +17,26 @@ package org.apache.servicecomb.config.client; -import org.apache.servicecomb.config.ConfigUtil; import org.junit.Assert; -import org.junit.BeforeClass; import org.junit.Test; -public class TestURIConst { - @BeforeClass - public static void setUpClass() { - ConfigCenterConfig.setConcurrentCompositeConfiguration(ConfigUtil.createLocalConfig()); - } +import mockit.Expectations; +import mockit.Mocked; +public class TestURIConst { @Test - public void testURIV3() { - Assert.assertEquals(URIConst.MEMBERS, "/v3/default/configuration/members"); - Assert.assertEquals(URIConst.REFRESH_ITEMS, "/v3/default/configuration/refresh/items"); - Assert.assertEquals(URIConst.ITEMS, "/v3/default/configuration/items"); - } + public void testURI(final @Mocked ConfigCenterConfig config) { + new Expectations() { + { + config.getDomainName(); + result = "mytenant"; + config.getApiVersion(); + result = "v3"; + } + }; + Assert.assertEquals(URIConst.MEMBERS, "/v3/mytenant/configuration/members"); + Assert.assertEquals(URIConst.REFRESH_ITEMS, "/v3/mytenant/configuration/refresh/items"); + Assert.assertEquals(URIConst.ITEMS, "/v3/mytenant/configuration/items"); + } } -- To stop receiving notification emails like this one, please contact [email protected].
