@@ -27,15 +27,18 @@ public abstract class AbstractRedisService implements RedisService {
27
27
private static final String ATLAS_REDIS_MASTER_NAME = "atlas.redis.master_name" ;
28
28
private static final String ATLAS_REDIS_LOCK_WAIT_TIME_MS = "atlas.redis.lock.wait_time.ms" ;
29
29
private static final String ATLAS_REDIS_LOCK_WATCHDOG_TIMEOUT_MS = "atlas.redis.lock.watchdog_timeout.ms" ;
30
+ private static final String ATLAS_REDIS_LEASE_TIME_MS = "atlas.redis.lease_time.ms" ;
30
31
private static final int DEFAULT_REDIS_WAIT_TIME_MS = 15_000 ;
31
32
private static final int DEFAULT_REDIS_LOCK_WATCHDOG_TIMEOUT_MS = 600_000 ;
33
+ private static final int DEFAULT_REDIS_LEASE_TIME_MS = 60_000 ;
32
34
private static final String ATLAS_METASTORE_SERVICE = "atlas-metastore-service" ;
33
35
34
36
RedissonClient redisClient ;
35
37
RedissonClient redisCacheClient ;
36
38
Map <String , RLock > keyLockMap ;
37
39
Configuration atlasConfig ;
38
40
long waitTimeInMS ;
41
+ long leaseTimeInMS ;
39
42
long watchdogTimeoutInMS ;
40
43
41
44
@ Override
@@ -44,7 +47,7 @@ public boolean acquireDistributedLock(String key) throws Exception {
44
47
boolean isLockAcquired ;
45
48
try {
46
49
RLock lock = redisClient .getFairLock (key );
47
- isLockAcquired = lock .tryLock (waitTimeInMS , TimeUnit .MILLISECONDS );
50
+ isLockAcquired = lock .tryLock (waitTimeInMS , leaseTimeInMS , TimeUnit .MILLISECONDS );
48
51
if (isLockAcquired ) {
49
52
keyLockMap .put (key , lock );
50
53
} else {
@@ -57,16 +60,18 @@ public boolean acquireDistributedLock(String key) throws Exception {
57
60
return isLockAcquired ;
58
61
}
59
62
63
+
60
64
@ Override
61
65
public void releaseDistributedLock (String key ) {
62
- if (!keyLockMap .containsKey (key )) {
63
- return ;
64
- }
66
+ if (!keyLockMap .containsKey (key )) {
67
+ return ;
68
+ }
65
69
try {
66
70
RLock lock = keyLockMap .get (key );
67
71
if (lock .isHeldByCurrentThread ()) {
68
72
lock .unlock ();
69
73
}
74
+
70
75
} catch (Exception e ) {
71
76
getLogger ().error ("Failed to release distributed lock for {}" , key , e );
72
77
}
@@ -106,6 +111,7 @@ private Config initAtlasConfig() throws AtlasException {
106
111
keyLockMap = new ConcurrentHashMap <>();
107
112
atlasConfig = ApplicationProperties .get ();
108
113
waitTimeInMS = atlasConfig .getLong (ATLAS_REDIS_LOCK_WAIT_TIME_MS , DEFAULT_REDIS_WAIT_TIME_MS );
114
+ leaseTimeInMS = atlasConfig .getLong (ATLAS_REDIS_LEASE_TIME_MS , DEFAULT_REDIS_LEASE_TIME_MS );
109
115
watchdogTimeoutInMS = atlasConfig .getLong (ATLAS_REDIS_LOCK_WATCHDOG_TIMEOUT_MS , DEFAULT_REDIS_LOCK_WATCHDOG_TIMEOUT_MS );
110
116
Config redisConfig = new Config ();
111
117
redisConfig .setLockWatchdogTimeout (watchdogTimeoutInMS );
0 commit comments