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/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d30386fd spot bugs repair (#4788)
7d30386fd is described below

commit 7d30386fdc3fcc062f935c9ffba5f1723bce380c
Author: SweetWuXiaoMei <sweetwuxiao...@qq.com>
AuthorDate: Wed May 21 09:24:27 2025 +0800

    spot bugs repair (#4788)
---
 .../http/client/common/AbstractAddressManager.java      |  2 +-
 .../service/center/client/ServiceCenterWatch.java       | 11 ++++++-----
 .../java/org/apache/servicecomb/core/Invocation.java    |  6 +++---
 .../apache/servicecomb/core/executor/GroupExecutor.java |  2 +-
 .../demo/springmvc/server/CodeFirstSpringmvc.java       |  8 ++++----
 .../foundation/common/cache/VersionedCache.java         |  2 +-
 .../servicecomb/foundation/common/net/IpPort.java       |  4 ++--
 .../registry/discovery/DiscoveryTreeNode.java           |  2 +-
 .../vertx/client/tcp/AbstractTcpClientPackage.java      |  4 ++--
 .../vertx/client/tcp/TcpClientConnection.java           |  2 +-
 .../metrics/metric/DefaultClientEndpointMetric.java     |  2 +-
 .../vertx/stream/InputStreamToReadStream.java           |  2 +-
 .../vertx/stream/OutputStreamToWriteStream.java         | 17 +++++++++--------
 .../servicecomb/loadbalance/SessionStickinessRule.java  |  2 +-
 pom.xml                                                 |  2 +-
 .../transport/rest/vertx/RestBodyHandler.java           |  4 ++--
 16 files changed, 37 insertions(+), 35 deletions(-)

diff --git 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
index ae94e5d5f..52db799f9 100644
--- 
a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
+++ 
b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/AbstractAddressManager.java
@@ -66,7 +66,7 @@ public class AbstractAddressManager {
 
   private final List<String> isolationRegionAddress = new ArrayList<>();
 
-  private boolean addressAutoRefreshed = false;
+  private volatile boolean addressAutoRefreshed = false;
 
   private final Object lock = new Object();
 
diff --git 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterWatch.java
 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterWatch.java
index a8be8b98b..a68a73a49 100644
--- 
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterWatch.java
+++ 
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterWatch.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.servicecomb.http.client.auth.RequestAuthHeaderProvider;
 import 
org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
@@ -67,7 +68,7 @@ public class ServiceCenterWatch implements WebSocketListener {
 
   private String serviceId;
 
-  private int continuousError = 0;
+  private AtomicInteger continuousError = new AtomicInteger(0);
 
   private final AtomicBoolean reconnecting = new AtomicBoolean(false);
 
@@ -143,7 +144,7 @@ public class ServiceCenterWatch implements 
WebSocketListener {
     if (reconnecting.getAndSet(true)) {
       return;
     }
-    continuousError++;
+    continuousError.incrementAndGet();
     if (webSocketTransport != null) {
       webSocketTransport.close();
     }
@@ -151,11 +152,11 @@ public class ServiceCenterWatch implements 
WebSocketListener {
   }
 
   private void backOff() {
-    if (this.continuousError <= 0) {
+    if (this.continuousError.get() <= 0) {
       return;
     }
     try {
-      Thread.sleep(Math.min(SLEEP_MAX, this.continuousError * 
this.continuousError * SLEEP_BASE));
+      Thread.sleep(Math.min(SLEEP_MAX, this.continuousError.get() * 
this.continuousError.get() * SLEEP_BASE));
     } catch (InterruptedException e) {
       // do not care
     }
@@ -183,7 +184,7 @@ public class ServiceCenterWatch implements 
WebSocketListener {
     LOGGER.info("web socket connected to server {}, status={}, message={}", 
currentServerUri,
         serverHandshake.getHttpStatus(),
         serverHandshake.getHttpStatusMessage());
-    continuousError = 0;
+    continuousError.set(0);
     reconnecting.set(false);
   }
 }
diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java 
b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index 6bb007039..067fe6558 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -84,15 +84,15 @@ public class Invocation extends SwaggerInvocation {
   // 同步模式:避免应答在网络线程中处理解码等等业务级逻辑
   private Executor responseExecutor;
 
-  private boolean sync = true;
+  private volatile boolean sync = true;
 
   private final InvocationStageTrace invocationStageTrace = new 
InvocationStageTrace(this);
 
   private HttpServletRequestEx requestEx;
 
-  private boolean finished;
+  private volatile boolean finished;
 
-  private long invocationId;
+  private volatile long invocationId;
 
   private TraceIdLogger traceIdLogger;
 
diff --git 
a/core/src/main/java/org/apache/servicecomb/core/executor/GroupExecutor.java 
b/core/src/main/java/org/apache/servicecomb/core/executor/GroupExecutor.java
index 24e41d407..13562914f 100644
--- a/core/src/main/java/org/apache/servicecomb/core/executor/GroupExecutor.java
+++ b/core/src/main/java/org/apache/servicecomb/core/executor/GroupExecutor.java
@@ -100,7 +100,7 @@ public class GroupExecutor implements Executor, Closeable {
     return this;
   }
 
-  public void initConfig() {
+  public synchronized void initConfig() {
     if (LOG_PRINTED.compareAndSet(false, true)) {
       LOGGER.info("thread pool rules:\n"
           + "1.use core threads.\n"
diff --git 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index c49d8879d..36f8518af 100644
--- 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -495,7 +495,7 @@ public class CodeFirstSpringmvc {
     return input;
   }
 
-  private boolean testvoidInRPCSuccess = false;
+  private volatile boolean testvoidInRPCSuccess = false;
 
   @GetMapping(path = "/testvoidInRPC")
   public void testvoidInRPC() {
@@ -503,7 +503,7 @@ public class CodeFirstSpringmvc {
     testvoidInRPCSuccess = true;
   }
 
-  private boolean testVoidInRPCSuccess = false;
+  private volatile boolean testVoidInRPCSuccess = false;
 
   @GetMapping(path = "/testVoidInRPC")
   public Void testVoidInRPC() {
@@ -512,7 +512,7 @@ public class CodeFirstSpringmvc {
     return null;
   }
 
-  private boolean testvoidInRestTemplateSuccess = false;
+  private volatile boolean testvoidInRestTemplateSuccess = false;
 
   @GetMapping(path = "/testvoidInRestTemplate")
   public void testvoidInRestTemplate() {
@@ -520,7 +520,7 @@ public class CodeFirstSpringmvc {
     testvoidInRestTemplateSuccess = true;
   }
 
-  private boolean testVoidInRestTemplateSuccess = false;
+  private volatile boolean testVoidInRestTemplateSuccess = false;
 
   @GetMapping(path = "/testVoidInRestTemplate")
   public Void testVoidInRestTemplate() {
diff --git 
a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/cache/VersionedCache.java
 
b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/cache/VersionedCache.java
index 658017486..b30e13862 100644
--- 
a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/cache/VersionedCache.java
+++ 
b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/cache/VersionedCache.java
@@ -30,7 +30,7 @@ public class VersionedCache {
     boolean isEmpty();
   }
 
-  protected int cacheVersion;
+  protected volatile int cacheVersion;
 
   // an optional name
   protected String name;
diff --git 
a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/IpPort.java
 
b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/IpPort.java
index d8515eea1..66aae3ebc 100644
--- 
a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/IpPort.java
+++ 
b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/net/IpPort.java
@@ -22,9 +22,9 @@ import java.net.InetSocketAddress;
 import com.google.common.base.Objects;
 
 public class IpPort {
-  private String hostOrIp;
+  private volatile String hostOrIp;
 
-  private int port;
+  private volatile int port;
 
   private volatile InetSocketAddress socketAddress;
 
diff --git 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/DiscoveryTreeNode.java
 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/DiscoveryTreeNode.java
index 3dda15f6c..e0f7c828c 100644
--- 
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/DiscoveryTreeNode.java
+++ 
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/DiscoveryTreeNode.java
@@ -25,7 +25,7 @@ import 
org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 public class DiscoveryTreeNode extends VersionedCache {
   private volatile boolean childrenInited;
 
-  private int level;
+  private volatile int level;
 
   protected Map<String, Object> attributes = new ConcurrentHashMapEx<>();
 
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPackage.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPackage.java
index 763ba5e3d..ef6717f89 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPackage.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPackage.java
@@ -27,9 +27,9 @@ public abstract class AbstractTcpClientPackage {
     return reqId.getAndIncrement();
   }
 
-  private long msRequestTimeout;
+  private volatile long msRequestTimeout;
 
-  private long finishWriteToBuffer;
+  private volatile long finishWriteToBuffer;
 
   protected long msgId = getAndIncRequestId();
 
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpClientConnection.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpClientConnection.java
index d8800800f..ade98d6c1 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpClientConnection.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/TcpClientConnection.java
@@ -61,7 +61,7 @@ public class TcpClientConnection extends TcpConnection {
 
   private final InetSocketAddress socketAddress;
 
-  private boolean localSupportLogin = false;
+  private volatile boolean localSupportLogin = false;
 
   private final boolean remoteSupportLogin;
 
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/metric/DefaultClientEndpointMetric.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/metric/DefaultClientEndpointMetric.java
index cedd6ec6b..ce6180789 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/metric/DefaultClientEndpointMetric.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/metrics/metric/DefaultClientEndpointMetric.java
@@ -29,7 +29,7 @@ public class DefaultClientEndpointMetric extends 
DefaultEndpointMetric {
   // control if the metric instance will be expired
   // all invoker about incRefCount/isExpired, must lock: 
DefaultClientEndpointMetricManager
   // decRefCount no need to lock, because that only cause to be expired later.
-  private long lastNanoTime = System.nanoTime();
+  private volatile long lastNanoTime = System.nanoTime();
 
   public DefaultClientEndpointMetric(String address) {
     super(address);
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/InputStreamToReadStream.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/InputStreamToReadStream.java
index f1a5f83b2..3f3db7678 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/InputStreamToReadStream.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/InputStreamToReadStream.java
@@ -40,7 +40,7 @@ public class InputStreamToReadStream implements 
ReadStream<Buffer> {
 
   private final InputStream inputStream;
 
-  private boolean closed;
+  private volatile boolean closed;
 
   private boolean paused;
 
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/OutputStreamToWriteStream.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/OutputStreamToWriteStream.java
index 95ea0b507..37cf815ec 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/OutputStreamToWriteStream.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/stream/OutputStreamToWriteStream.java
@@ -21,6 +21,7 @@ import java.io.OutputStream;
 import java.util.Queue;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.servicecomb.foundation.common.io.AsyncCloseable;
 
@@ -60,7 +61,7 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
   // we just need to flow control by pump, so use another size
   private final Queue<Buffer> buffers = new ConcurrentLinkedQueue<>();
 
-  private int currentBufferCount;
+  private final AtomicInteger currentBufferCount = new AtomicInteger();
 
   // just indicate if buffers is full, not control add logic
   // must >= SMALLEST_MAX_BUFFERS
@@ -103,7 +104,7 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
 
   @Override
   public void write(Buffer data, Handler<AsyncResult<Void>> handler) {
-    currentBufferCount++;
+    currentBufferCount.incrementAndGet();
     buffers.add(data);
     context.executeBlocking(this::writeInWorker,
         true,
@@ -122,12 +123,12 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
         outputStream.write(buffer.getBytes());
 
         synchronized (OutputStreamToWriteStream.this) {
-          currentBufferCount--;
-          Runnable action = (currentBufferCount == 0 && closedDeferred != 
null) ? closedDeferred : this::checkDrained;
+          currentBufferCount.decrementAndGet();
+          Runnable action = (currentBufferCount.get() == 0 && closedDeferred 
!= null) ? closedDeferred : this::checkDrained;
           action.run();
         }
       } catch (IOException e) {
-        currentBufferCount--;
+        currentBufferCount.decrementAndGet();
         future.fail(e);
         return;
       }
@@ -148,7 +149,7 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
 
   @Override
   public synchronized boolean writeQueueFull() {
-    return currentBufferCount >= maxBuffers;
+    return currentBufferCount.get() >= maxBuffers;
   }
 
   @Override
@@ -158,7 +159,7 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
   }
 
   private synchronized void checkDrained() {
-    if (drainHandler != null && currentBufferCount <= drainMark) {
+    if (drainHandler != null && currentBufferCount.get() <= drainMark) {
       Handler<Void> handler = drainHandler;
       drainHandler = null;
       handler.handle(null);
@@ -186,7 +187,7 @@ public class OutputStreamToWriteStream implements 
WriteStream<Buffer>, AsyncClos
     closed = true;
 
     CompletableFuture<Void> future = new CompletableFuture<>();
-    if (currentBufferCount == 0) {
+    if (currentBufferCount.get() == 0) {
       doClose(future);
     } else {
       closedDeferred = () -> doClose(future);
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
index c3c250b9e..37d94bc0f 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/SessionStickinessRule.java
@@ -40,7 +40,7 @@ public class SessionStickinessRule implements RuleExt {
 
   private volatile ServiceCombServer lastServer = null;
 
-  private long lastAccessedTime = 0;
+  private volatile long lastAccessedTime = 0;
 
   private volatile boolean errorThresholdMet = false;
 
diff --git a/pom.xml b/pom.xml
index cbe4035ba..32c4adcd8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,7 @@
     <release-maven-plugin.version>3.1.1</release-maven-plugin.version>
     <site-maven-plugin.version>3.21.0</site-maven-plugin.version>
     <source-maven-plugin.version>3.3.0</source-maven-plugin.version>
-    <spotbug-maven-plugin.version>4.8.6.6</spotbug-maven-plugin.version>
+    <spotbug-maven-plugin.version>4.9.3.0</spotbug-maven-plugin.version>
     <spring-boot.version>3.3.5</spring-boot.version>
     <surefire-maven-plugin.version>3.5.3</surefire-maven-plugin.version>
     <!-- plugin version end -->
diff --git 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestBodyHandler.java
 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestBodyHandler.java
index 6492e77e8..cc74e6d0a 100644
--- 
a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestBodyHandler.java
+++ 
b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestBodyHandler.java
@@ -232,11 +232,11 @@ public class RestBodyHandler implements BodyHandler {
 
     Buffer body;
 
-    boolean failed;
+    volatile boolean failed;
 
     final AtomicInteger uploadCount = new AtomicInteger();
 
-    boolean ended;
+    volatile boolean ended;
 
     long uploadSize = 0L;
 

Reply via email to