in mode/cluster/repository/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLock.java [72:92]
public boolean tryLock(final long timeoutMillis) {
if (!Strings.isNullOrEmpty(lockSessionId.get())) {
return true;
}
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()) {
return tryLock(sessionId);
}
client.sessionDestroy(sessionId, null);
long waitingMillis = waitUntilRelease(response.getConsulIndex(), remainingMillis);
if (waitingMillis >= remainingMillis) {
return false;
}
remainingMillis -= waitingMillis;
}
}