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;