You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ya...@apache.org on 2025/03/24 14:07:45 UTC
(servicecomb-java-chassis) 02/03: [SCB-2897] optimize the pause status switching concurrency control
This is an automated email from the ASF dual-hosted git repository.
yaohaishi pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit e4e4f7d3561174e0266a7dfb84db6025c97e60f0
Author: yhs0092 <yh...@163.com>
AuthorDate: Fri Mar 21 10:13:46 2025 +0800
[SCB-2897] optimize the pause status switching concurrency control
Since it's not possible to keep the VertxWebSocketAdaptor.inPauseStatus consistent with the VertxWebSocketAdaptor.vertxWebSocket pause status just by the AtomicBoolean CAS operation, it's better to use a simple synchronized code block to make the code clearer.
---
.../rest/vertx/ws/VertxWebSocketAdaptor.java | 31 +++++++++++-----------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/ws/VertxWebSocketAdaptor.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/ws/VertxWebSocketAdaptor.java
index 796a72979..3137e0f03 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/ws/VertxWebSocketAdaptor.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/ws/VertxWebSocketAdaptor.java
@@ -20,7 +20,6 @@ package org.apache.servicecomb.transport.rest.vertx.ws;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.servicecomb.core.executor.ReactiveExecutor;
import org.apache.servicecomb.swagger.invocation.InvocationType;
@@ -62,7 +61,9 @@ public class VertxWebSocketAdaptor implements WebSocketAdapter {
*/
private final WebSocketBase vertxWebSocket;
- private final AtomicBoolean inPauseStatus;
+ private final Object pauseLock = new Object();
+
+ private boolean inPauseStatus;
private final String websocketSessionId;
@@ -86,7 +87,7 @@ public class VertxWebSocketAdaptor implements WebSocketAdapter {
: prepareSerialExecutorWrapper(workerPool);
this.bizWebSocket = bizWebSocket;
this.vertxWebSocket = vertxWebSocket;
- inPauseStatus = new AtomicBoolean(true);
+ inPauseStatus = true;
vertxWebSocket.pause(); // make sure the vert.x WebSocket pause status keep consistent with inPauseStatus flag
// make sure the bi-direction message stream is established
@@ -206,25 +207,25 @@ public class VertxWebSocketAdaptor implements WebSocketAdapter {
@Override
public void pause() {
- if (!inPauseStatus.compareAndSet(false, true)) {
- return;
- }
- LOGGER.info("[{}]-[{}] pause websocket", invocationType, websocketSessionId);
- synchronized (this) {
+ synchronized (pauseLock) {
+ if (inPauseStatus) {
+ return;
+ }
vertxWebSocket.pause();
- inPauseStatus.set(true);
+ inPauseStatus = true;
+ LOGGER.info("[{}]-[{}] pause websocket", invocationType, websocketSessionId);
}
}
@Override
public void resume() {
- if (!inPauseStatus.compareAndSet(true, false)) {
- return;
- }
- LOGGER.info("[{}]-[{}] resume websocket", invocationType, websocketSessionId);
- synchronized (this) {
+ synchronized (pauseLock) {
+ if (!inPauseStatus) {
+ return;
+ }
vertxWebSocket.resume();
- inPauseStatus.set(false);
+ inPauseStatus = false;
+ LOGGER.info("[{}]-[{}] resume websocket", invocationType, websocketSessionId);
}
}