Skip to content

Commit c5d62ef

Browse files
authored
Make NettyTransportClient.getCurrentId() thread safe (alibaba#1707)
Fix issue alibaba#1705. - Use CAS to make it thread safe and limited in the declared range. Signed-off-by: cj <power4j@outlook.com>
1 parent 53237e8 commit c5d62ef

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

  • sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client

sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/NettyTransportClient.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,12 @@ public ClusterResponse sendRequest(ClusterRequest request) throws Exception {
238238
}
239239

240240
private int getCurrentId() {
241-
if (idGenerator.get() > MAX_ID) {
242-
idGenerator.set(0);
243-
}
244-
return idGenerator.incrementAndGet();
241+
int pre, next;
242+
do {
243+
pre = idGenerator.get();
244+
next = pre >= MAX_ID ? MIN_ID : pre + 1;
245+
} while (!idGenerator.compareAndSet(pre, next));
246+
return next;
245247
}
246248

247249
/*public CompletableFuture<ClusterResponse> sendRequestAsync(ClusterRequest request) {
@@ -266,5 +268,6 @@ private int getCurrentId() {
266268
return future;
267269
}*/
268270

271+
private static final int MIN_ID = 1;
269272
private static final int MAX_ID = 999_999_999;
270273
}

0 commit comments

Comments
 (0)