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/01/11 07:03:06 UTC

[incubator-servicecomb-java-chassis] branch master updated (0d998e5 -> 06f42c5)

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 0d998e5  SCB-216 fix zipkin upgrade problems.
     new 7b836c7  SCB-217 avoid concurrentHashMap concurrence problem of computeIfAbsent
     new 06f42c5  resolve compile warnings

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:
 .../core/executor/FixedThreadExecutor.java         |  5 +-
 .../handler/impl/SimpleLoadBalanceHandler.java     |  4 +-
 .../definition/loader/TestDynamicSchemaLoader.java |  2 +
 .../demo/crossapp/CrossappBootListener.java        |  1 +
 .../demo/crossapp/CrossappBootListener.java        |  1 +
 .../demo/springmvc/client/SpringmvcClient.java     | 18 ++++---
 .../io/servicecomb/config/client/ApolloClient.java |  1 +
 .../config/client/ApolloClientTest.java            |  5 +-
 .../edge/core/CompatiblePathVersionMapper.java     |  4 +-
 .../core/OperationInstancesDiscoveryFilter.java    |  4 +-
 .../common/concurrent/ConcurrentHashMapEx.java     | 58 ++++++++++++++++++++++
 .../output/servo/RollingMetricsFileOutput.java     |  4 +-
 .../metrics/performance/MetricsDataMonitor.java    | 12 ++---
 .../foundation/vertx/client/ClientPoolManager.java |  4 +-
 .../tcp/AbstractTcpClientConnectionPool.java       |  4 +-
 .../loadbalance/LoadbalanceHandler.java            |  4 +-
 .../tests/tracing/TraceContextConfig.java          |  1 +
 .../metrics/core/monitor/RegistryMonitor.java      |  6 +--
 .../core/publish/DefaultHealthCheckerManager.java  |  6 ---
 .../metrics/prometheus/MetricsPublisher.java       | 23 ++++++++-
 .../samples/mwf/Log4JMetricsFileWriter.java        |  8 +--
 .../samples/mwf/Log4J2MetricsFileWriter.java       | 35 ++++++++++---
 .../springmvc/provider/SpringmvcHelloImpl.java     | 10 ----
 .../serviceregistry/consumer/AppManager.java       |  5 +-
 .../consumer/MicroserviceManager.java              |  4 +-
 .../consumer/MicroserviceVersions.java             |  6 +--
 .../discovery/DiscoveryTreeNode.java               |  6 +--
 .../serviceregistry/version/VersionRuleUtils.java  |  5 +-
 .../serviceregistry/version/VersionUtils.java      |  5 +-
 .../starter/discovery/CseDiscoveryClient.java      |  4 +-
 .../discovery/CseRibbonClientConfiguration.java    |  5 --
 .../generator/core/TestOperationGenerator.java     |  1 +
 32 files changed, 175 insertions(+), 86 deletions(-)
 create mode 100644 foundations/foundation-common/src/main/java/io/servicecomb/foundation/common/concurrent/ConcurrentHashMapEx.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].

[incubator-servicecomb-java-chassis] 01/02: SCB-217 avoid concurrentHashMap concurrence problem of computeIfAbsent

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 7b836c7f9ed0a81800744f1fdaa2cca6a4c6ff4f
Author: wujimin <wu...@huawei.com>
AuthorDate: Thu Jan 11 10:44:38 2018 +0800

    SCB-217 avoid concurrentHashMap concurrence problem of computeIfAbsent
---
 .../core/executor/FixedThreadExecutor.java         |  5 +-
 .../handler/impl/SimpleLoadBalanceHandler.java     |  4 +-
 .../edge/core/CompatiblePathVersionMapper.java     |  4 +-
 .../core/OperationInstancesDiscoveryFilter.java    |  4 +-
 .../common/concurrent/ConcurrentHashMapEx.java     | 58 ++++++++++++++++++++++
 .../output/servo/RollingMetricsFileOutput.java     |  4 +-
 .../metrics/performance/MetricsDataMonitor.java    | 12 ++---
 .../foundation/vertx/client/ClientPoolManager.java |  4 +-
 .../tcp/AbstractTcpClientConnectionPool.java       |  4 +-
 .../loadbalance/LoadbalanceHandler.java            |  4 +-
 .../metrics/core/monitor/RegistryMonitor.java      |  6 +--
 .../samples/mwf/Log4JMetricsFileWriter.java        |  8 +--
 .../samples/mwf/Log4J2MetricsFileWriter.java       | 34 ++++++++++---
 .../serviceregistry/consumer/AppManager.java       |  5 +-
 .../consumer/MicroserviceManager.java              |  4 +-
 .../consumer/MicroserviceVersions.java             |  6 +--
 .../discovery/DiscoveryTreeNode.java               |  6 +--
 .../serviceregistry/version/VersionRuleUtils.java  |  5 +-
 .../serviceregistry/version/VersionUtils.java      |  5 +-
 .../starter/discovery/CseDiscoveryClient.java      |  4 +-
 20 files changed, 135 insertions(+), 51 deletions(-)

diff --git a/core/src/main/java/io/servicecomb/core/executor/FixedThreadExecutor.java b/core/src/main/java/io/servicecomb/core/executor/FixedThreadExecutor.java
index 0969d49..1657569 100644
--- a/core/src/main/java/io/servicecomb/core/executor/FixedThreadExecutor.java
+++ b/core/src/main/java/io/servicecomb/core/executor/FixedThreadExecutor.java
@@ -20,7 +20,6 @@ package io.servicecomb.core.executor;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -30,6 +29,8 @@ import org.slf4j.LoggerFactory;
 
 import com.netflix.config.DynamicPropertyFactory;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+
 public class FixedThreadExecutor implements Executor {
   private static final Logger LOGGER = LoggerFactory.getLogger(FixedThreadExecutor.class);
 
@@ -44,7 +45,7 @@ public class FixedThreadExecutor implements Executor {
   // it's impossible that has too many network thread, so index will not too big that less than 0
   private AtomicInteger index = new AtomicInteger();
 
-  private Map<Long, Executor> threadExecutorMap = new ConcurrentHashMap<>();
+  private Map<Long, Executor> threadExecutorMap = new ConcurrentHashMapEx<>();
 
   public FixedThreadExecutor() {
     int groupCount = DynamicPropertyFactory.getInstance().getIntProperty(KEY_GROUP, 2).get();
diff --git a/core/src/main/java/io/servicecomb/core/handler/impl/SimpleLoadBalanceHandler.java b/core/src/main/java/io/servicecomb/core/handler/impl/SimpleLoadBalanceHandler.java
index b62a577..aa8f1d2 100644
--- a/core/src/main/java/io/servicecomb/core/handler/impl/SimpleLoadBalanceHandler.java
+++ b/core/src/main/java/io/servicecomb/core/handler/impl/SimpleLoadBalanceHandler.java
@@ -19,7 +19,6 @@ package io.servicecomb.core.handler.impl;
 
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.slf4j.Logger;
@@ -31,6 +30,7 @@ import io.servicecomb.core.Invocation;
 import io.servicecomb.core.exception.ExceptionUtils;
 import io.servicecomb.core.filter.EndpointDiscoveryFilter;
 import io.servicecomb.foundation.common.cache.VersionedCache;
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
 import io.servicecomb.serviceregistry.discovery.DiscoveryFilter;
 import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
@@ -45,7 +45,7 @@ public class SimpleLoadBalanceHandler implements Handler {
   private DiscoveryTree discoveryTree = new DiscoveryTree();
 
   // key为grouping filter qualified name
-  private volatile Map<String, AtomicInteger> indexMap = new ConcurrentHashMap<>();
+  private volatile Map<String, AtomicInteger> indexMap = new ConcurrentHashMapEx<>();
 
   public SimpleLoadBalanceHandler() {
     discoveryTree.loadFromSPI(DiscoveryFilter.class);
diff --git a/edge/edge-core/src/main/java/io/servicecomb/edge/core/CompatiblePathVersionMapper.java b/edge/edge-core/src/main/java/io/servicecomb/edge/core/CompatiblePathVersionMapper.java
index c5297cf..7e33b80 100644
--- a/edge/edge-core/src/main/java/io/servicecomb/edge/core/CompatiblePathVersionMapper.java
+++ b/edge/edge-core/src/main/java/io/servicecomb/edge/core/CompatiblePathVersionMapper.java
@@ -18,10 +18,10 @@
 package io.servicecomb.edge.core;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.springframework.util.StringUtils;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.foundation.common.exceptions.ServiceCombException;
 import io.servicecomb.serviceregistry.version.VersionRule;
 import io.servicecomb.serviceregistry.version.VersionRuleUtils;
@@ -29,7 +29,7 @@ import io.servicecomb.serviceregistry.version.VersionRuleUtils;
 public class CompatiblePathVersionMapper {
   // v1 -> 1.0.0-2.0.0
   // v2 -> 2.0.0-3.0.0
-  private Map<String, VersionRule> mapper = new ConcurrentHashMap<>();
+  private Map<String, VersionRule> mapper = new ConcurrentHashMapEx<>();
 
   public VersionRule getOrCreate(String pathVersion) {
     return mapper.computeIfAbsent(pathVersion, pv -> {
diff --git a/edge/edge-core/src/main/java/io/servicecomb/edge/core/OperationInstancesDiscoveryFilter.java b/edge/edge-core/src/main/java/io/servicecomb/edge/core/OperationInstancesDiscoveryFilter.java
index 3cdbd2d..2067f5f 100644
--- a/edge/edge-core/src/main/java/io/servicecomb/edge/core/OperationInstancesDiscoveryFilter.java
+++ b/edge/edge-core/src/main/java/io/servicecomb/edge/core/OperationInstancesDiscoveryFilter.java
@@ -22,12 +22,12 @@ import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
 
 import io.servicecomb.core.Invocation;
 import io.servicecomb.core.definition.MicroserviceMeta;
 import io.servicecomb.core.definition.MicroserviceVersionMeta;
 import io.servicecomb.core.definition.OperationMeta;
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.serviceregistry.RegistryUtils;
 import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
 import io.servicecomb.serviceregistry.consumer.AppManager;
@@ -83,7 +83,7 @@ public class OperationInstancesDiscoveryFilter extends AbstractDiscoveryFilter {
 
   protected Map<String, DiscoveryTreeNode> initOperationNodes(DiscoveryTreeNode parent,
       Map<MicroserviceVersionMeta, Map<String, MicroserviceInstance>> versionMap) {
-    Map<String, DiscoveryTreeNode> tmpChildren = new ConcurrentHashMap<>();
+    Map<String, DiscoveryTreeNode> tmpChildren = new ConcurrentHashMapEx<>();
     versionMap
         .keySet()
         .stream()
diff --git a/foundations/foundation-common/src/main/java/io/servicecomb/foundation/common/concurrent/ConcurrentHashMapEx.java b/foundations/foundation-common/src/main/java/io/servicecomb/foundation/common/concurrent/ConcurrentHashMapEx.java
new file mode 100644
index 0000000..30670dd
--- /dev/null
+++ b/foundations/foundation-common/src/main/java/io/servicecomb/foundation/common/concurrent/ConcurrentHashMapEx.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.servicecomb.foundation.common.concurrent;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+
+public class ConcurrentHashMapEx<K, V> extends ConcurrentHashMap<K, V> {
+  private static final long serialVersionUID = -7753722464102569902L;
+
+  public ConcurrentHashMapEx() {
+    super();
+  }
+
+  public ConcurrentHashMapEx(int initialCapacity) {
+    super(initialCapacity);
+  }
+
+  public ConcurrentHashMapEx(Map<? extends K, ? extends V> m) {
+    super(m);
+  }
+
+  public ConcurrentHashMapEx(int initialCapacity, float loadFactor) {
+    super(initialCapacity, loadFactor);
+  }
+
+  public ConcurrentHashMapEx(int initialCapacity,
+      float loadFactor, int concurrencyLevel) {
+    super(initialCapacity, loadFactor, concurrencyLevel);
+  }
+
+  // ConcurrentHashMap.computeIfAbsent always do "synchronized" operation
+  // so we wrap it to improve performance
+  @Override
+  public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
+    V value = get(key);
+    if (value != null) {
+      return value;
+    }
+
+    return super.computeIfAbsent(key, mappingFunction);
+  }
+}
diff --git a/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java b/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java
index affec87..84c3a41 100644
--- a/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java
+++ b/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java
@@ -18,18 +18,18 @@
 package io.servicecomb.foundation.metrics.output.servo;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.foundation.metrics.output.MetricsFileOutput;
 
 @Component
 public class RollingMetricsFileOutput extends MetricsFileOutput {
 
-  private final Map<String, Logger> allLoggers = new ConcurrentHashMap<>();
+  private final Map<String, Logger> allLoggers = new ConcurrentHashMapEx<>();
 
   public RollingMetricsFileOutput() {
   }
diff --git a/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java b/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java
index b8f0db9..1c7d604 100644
--- a/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java
+++ b/foundations/foundation-metrics/src/main/java/io/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java
@@ -18,7 +18,8 @@
 package io.servicecomb.foundation.metrics.performance;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 
 /**
  * Implements the collection of metrics such as total request, total fail
@@ -46,15 +47,15 @@ public class MetricsDataMonitor {
   // key is operQualifiedName
   // inc
   // after invocation finished
-  public Map<String, Long> operMetricsTotalReq = new ConcurrentHashMap<>();
+  public Map<String, Long> operMetricsTotalReq = new ConcurrentHashMapEx<>();
 
   // key is operQualifiedName
   // inc
   // after invocation finished
-  public Map<String, Long> operMetricsTotalFailReq = new ConcurrentHashMap<>();
+  public Map<String, Long> operMetricsTotalFailReq = new ConcurrentHashMapEx<>();
 
   // key is operQualifiedName
-  public Map<String, QueueMetricsData> queueMetrics = new ConcurrentHashMap<>();
+  public Map<String, QueueMetricsData> queueMetrics = new ConcurrentHashMapEx<>();
 
   /**
    * default constructor.
@@ -70,8 +71,7 @@ public class MetricsDataMonitor {
    * @return QueueMetrics object based on key
    */
   public QueueMetricsData getOrCreateQueueMetrics(String pathId) {
-    return queueMetrics.computeIfAbsent(pathId, p -> new QueueMetricsData()
-    );
+    return queueMetrics.computeIfAbsent(pathId, p -> new QueueMetricsData());
   }
 
   /**
diff --git a/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/ClientPoolManager.java b/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/ClientPoolManager.java
index 004b13a..5084ede 100644
--- a/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/ClientPoolManager.java
+++ b/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/ClientPoolManager.java
@@ -20,10 +20,10 @@ package io.servicecomb.foundation.vertx.client;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.vertx.core.Context;
 import io.vertx.core.Vertx;
 
@@ -54,7 +54,7 @@ public class ClientPoolManager<CLIENT_POOL> {
   // send的调用线程与CLIENT_POOL的绑定关系,不直接用hash,是担心分配不均
   // key是调用者的线程id
   // TODO:要不要考虑已经绑定的线程消失了的场景?
-  private Map<Long, CLIENT_POOL> threadBindMap = new ConcurrentHashMap<>();
+  private Map<Long, CLIENT_POOL> threadBindMap = new ConcurrentHashMapEx<>();
 
   public ClientPoolManager(Vertx vertx, ClientPoolFactory<CLIENT_POOL> factory) {
     this.vertx = vertx;
diff --git a/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientConnectionPool.java b/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientConnectionPool.java
index dd888c0..a08b1f4 100644
--- a/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientConnectionPool.java
+++ b/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientConnectionPool.java
@@ -18,9 +18,9 @@
 package io.servicecomb.foundation.vertx.client.tcp;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.vertx.core.Context;
 
 public abstract class AbstractTcpClientConnectionPool<T extends TcpClientConnection> {
@@ -30,7 +30,7 @@ public abstract class AbstractTcpClientConnectionPool<T extends TcpClientConnect
   protected NetClientWrapper netClientWrapper;
 
   // key为address
-  protected Map<String, T> tcpClientMap = new ConcurrentHashMap<>();
+  protected Map<String, T> tcpClientMap = new ConcurrentHashMapEx<>();
 
   public AbstractTcpClientConnectionPool(Context context,
       NetClientWrapper netClientWrapper) {
diff --git a/handlers/handler-loadbalance/src/main/java/io/servicecomb/loadbalance/LoadbalanceHandler.java b/handlers/handler-loadbalance/src/main/java/io/servicecomb/loadbalance/LoadbalanceHandler.java
index 61fd9ae..df727c2 100644
--- a/handlers/handler-loadbalance/src/main/java/io/servicecomb/loadbalance/LoadbalanceHandler.java
+++ b/handlers/handler-loadbalance/src/main/java/io/servicecomb/loadbalance/LoadbalanceHandler.java
@@ -20,7 +20,6 @@ package io.servicecomb.loadbalance;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -44,6 +43,7 @@ import io.servicecomb.core.Invocation;
 import io.servicecomb.core.exception.ExceptionUtils;
 import io.servicecomb.core.provider.consumer.SyncResponseExecutor;
 import io.servicecomb.foundation.common.cache.VersionedCache;
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.loadbalance.filter.CseServerDiscoveryFilter;
 import io.servicecomb.loadbalance.filter.IsolationServerListFilter;
 import io.servicecomb.loadbalance.filter.TransactionControlFilter;
@@ -73,7 +73,7 @@ public class LoadbalanceHandler implements Handler {
   private DiscoveryTree discoveryTree = new DiscoveryTree();
 
   // key为grouping filter qualified name
-  private volatile Map<String, LoadBalancer> loadBalancerMap = new ConcurrentHashMap<>();
+  private volatile Map<String, LoadBalancer> loadBalancerMap = new ConcurrentHashMapEx<>();
 
   private final Object lock = new Object();
 
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
index 387c050..7c810b2 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
@@ -19,11 +19,11 @@ package io.servicecomb.metrics.core.monitor;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.metrics.common.ConsumerInvocationMetric;
 import io.servicecomb.metrics.common.ProducerInvocationMetric;
 import io.servicecomb.metrics.common.RegistryMetric;
@@ -40,8 +40,8 @@ public class RegistryMonitor {
   @Autowired
   public RegistryMonitor(SystemMonitor systemMonitor) {
     this.systemMonitor = systemMonitor;
-    this.consumerInvocationMonitors = new ConcurrentHashMap<>();
-    this.producerInvocationMonitors = new ConcurrentHashMap<>();
+    this.consumerInvocationMonitors = new ConcurrentHashMapEx<>();
+    this.producerInvocationMonitors = new ConcurrentHashMapEx<>();
   }
 
   public ConsumerInvocationMonitor getConsumerInvocationMonitor(String operationName) {
diff --git a/samples/metrics-write-file-sample/metrics-write-file-log4j-springboot/src/main/java/io/servicecomb/samples/mwf/Log4JMetricsFileWriter.java b/samples/metrics-write-file-sample/metrics-write-file-log4j-springboot/src/main/java/io/servicecomb/samples/mwf/Log4JMetricsFileWriter.java
index 716fba1..ba166cc 100644
--- a/samples/metrics-write-file-sample/metrics-write-file-log4j-springboot/src/main/java/io/servicecomb/samples/mwf/Log4JMetricsFileWriter.java
+++ b/samples/metrics-write-file-sample/metrics-write-file-log4j-springboot/src/main/java/io/servicecomb/samples/mwf/Log4JMetricsFileWriter.java
@@ -19,7 +19,6 @@ package io.servicecomb.samples.mwf;
 
 import java.nio.file.Paths;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
@@ -30,6 +29,8 @@ import org.springframework.stereotype.Component;
 
 import com.netflix.config.DynamicPropertyFactory;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+
 @Component
 public class Log4JMetricsFileWriter implements MetricsFileWriter {
   private static final String METRICS_FILE_ROLLING_MAX_FILE_COUNT = "servicecomb.metrics.file.rolling.max_file_count";
@@ -39,7 +40,7 @@ public class Log4JMetricsFileWriter implements MetricsFileWriter {
   private static final String METRICS_FILE_ROOT_PATH = "servicecomb.metrics.file.root_path";
 
 
-  private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMap<>();
+  private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMapEx<>();
 
   private final int maxFileCount;
 
@@ -49,7 +50,8 @@ public class Log4JMetricsFileWriter implements MetricsFileWriter {
 
   public Log4JMetricsFileWriter() {
     maxFileCount = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_FILE_ROLLING_MAX_FILE_COUNT, 10).get();
-    maxFileSize = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROLLING_MAX_FILE_SIZE, "10MB")
+    maxFileSize = DynamicPropertyFactory.getInstance()
+        .getStringProperty(METRICS_FILE_ROLLING_MAX_FILE_SIZE, "10MB")
         .get();
     rootPath = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROOT_PATH, "target").get();
   }
diff --git a/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java b/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
index 13a5046..c49ac72 100644
--- a/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
+++ b/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
@@ -19,7 +19,6 @@ package io.servicecomb.samples.mwf;
 
 import java.nio.file.Paths;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -34,6 +33,8 @@ import org.springframework.stereotype.Component;
 
 import com.netflix.config.DynamicPropertyFactory;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+
 @Component
 public class Log4J2MetricsFileWriter implements MetricsFileWriter {
   private static final String METRICS_FILE_ROLLING_MAX_FILE_COUNT = "servicecomb.metrics.file.rolling.max_file_count";
@@ -46,7 +47,7 @@ public class Log4J2MetricsFileWriter implements MetricsFileWriter {
 
   private final Configuration config = ctx.getConfiguration();
 
-  private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMap<>();
+  private final Map<String, RollingFileAppender> fileAppenders = new ConcurrentHashMapEx<>();
 
   private final int maxFileCount;
 
@@ -56,7 +57,8 @@ public class Log4J2MetricsFileWriter implements MetricsFileWriter {
 
   public Log4J2MetricsFileWriter() {
     maxFileCount = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_FILE_ROLLING_MAX_FILE_COUNT, 10).get();
-    maxFileSize = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROLLING_MAX_FILE_SIZE, "10MB")
+    maxFileSize = DynamicPropertyFactory.getInstance()
+        .getStringProperty(METRICS_FILE_ROLLING_MAX_FILE_SIZE, "10MB")
         .get();
     rootPath = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_ROOT_PATH, "target").get();
   }
@@ -73,12 +75,30 @@ public class Log4J2MetricsFileWriter implements MetricsFileWriter {
 
     PatternLayout layout = PatternLayout.newBuilder().withPattern(PatternLayout.DEFAULT_CONVERSION_PATTERN).build();
     SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy(maxFileSize);
-    DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy(String.valueOf(maxFileCount), null, null,
-        null, null, false, config);
+    DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy(String.valueOf(maxFileCount),
+        null,
+        null,
+        null,
+        null,
+        false,
+        config);
 
     //TODO:use RollingFileAppender.newBuilder throw No such static method exception,will improve later!
     return RollingFileAppender
-        .createAppender(fileName, filePattern, "true", loggerName, "true", null,
-            "true", policy, strategy, layout, null, null, null, null, config);
+        .createAppender(fileName,
+            filePattern,
+            "true",
+            loggerName,
+            "true",
+            null,
+            "true",
+            policy,
+            strategy,
+            layout,
+            null,
+            null,
+            null,
+            null,
+            config);
   }
 }
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/AppManager.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/AppManager.java
index 3b34b59..0128fee 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/AppManager.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/AppManager.java
@@ -18,17 +18,18 @@
 package io.servicecomb.serviceregistry.consumer;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import com.google.common.eventbus.EventBus;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+
 public class AppManager {
   private EventBus eventBus;
 
   private MicroserviceVersionFactory microserviceVersionFactory = new DefaultMicroserviceVersionFactory();
 
   // key: appId
-  private Map<String, MicroserviceManager> apps = new ConcurrentHashMap<>();
+  private Map<String, MicroserviceManager> apps = new ConcurrentHashMapEx<>();
 
   public AppManager(EventBus eventBus) {
     this.eventBus = eventBus;
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceManager.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceManager.java
index aca5ef2..763e0fc 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceManager.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceManager.java
@@ -18,10 +18,10 @@
 package io.servicecomb.serviceregistry.consumer;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import com.google.common.eventbus.Subscribe;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.serviceregistry.task.event.PeriodicPullEvent;
 import io.servicecomb.serviceregistry.task.event.RecoveryEvent;
 
@@ -31,7 +31,7 @@ public class MicroserviceManager {
   private String appId;
 
   // key: microserviceName
-  private Map<String, MicroserviceVersions> versionsByName = new ConcurrentHashMap<>();
+  private Map<String, MicroserviceVersions> versionsByName = new ConcurrentHashMapEx<>();
 
   public MicroserviceManager(AppManager appManager, String appId) {
     this.appManager = appManager;
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceVersions.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
index 796d1c5..6e398c0 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/consumer/MicroserviceVersions.java
@@ -19,7 +19,6 @@ package io.servicecomb.serviceregistry.consumer;
 
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -29,6 +28,7 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.eventbus.Subscribe;
 
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.serviceregistry.RegistryUtils;
 import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
 import io.servicecomb.serviceregistry.api.registry.MicroserviceInstanceStatus;
@@ -51,10 +51,10 @@ public class MicroserviceVersions {
   private List<MicroserviceInstance> instances;
 
   // key is service id
-  private Map<String, MicroserviceVersion> versions = new ConcurrentHashMap<>();
+  private Map<String, MicroserviceVersion> versions = new ConcurrentHashMapEx<>();
 
   // key is version rule
-  private Map<String, MicroserviceVersionRule> versionRules = new ConcurrentHashMap<>();
+  private Map<String, MicroserviceVersionRule> versionRules = new ConcurrentHashMapEx<>();
 
   // process pulled instances and create versionRule must be protected by lock
   // otherwise maybe lost instance or version in versionRule
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/discovery/DiscoveryTreeNode.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/discovery/DiscoveryTreeNode.java
index cf72522..e9d251e 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/discovery/DiscoveryTreeNode.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/discovery/DiscoveryTreeNode.java
@@ -18,18 +18,18 @@
 package io.servicecomb.serviceregistry.discovery;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import io.servicecomb.foundation.common.cache.VersionedCache;
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 
 public class DiscoveryTreeNode extends VersionedCache {
   private boolean childrenInited;
 
   private int level;
 
-  protected Map<String, Object> attributes = new ConcurrentHashMap<>();
+  protected Map<String, Object> attributes = new ConcurrentHashMapEx<>();
 
-  protected Map<String, DiscoveryTreeNode> children = new ConcurrentHashMap<>();
+  protected Map<String, DiscoveryTreeNode> children = new ConcurrentHashMapEx<>();
 
   public boolean childrenInited() {
     return childrenInited;
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionRuleUtils.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionRuleUtils.java
index 8da6f71..c959c8c 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionRuleUtils.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionRuleUtils.java
@@ -21,12 +21,13 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
+
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 
 public final class VersionRuleUtils {
   private static List<VersionRuleParser> parsers = new ArrayList<>();
 
-  private static Map<String, VersionRule> versionRuleCache = new ConcurrentHashMap<>();
+  private static Map<String, VersionRule> versionRuleCache = new ConcurrentHashMapEx<>();
 
   static {
     parsers.add(new VersionRuleLatestParser());
diff --git a/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionUtils.java b/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionUtils.java
index 04a2272..ed6620c 100644
--- a/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionUtils.java
+++ b/service-registry/src/main/java/io/servicecomb/serviceregistry/version/VersionUtils.java
@@ -19,10 +19,11 @@ package io.servicecomb.serviceregistry.version;
 
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
+
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 
 public final class VersionUtils {
-  private static Map<String, Version> versionCache = new ConcurrentHashMap<>();
+  private static Map<String, Version> versionCache = new ConcurrentHashMapEx<>();
 
   public static Version getOrCreate(String strVersion) {
     Objects.requireNonNull(strVersion);
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
index 28b68f3..c07289b 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
@@ -19,13 +19,13 @@ package io.servicecomb.springboot.starter.discovery;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.springframework.cloud.client.DefaultServiceInstance;
 import org.springframework.cloud.client.ServiceInstance;
 import org.springframework.cloud.client.discovery.DiscoveryClient;
 
 import io.servicecomb.foundation.common.cache.VersionedCache;
+import io.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import io.servicecomb.foundation.common.net.URIEndpointObject;
 import io.servicecomb.serviceregistry.RegistryUtils;
 import io.servicecomb.serviceregistry.api.registry.Microservice;
@@ -36,7 +36,7 @@ import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
 import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
 
 public class CseDiscoveryClient implements DiscoveryClient {
-  private Map<String, DiscoveryTree> discoveryTrees = new ConcurrentHashMap<>();
+  private Map<String, DiscoveryTree> discoveryTrees = new ConcurrentHashMapEx<>();
 
   @Override
   public String description() {

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 02/02: resolve compile warnings

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 06f42c52adb7e6848229bf5cfb3d36fa5f7667af
Author: wujimin <wu...@huawei.com>
AuthorDate: Thu Jan 11 10:54:27 2018 +0800

    resolve compile warnings
---
 .../definition/loader/TestDynamicSchemaLoader.java |  2 ++
 .../demo/crossapp/CrossappBootListener.java        |  1 +
 .../demo/crossapp/CrossappBootListener.java        |  1 +
 .../demo/springmvc/client/SpringmvcClient.java     | 18 +++++++++--------
 .../io/servicecomb/config/client/ApolloClient.java |  1 +
 .../config/client/ApolloClientTest.java            |  5 +----
 .../tests/tracing/TraceContextConfig.java          |  1 +
 .../core/publish/DefaultHealthCheckerManager.java  |  6 ------
 .../metrics/prometheus/MetricsPublisher.java       | 23 ++++++++++++++++++++--
 .../samples/mwf/Log4J2MetricsFileWriter.java       |  1 +
 .../springmvc/provider/SpringmvcHelloImpl.java     | 10 ----------
 .../discovery/CseRibbonClientConfiguration.java    |  5 -----
 .../generator/core/TestOperationGenerator.java     |  1 +
 13 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/core/src/test/java/io/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java b/core/src/test/java/io/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
index c23fd59..9825a20 100644
--- a/core/src/test/java/io/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
+++ b/core/src/test/java/io/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
@@ -67,6 +67,7 @@ public class TestDynamicSchemaLoader {
     RegistryUtils.setServiceRegistry(null);
   }
 
+  @SuppressWarnings("deprecation")
   @Test
   public void testRegisterSchemas() {
     DynamicSchemaLoader.INSTANCE.registerSchemas("classpath*:test/test/schema.yaml");
@@ -74,6 +75,7 @@ public class TestDynamicSchemaLoader {
     Assert.assertEquals("cse.gen.pojotest.perfClient.schema", schemaMeta.getPackageName());
   }
 
+  @SuppressWarnings("deprecation")
   @Test
   public void testRegisterShemasAcrossApp() {
     DynamicSchemaLoader.INSTANCE.registerSchemas("CSE:as", "classpath*:test/test/schema.yaml");
diff --git a/demo/demo-crossapp/crossapp-client/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java b/demo/demo-crossapp/crossapp-client/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
index e00e317..7148cef 100644
--- a/demo/demo-crossapp/crossapp-client/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
+++ b/demo/demo-crossapp/crossapp-client/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
 import io.servicecomb.core.BootListener;
 import io.servicecomb.core.definition.loader.DynamicSchemaLoader;
 
+@SuppressWarnings("deprecation")
 @Component
 public class CrossappBootListener implements BootListener {
   @Override
diff --git a/demo/demo-crossapp/crossapp-server/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java b/demo/demo-crossapp/crossapp-server/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
index 614b5f8..b99e619 100644
--- a/demo/demo-crossapp/crossapp-server/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
+++ b/demo/demo-crossapp/crossapp-server/src/main/java/io/servicecomb/demo/crossapp/CrossappBootListener.java
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
 import io.servicecomb.core.BootListener;
 import io.servicecomb.core.definition.loader.DynamicSchemaLoader;
 
+@SuppressWarnings("deprecation")
 @Component
 public class CrossappBootListener implements BootListener {
   @Override
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
index f03b9b4..03b91ff 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -93,13 +93,15 @@ public class SpringmvcClient {
     try {
       // this test class is intended for retry hanging issue JAV-127
       String content = restTemplate.getForObject("cse://springmvc/codeFirstSpringmvc/metricsForTest", String.class);
+      @SuppressWarnings("unchecked")
       Map<String, String> resultMap = JsonUtils.OBJ_MAPPER.readValue(content, HashMap.class);
 
       TestMgr.check(true, resultMap.get("CPU and Memory").contains("heapUsed="));
 
       String[] requestProviders = resultMap.get("totalRequestProvider OPERATIONAL_LEVEL")
           .replace("{", "")
-          .replace("}", "").split(",");
+          .replace("}", "")
+          .split(",");
       Map<String, Integer> requests = new HashMap<>();
       for (String requestProvider : requestProviders) {
         String[] requestKeyAndValues = requestProvider.split("=");
@@ -133,13 +135,13 @@ public class SpringmvcClient {
     try {
       String content = restTemplate.getForObject("cse://springmvc/codeFirstSpringmvc/prometheusForTest", String.class);
 
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_addDate"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_sayHello"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_fallbackFromCache"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_isTrue_producer"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_add"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_sayHi2"));
-      TestMgr.check(true,content.contains("servicecomb_springmvc_codeFirst_saySomething"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_addDate"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_sayHello"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_fallbackFromCache"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_isTrue_producer"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_add"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_sayHi2"));
+      TestMgr.check(true, content.contains("servicecomb_springmvc_codeFirst_saySomething"));
 
       String[] metricLines = content.split("\n");
       if (metricLines.length > 0) {
diff --git a/dynamic-config/config-apollo/src/main/java/io/servicecomb/config/client/ApolloClient.java b/dynamic-config/config-apollo/src/main/java/io/servicecomb/config/client/ApolloClient.java
index fcf70df..d88f963 100644
--- a/dynamic-config/config-apollo/src/main/java/io/servicecomb/config/client/ApolloClient.java
+++ b/dynamic-config/config-apollo/src/main/java/io/servicecomb/config/client/ApolloClient.java
@@ -99,6 +99,7 @@ public class ApolloClient {
       }
     }
 
+    @SuppressWarnings("unchecked")
     void refreshConfig() {
       HttpHeaders headers = new HttpHeaders();
       headers.add("Content-Type", "application/json;charset=UTF-8");
diff --git a/dynamic-config/config-apollo/src/test/java/io/servicecomb/config/client/ApolloClientTest.java b/dynamic-config/config-apollo/src/test/java/io/servicecomb/config/client/ApolloClientTest.java
index 74a250d..445ff9b 100644
--- a/dynamic-config/config-apollo/src/test/java/io/servicecomb/config/client/ApolloClientTest.java
+++ b/dynamic-config/config-apollo/src/test/java/io/servicecomb/config/client/ApolloClientTest.java
@@ -55,9 +55,7 @@ public class ApolloClientTest {
         Matchers.anyString(),
         Matchers.any(HttpMethod.class),
         Matchers.<HttpEntity<String>>any(),
-        Matchers.<Class<String>>any()
-        )
-    ).thenReturn(responseEntity);
+        Matchers.<Class<String>>any())).thenReturn(responseEntity);
     ApolloConfigurationSourceImpl impl = new ApolloConfigurationSourceImpl();
     UpdateHandler updateHandler = impl.new UpdateHandler();
     ApolloClient apolloClient = new ApolloClient(updateHandler);
@@ -81,7 +79,6 @@ public class ApolloClientTest {
 
     ConfigRefresh cr = apolloClient.new ConfigRefresh("");
 
-    ApolloConfig instance = ApolloConfig.INSTANCE;
     try {
       Deencapsulation.invoke(cr, "compareChangedConfig", before, after);
     } catch (Exception e) {
diff --git a/integration-tests/test-common/src/test/java/io/servicecomb/tests/tracing/TraceContextConfig.java b/integration-tests/test-common/src/test/java/io/servicecomb/tests/tracing/TraceContextConfig.java
index 81133c8..03004cf 100644
--- a/integration-tests/test-common/src/test/java/io/servicecomb/tests/tracing/TraceContextConfig.java
+++ b/integration-tests/test-common/src/test/java/io/servicecomb/tests/tracing/TraceContextConfig.java
@@ -36,6 +36,7 @@ class TraceContextConfig {
   }
 
   private static class ParentAwareMDCCurrentTraceContext extends CurrentTraceContext {
+    @SuppressWarnings("deprecation")
     static ParentAwareMDCCurrentTraceContext create() {
       return new ParentAwareMDCCurrentTraceContext(new Default());
     }
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
index f83d209..331bd0d 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
@@ -25,21 +25,15 @@ import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import io.servicecomb.metrics.common.HealthCheckResult;
 import io.servicecomb.metrics.common.HealthChecker;
-import io.servicecomb.metrics.core.health.DefaultMicroserviceHealthChecker;
 import io.servicecomb.swagger.invocation.exception.InvocationException;
 
 @Component
 public class DefaultHealthCheckerManager implements HealthCheckerManager {
-
-  private static Logger logger = LoggerFactory.getLogger(DefaultHealthCheckerManager.class);
-
   private final Map<String, HealthChecker> healthCheckers;
 
   @Autowired(required = false)
diff --git a/metrics/metrics-integration/metrics-prometheus/src/main/java/io/servicecomb/metrics/prometheus/MetricsPublisher.java b/metrics/metrics-integration/metrics-prometheus/src/main/java/io/servicecomb/metrics/prometheus/MetricsPublisher.java
index dc83a56..30ef254 100644
--- a/metrics/metrics-integration/metrics-prometheus/src/main/java/io/servicecomb/metrics/prometheus/MetricsPublisher.java
+++ b/metrics/metrics-integration/metrics-prometheus/src/main/java/io/servicecomb/metrics/prometheus/MetricsPublisher.java
@@ -20,7 +20,12 @@ package io.servicecomb.metrics.prometheus;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextClosedEvent;
 import org.springframework.stereotype.Component;
 
 import com.netflix.config.DynamicPropertyFactory;
@@ -30,12 +35,14 @@ import io.prometheus.client.exporter.HTTPServer;
 import io.servicecomb.foundation.common.exceptions.ServiceCombException;
 
 @Component
-public class MetricsPublisher {
+public class MetricsPublisher implements ApplicationListener<ApplicationEvent> {
+  private static final Logger LOGGER = LoggerFactory.getLogger(MetricsPublisher.class);
+
   private static final String METRICS_PROMETHEUS_PORT = "servicecomb.metrics.prometheus.port";
 
   private final MetricsCollector metricsCollector;
 
-  private final HTTPServer httpServer;
+  private HTTPServer httpServer;
 
   @Autowired
   public MetricsPublisher(MetricsCollector metricsCollector) {
@@ -45,8 +52,20 @@ public class MetricsPublisher {
     this.metricsCollector.register();
     try {
       this.httpServer = new HTTPServer(new InetSocketAddress(publishPort), CollectorRegistry.defaultRegistry, true);
+      LOGGER.info("Prometheus httpServer listened {}.", publishPort);
     } catch (IOException e) {
       throw new ServiceCombException("create http publish server failed", e);
     }
   }
+
+  @Override
+  public void onApplicationEvent(ApplicationEvent event) {
+    if (!ContextClosedEvent.class.isInstance(event) || httpServer == null) {
+      return;
+    }
+
+    httpServer.stop();
+    httpServer = null;
+    LOGGER.info("Prometheus httpServer stopped.");
+  }
 }
diff --git a/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java b/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
index c49ac72..2837476 100644
--- a/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
+++ b/samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot/src/main/java/io/servicecomb/samples/mwf/Log4J2MetricsFileWriter.java
@@ -69,6 +69,7 @@ public class Log4J2MetricsFileWriter implements MetricsFileWriter {
     logger.append(Log4jLogEvent.newBuilder().setMessage(new SimpleMessage(content)).build());
   }
 
+  @SuppressWarnings("deprecation")
   private RollingFileAppender initLogger(String loggerName, String filePrefix) {
     String fileName = Paths.get(rootPath, filePrefix + "." + loggerName + ".dat").toString();
     String filePattern = Paths.get(rootPath, filePrefix + "." + loggerName + "-%i.dat").toString();
diff --git a/samples/springmvc-sample/springmvc-provider/src/main/java/io/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java b/samples/springmvc-sample/springmvc-provider/src/main/java/io/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
index 328fd94..2031799 100644
--- a/samples/springmvc-sample/springmvc-provider/src/main/java/io/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
+++ b/samples/springmvc-sample/springmvc-provider/src/main/java/io/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
@@ -20,13 +20,11 @@ package io.servicecomb.samples.springmvc.provider;
 
 import javax.ws.rs.core.MediaType;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import io.servicecomb.foundation.metrics.MetricsServoRegistry;
 import io.servicecomb.provider.rest.common.RestSchema;
 import io.servicecomb.samples.common.schema.Hello;
 import io.servicecomb.samples.common.schema.models.Person;
@@ -34,14 +32,6 @@ import io.servicecomb.samples.common.schema.models.Person;
 @RestSchema(schemaId = "springmvcHello")
 @RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON)
 public class SpringmvcHelloImpl implements Hello {
-
-  private MetricsServoRegistry registry;
-
-  @Autowired
-  public SpringmvcHelloImpl(MetricsServoRegistry registry) {
-    this.registry = registry;
-  }
-
   @Override
   @RequestMapping(path = "/sayhi", method = RequestMethod.POST)
   public String sayHi(@RequestParam(name = "name") String name) {
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
index fabb086..1572ca4 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
@@ -16,12 +16,7 @@
  */
 package io.servicecomb.springboot.starter.discovery;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration;
-import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
 
 import com.netflix.client.config.IClientConfig;
 import com.netflix.loadbalancer.Server;
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestOperationGenerator.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestOperationGenerator.java
index fd1c364..8e9aa1f 100644
--- a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestOperationGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestOperationGenerator.java
@@ -97,6 +97,7 @@ public class TestOperationGenerator {
     public void functionWithNoTag() {
     }
 
+    @SuppressWarnings("unused")
     public void functionWithNoAnnotation() {
     }
   }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.