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 <[email protected]>
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;