Skip to content

Commit 9ad1806

Browse files
authored
Redis cluster lock (#238)
1 parent 0dfc877 commit 9ad1806

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

beaker/ext/redisclusternm.py

+13
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ class RedisClusterSynchronizer(RedisSynchronizer):
7575
7676
This Synchronizer only supports 1 reader or 1 writer at time, not concurrent readers.
7777
"""
78+
RELEASE_LOCK_LUA = """
79+
if redis.call('get', KEYS[1]) == ARGV[1] then
80+
return redis.call('del', KEYS[1])
81+
else
82+
return 0
83+
end
84+
"""
7885

7986
def __init__(self, identifier, urls, nodes=None, **kwargs):
8087
super(RedisSynchronizer, self).__init__()
@@ -85,3 +92,9 @@ def __init__(self, identifier, urls, nodes=None, **kwargs):
8592
)
8693
else:
8794
self.client = urls
95+
self._release_lock = self.client.register_script(self.RELEASE_LOCK_LUA)
96+
97+
def do_release_write_lock(self):
98+
identifier = self.identifier
99+
owner_id = self._get_owner_id()
100+
self._release_lock(keys=[identifier], args=[owner_id])

0 commit comments

Comments
 (0)