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 ac75fce6cd9aa7fc46281fd7cf7a4488f8c577f0
Author: heyile <[email protected]>
AuthorDate: Wed Oct 10 17:39:56 2018 +0800

    [SCB-837] make http2 production ready: bug fix, metrics compatible with 
http2
---
 .../vertx/metrics/DefaultHttpClientMetrics.java    | 28 +++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 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 98f5fd2..71d4ca1 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
@@ -19,12 +19,15 @@ package org.apache.servicecomb.foundation.vertx.metrics;
 import 
org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultClientEndpointMetric;
 import 
org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultClientEndpointMetricManager;
 import 
org.apache.servicecomb.foundation.vertx.metrics.metric.DefaultHttpSocketMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import io.vertx.core.http.HttpClient;
 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;
@@ -34,6 +37,9 @@ import io.vertx.core.spi.metrics.HttpClientMetrics;
  */
 public class DefaultHttpClientMetrics implements
     HttpClientMetrics<DefaultHttpSocketMetric, Object, 
DefaultHttpSocketMetric, DefaultClientEndpointMetric, Object> {
+
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultHttpClientMetrics.class);
+
   private final DefaultClientEndpointMetricManager clientEndpointMetricManager;
 
   private final HttpClient client;
@@ -77,8 +83,13 @@ public class DefaultHttpClientMetrics implements
 
   @Override
   public void endpointConnected(DefaultClientEndpointMetric endpointMetric, 
DefaultHttpSocketMetric socketMetric) {
-    socketMetric.setEndpointMetric(endpointMetric);
-    endpointMetric.onConnect();
+    //only http1.1 will invoke this method, just make a check
+    if (endpointMetric != null) {
+      if (endpointMetric != socketMetric.getEndpointMetric()) {
+        socketMetric.setEndpointMetric(endpointMetric);
+      }
+      endpointMetric.onConnect();
+    }
   }
 
   @Override
@@ -133,7 +144,18 @@ public class DefaultHttpClientMetrics implements
 
   @Override
   public DefaultHttpSocketMetric connected(SocketAddress remoteAddress, String 
remoteName) {
-    return new DefaultHttpSocketMetric(null);
+
+    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;
   }
 
   @Override

Reply via email to