redis_queued_locks 0.0.9 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +11 -5
- data/lib/redis_queued_locks/acquier.rb +11 -0
- data/lib/redis_queued_locks/client.rb +10 -0
- data/lib/redis_queued_locks/version.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98c4154b27f6f87e29870ca00e4372d70243dcb528311030a7715de138cb2039
|
4
|
+
data.tar.gz: 0b7fe57e396bb7f13932417e963a5a53f530255db525dcf3d261d41e08a8396a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a441b4848cb2471f694dc8f7f17e6471bf5f7957a5e37eadcdd0da23a4b0d50e3183575530fc764d5e262eea0898699b584393674a994411c7bd6ec18e02a81
|
7
|
+
data.tar.gz: 362ffaf848de14c6e42f79822a2e41a39f02b88aad8d5abb1ed79df235ffbb2dc7c42063bb6bee2aab5b9b7fc2d836498446734ee64b8d31001445ca3430e6f9
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.0.11] - 2024-02-27
|
4
|
+
### Changed
|
5
|
+
- Minor documentation updates;
|
6
|
+
|
7
|
+
## [0.0.10] - 2024-02-27
|
8
|
+
### Changed
|
9
|
+
- Minor documentation updates;
|
10
|
+
|
3
11
|
## [0.0.9] - 2024-02-27
|
4
12
|
### Changed
|
5
13
|
- The lock acquier identifier (`acq_id`) now includes the fiber id, the ractor id and an unique per-process
|
data/README.md
CHANGED
@@ -60,7 +60,7 @@ require 'redis_queued_locks'
|
|
60
60
|
require 'redis_queued_locks'
|
61
61
|
|
62
62
|
# Step 1: initialize RedisClient instance
|
63
|
-
|
63
|
+
redis_client = RedisClient.config.new_pool # NOTE: provide your own RedisClient instance
|
64
64
|
|
65
65
|
# Step 2: initialize RedisQueuedLock::Client instance
|
66
66
|
rq_lock_client = RedisQueuedLocks::Client.new(redis_client) do |config|
|
@@ -125,6 +125,7 @@ clinet = RedisQueuedLocks::Client.new(redis_client) do |config|
|
|
125
125
|
# - prevents potential lock-acquirement collisions bettween different process/pods
|
126
126
|
# that have identical process_id/thread_id/fiber_id/ractor_id (identivcal acquier ids);
|
127
127
|
# - it is calculated once per `RedisQueudLocks::Client` instance;
|
128
|
+
# - expects the proc object;
|
128
129
|
config.uniq_identifier = -> { RedisQueuedLocks::Resource.calc_uniq_identity }
|
129
130
|
end
|
130
131
|
```
|
@@ -146,6 +147,10 @@ end
|
|
146
147
|
|
147
148
|
#### #lock - obtain a lock
|
148
149
|
|
150
|
+
- If block is passed the obtained lock will be released after the block execution or the lock's ttl (what will happen first);
|
151
|
+
- If block is not passed the obtained lock will be released after lock's ttl;
|
152
|
+
|
153
|
+
|
149
154
|
```ruby
|
150
155
|
def lock(
|
151
156
|
lock_name,
|
@@ -198,7 +203,7 @@ Return value:
|
|
198
203
|
ok: true,
|
199
204
|
result: {
|
200
205
|
lock_key: String, # acquierd lock key ("rql:lock:your_lock_name")
|
201
|
-
acq_id: String, # acquier identifier ("
|
206
|
+
acq_id: String, # acquier identifier ("process_id/thread_id/fiber_id/ractor_id/identity")
|
202
207
|
ts: Integer, # time (epoch) when lock was obtained (integer)
|
203
208
|
ttl: Integer # lock's time to live in milliseconds (integer)
|
204
209
|
}
|
@@ -243,7 +248,7 @@ See `#lock` method [documentation](#lock---obtain-a-lock).
|
|
243
248
|
- returns `nil` if lock does not exist;
|
244
249
|
- lock data (`Hash<Symbol,String|Integer>`):
|
245
250
|
- `lock_key` - `string` - lock key in redis;
|
246
|
-
- `acq_id` - `string` - acquier identifier (process_id/thread_id/fiber_id/ractor_id/identity
|
251
|
+
- `acq_id` - `string` - acquier identifier (process_id/thread_id/fiber_id/ractor_id/identity);
|
247
252
|
- `ts` - `integer`/`epoch` - the time lock was obtained;
|
248
253
|
- `init_ttl` - `integer` - (milliseconds) initial lock key ttl;
|
249
254
|
- `rem_ttl` - `integer` - (milliseconds) remaining lock key ttl;
|
@@ -254,7 +259,7 @@ rql.lock_info("your_lock_name")
|
|
254
259
|
# =>
|
255
260
|
{
|
256
261
|
lock_key: "rql:lock:your_lock_name",
|
257
|
-
acq_id: "rql:acq:123/456",
|
262
|
+
acq_id: "rql:acq:123/456/567/678/374dd74324",
|
258
263
|
ts: 123456789,
|
259
264
|
ini_ttl: 123456789,
|
260
265
|
rem_ttl: 123456789
|
@@ -429,7 +434,7 @@ Detalized event semantics and payload structure:
|
|
429
434
|
- payload:
|
430
435
|
- `rel_time` - `float`/`milliseconds` - time spent on "realese all locks" operation;
|
431
436
|
- `at` - `integer`/`epoch` - the time when the operation has ended;
|
432
|
-
- `rel_keys` - `integer` - released redis keys count (`released
|
437
|
+
- `rel_keys` - `integer` - released redis keys count (`released queue keys` + `released lock keys`);
|
433
438
|
|
434
439
|
---
|
435
440
|
|
@@ -438,6 +443,7 @@ Detalized event semantics and payload structure:
|
|
438
443
|
- **Major**
|
439
444
|
- Semantic Error objects for unexpected Redis errors;
|
440
445
|
- `100%` test coverage;
|
446
|
+
- sidecar `Ractor` object and `in progress queue` in RedisDB that will extend an acquired lock for long-running blocks of code (that invoked "under" the lock);
|
441
447
|
- **Minor**
|
442
448
|
- `RedisQueuedLocks::Acquier::Try.try_to_lock` - detailed successful result analization;
|
443
449
|
- better code stylization and interesting refactorings;
|
@@ -403,6 +403,17 @@ module RedisQueuedLocks::Acquier
|
|
403
403
|
end
|
404
404
|
end
|
405
405
|
|
406
|
+
# @param redis_client [RedisClient]
|
407
|
+
# @param lock_name [String]
|
408
|
+
# @param milliseconds [Integer]
|
409
|
+
# @return [?]
|
410
|
+
#
|
411
|
+
# @api private
|
412
|
+
# @since 0.1.0
|
413
|
+
def extend_lock_ttl(redis_client, lock_name, milliseconds)
|
414
|
+
|
415
|
+
end
|
416
|
+
|
406
417
|
private
|
407
418
|
|
408
419
|
# @param timeout [NilClass,Integer]
|
@@ -196,6 +196,16 @@ class RedisQueuedLocks::Client
|
|
196
196
|
RedisQueuedLocks::Acquier.queue_info(redis_client, lock_name)
|
197
197
|
end
|
198
198
|
|
199
|
+
# @param lock_name [String]
|
200
|
+
# @param milliseconds [Integer] How many milliseconds should be added.
|
201
|
+
# @return [?]
|
202
|
+
#
|
203
|
+
# @api public
|
204
|
+
# @since 0.1.0
|
205
|
+
def extend_lock_ttl(lock_name, milliseconds)
|
206
|
+
RedisQueuedLocks::Acquier.extend_lock_ttl(redis_client, lock_name)
|
207
|
+
end
|
208
|
+
|
199
209
|
# @option batch_size [Integer]
|
200
210
|
# @return [Hash<Symbol,Any>] Format: { ok: true/false, result: Symbol/Hash }.
|
201
211
|
#
|