浏览代码

Make NettyTransportClient.getCurrentId() thread safe (#1707)

Fix issue #1705.

- Use CAS to make it thread safe and limited in the declared range.

Signed-off-by: cj <power4j@outlook.com>
master
cj GitHub 4 年前
父节点
当前提交
34fc435ce5
找不到此签名对应的密钥 GPG 密钥 ID: 4AEE18F83AFDEB23
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. +7
    -4
      sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java

+ 7
- 4
sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java 查看文件

@@ -238,10 +238,12 @@ public class NettyTransportClient implements ClusterTransportClient {
}

private int getCurrentId() {
if (idGenerator.get() > MAX_ID) {
idGenerator.set(0);
}
return idGenerator.incrementAndGet();
int pre, next;
do {
pre = idGenerator.get();
next = pre >= MAX_ID ? MIN_ID : pre + 1;
} while (!idGenerator.compareAndSet(pre, next));
return next;
}

/*public CompletableFuture<ClusterResponse> sendRequestAsync(ClusterRequest request) {
@@ -266,5 +268,6 @@ public class NettyTransportClient implements ClusterTransportClient {
return future;
}*/

private static final int MIN_ID = 1;
private static final int MAX_ID = 999_999_999;
}

正在加载...
取消
保存