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 4049e39ad17c6d63a0631c24b047ca34c3e64d98 Author: heyile <[email protected]> AuthorDate: Thu Oct 11 07:17:22 2018 +0800 [SCB-837] make http2 production ready: optimize endpointMetric set logic --- .../vertx/metrics/DefaultHttpClientMetrics.java | 28 +++++++--------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java index 71d4ca1..3fb9af3 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/DefaultHttpClientMetrics.java @@ -27,7 +27,6 @@ import io.vertx.core.http.HttpClientOptions; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpClientResponse; import io.vertx.core.http.WebSocket; -import io.vertx.core.http.impl.HttpClientImpl; import io.vertx.core.net.SocketAddress; import io.vertx.core.net.impl.SocketAddressImpl; import io.vertx.core.spi.metrics.HttpClientMetrics; @@ -83,13 +82,9 @@ public class DefaultHttpClientMetrics implements @Override public void endpointConnected(DefaultClientEndpointMetric endpointMetric, DefaultHttpSocketMetric socketMetric) { - //only http1.1 will invoke this method, just make a check - if (endpointMetric != null) { - if (endpointMetric != socketMetric.getEndpointMetric()) { - socketMetric.setEndpointMetric(endpointMetric); - } - endpointMetric.onConnect(); - } + // as http2 client will not invoke this method, the endpointMetric info will lost. + // you can get more details from https://github.com/eclipse-vertx/vert.x/issues/2660 + // hence, we will set endpointMetric info in the method connected(SocketAddress remoteAddress, String remoteName) } @Override @@ -144,18 +139,11 @@ public class DefaultHttpClientMetrics implements @Override public DefaultHttpSocketMetric connected(SocketAddress remoteAddress, String remoteName) { - - DefaultHttpSocketMetric socketMetric = new DefaultHttpSocketMetric(null); - try { - DefaultHttpClientMetrics clientMetrics = (DefaultHttpClientMetrics) ((HttpClientImpl) client).getMetrics(); - DefaultClientEndpointMetric clientEndpointMetric = clientMetrics.clientEndpointMetricManager - .getClientEndpointMetricMap().get(remoteAddress); - // set endPointMetric when use http2 - socketMetric.setEndpointMetric(clientEndpointMetric); - } catch (Exception e) { - LOGGER.warn("if you use http2, there may cause a null pointer exception. {}/{}", remoteAddress, remoteName); - } - return socketMetric; + //we can get endpointMetric info here, so set the endpointMetric info directly + DefaultClientEndpointMetric clientEndpointMetric = this.clientEndpointMetricManager + .getClientEndpointMetric(remoteAddress); + clientEndpointMetric.onConnect(); + return new DefaultHttpSocketMetric(clientEndpointMetric); } @Override
