This is an automated email from the ASF dual-hosted git repository.
jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new a52d77187bb Refactor ConsulDistributedLock (#21854)
a52d77187bb is described below
commit a52d77187bb8f2a4af1f4c0ff005f7b270932aed
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Oct 31 00:29:04 2022 +0800
Refactor ConsulDistributedLock (#21854)
---
.../cluster/consul/lock/ConsulDistributedLock.java | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git
a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLock.java
b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLock.java
index af071595747..2cf04d8d09e 100644
---
a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLock.java
+++
b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLock.java
@@ -59,29 +59,29 @@ public final class ConsulDistributedLock implements
DistributedLock {
private final String timeToLiveSeconds;
- private final ThreadLocal<String> lockSessionMap;
+ private final ThreadLocal<String> lockSessionId;
public ConsulDistributedLock(final String lockKey, final ConsulClient
client, final ConsulProperties props) {
lockPath = String.format(LOCK_PATH_PATTERN, lockKey);
this.client = client;
timeToLiveSeconds =
props.getValue(ConsulPropertyKey.TIME_TO_LIVE_SECONDS);
- lockSessionMap = new ThreadLocal<>();
+ lockSessionId = new ThreadLocal<>();
}
@Override
public boolean tryLock(final long timeoutMillis) {
- if (!Strings.isNullOrEmpty(lockSessionMap.get())) {
+ if (!Strings.isNullOrEmpty(lockSessionId.get())) {
return true;
}
+ PutParams putParams = new PutParams();
+ long remainingMillis = timeoutMillis;
try {
- PutParams putParams = new PutParams();
- long remainingMillis = timeoutMillis;
while (true) {
String sessionId = createSessionId();
putParams.setAcquireSession(sessionId);
Response<Boolean> response = client.setKVValue(lockPath,
LOCK_VALUE, putParams);
if (response.getValue()) {
- lockSessionMap.set(sessionId);
+ lockSessionId.set(sessionId);
SESSION_FLUSH_EXECUTOR.scheduleAtFixedRate(() ->
client.renewSession(sessionId, QueryParams.DEFAULT), 5L, 10L, TimeUnit.SECONDS);
return true;
}
@@ -118,7 +118,7 @@ public final class ConsulDistributedLock implements
DistributedLock {
return timeoutMillis;
}
Response<GetValue> response = getResponse(
- ((ShardingSphereConsulClient)
client).getRawClient().makeGetRequest("/v1/kv/" + lockPath, null, new
ShardingSphereQueryParams(remainingMillis, currentIndex)));
+ ((ShardingSphereConsulClient)
client).getRawClient().makeGetRequest(String.format("/v1/kv/%s", lockPath),
null, new ShardingSphereQueryParams(remainingMillis, currentIndex)));
spentMillis += System.currentTimeMillis() - startTime;
remainingMillis -= spentMillis;
Long index = response.getConsulIndex();
@@ -158,17 +158,17 @@ public final class ConsulDistributedLock implements
DistributedLock {
@Override
public void unlock() {
+ String sessionId = lockSessionId.get();
+ PutParams putParams = new PutParams();
+ putParams.setReleaseSession(sessionId);
try {
- PutParams putParams = new PutParams();
- String sessionId = lockSessionMap.get();
- putParams.setReleaseSession(sessionId);
client.setKVValue(lockPath, UNLOCK_VALUE, putParams);
client.sessionDestroy(sessionId, null);
// CHECKSTYLE:OFF
} catch (final Exception ignored) {
// CHECKSTYLE:ON
} finally {
- lockSessionMap.remove();
+ lockSessionId.remove();
}
}
}