redis_queued_locks 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +26 -2
- data/lib/redis_queued_locks/acquier/acquire_lock.rb +1 -1
- data/lib/redis_queued_locks/client.rb +6 -5
- data/lib/redis_queued_locks/version.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b175564df436902d56e07a376f0257118eced8d7c81dbb81837e63cdef74938
|
4
|
+
data.tar.gz: f88d3e83045cb4dd4dcd10b12744399ce45d3b99a84f6ca492d801a678db55f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae486564a408bc9039d6b09f3fe08ba37e733bae902ec2c3f55eae84b22a05e6c6f31bc9ceafc5ee78a10ae34dfdc0b3e7dcbfb09a41f74795ed29dce823a6bc
|
7
|
+
data.tar.gz: ba40ab572fb1863b0bcddee6536385d19e3b3c7c9df07b2e2d71d74ad740eccb05a18847222be70bf6796596ce2b93266dbf462dccab294c6200a4441ca1f1a7
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.1.0] - 2024-04-01
|
4
|
+
### Added
|
5
|
+
- Documentation updates:
|
6
|
+
- more `#lock` examples;
|
7
|
+
- added missing docs for `config.dead_request_ttl`;
|
8
|
+
- some minor updates;
|
9
|
+
### Changed
|
10
|
+
- `#clear_dead_requests`: `:scan_size` is equal to `config[:lock_release_batch_size]` now (instead of to `config[:key_extraction_batch_size]`);
|
11
|
+
cuz `#clear_dead_requests` works with lock releasing;
|
12
|
+
|
3
13
|
## [1.0.0] - 2024-04-01
|
4
14
|
- First Major Release;
|
5
15
|
|
data/README.md
CHANGED
@@ -155,10 +155,16 @@ clinet = RedisQueuedLocks::Client.new(redis_client) do |config|
|
|
155
155
|
config.lock_release_batch_size = 100
|
156
156
|
|
157
157
|
# (default: 500)
|
158
|
-
# - how many items should be extracted from redis during the #locks, #queues
|
158
|
+
# - how many items should be extracted from redis during the #locks, #queues, #keys
|
159
|
+
# #locks_info, and #queues_info operations (uses SCAN);
|
159
160
|
# - affects the performance of your Redis and Ruby Application (configure thoughtfully;)
|
160
161
|
config.key_extraction_batch_size = 500
|
161
162
|
|
163
|
+
# (default: 1 day)
|
164
|
+
# - the default period of time (in milliseconds) after which a lock request is considered dead;
|
165
|
+
# - used for `#clear_dead_requests` as default vaule of `:dead_ttl` option;
|
166
|
+
config.dead_request_ttl = (1 * 24 * 60 * 60 * 1000) # one day in milliseconds
|
167
|
+
|
162
168
|
# (default: RedisQueuedLocks::Instrument::VoidNotifier)
|
163
169
|
# - instrumentation layer;
|
164
170
|
# - you can provde your own instrumenter with `#notify(event, payload = {})`
|
@@ -245,7 +251,7 @@ def lock(
|
|
245
251
|
ttl: config[:default_lock_ttl],
|
246
252
|
queue_ttl: config[:default_queue_ttl],
|
247
253
|
timeout: config[:try_to_lock_timeout],
|
248
|
-
timed:
|
254
|
+
timed: config[:is_timed_by_default],
|
249
255
|
retry_count: config[:retry_count],
|
250
256
|
retry_delay: config[:retry_delay],
|
251
257
|
retry_jitter: config[:retry_jitter],
|
@@ -429,6 +435,24 @@ rql.lock("my_lock", ttl: 6_500) # blocks execution until the lock is obtained
|
|
429
435
|
puts "Let's go" # will be called immediately after the lock is obtained
|
430
436
|
```
|
431
437
|
|
438
|
+
- add custom metadata to the lock (via `:meta` option):
|
439
|
+
|
440
|
+
```ruby
|
441
|
+
rql.lock("my_lock", ttl: 123456, meta: { "some" => "data", key: 123.456 })
|
442
|
+
|
443
|
+
rql.lock_info("my_lock")
|
444
|
+
# =>
|
445
|
+
{
|
446
|
+
"lock_key" => "rql:lock:my_lock",
|
447
|
+
"acq_id" => "rql:acq:123/456/567/678/374dd74324",
|
448
|
+
"ts" => 123456789,
|
449
|
+
"ini_ttl" => 123456,
|
450
|
+
"rem_ttl" => 123440,
|
451
|
+
"some" => "data",
|
452
|
+
"key" => "123.456" # NOTE: returned as a raw string directly from Redis
|
453
|
+
}
|
454
|
+
```
|
455
|
+
|
432
456
|
---
|
433
457
|
|
434
458
|
#### #lock! - exceptional lock obtaining
|
@@ -186,7 +186,7 @@ module RedisQueuedLocks::Acquier::AcquireLock
|
|
186
186
|
with_acq_timeout(timeout, lock_key, raise_errors, on_timeout: acq_dequeue) do
|
187
187
|
acq_start_time = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
188
188
|
|
189
|
-
# Step 2.1:
|
189
|
+
# Step 2.1: cyclically try to obtain the lock
|
190
190
|
while acq_process[:should_try]
|
191
191
|
run_non_critical do
|
192
192
|
logger.debug do
|
@@ -402,11 +402,12 @@ class RedisQueuedLocks::Client
|
|
402
402
|
end
|
403
403
|
|
404
404
|
# @option dead_ttl [Integer]
|
405
|
-
#
|
406
|
-
#
|
407
|
-
#
|
405
|
+
# - the time period (in millsiecnds) after whcih the lock request is
|
406
|
+
# considered as dead;
|
407
|
+
# - `config[:dead_request_ttl]` is used by default;
|
408
408
|
# @option scan_size [Integer]
|
409
|
-
#
|
409
|
+
# - the batch of scanned keys for Redis'es SCAN command;
|
410
|
+
# - `config[:lock_release_batch_size]` is used by default;
|
410
411
|
# @option logger [::Logger,#debug]
|
411
412
|
# @option instrumenter [#notify]
|
412
413
|
# @option instrument [NilClass,Any]
|
@@ -417,7 +418,7 @@ class RedisQueuedLocks::Client
|
|
417
418
|
# @since 0.1.0
|
418
419
|
def clear_dead_requests(
|
419
420
|
dead_ttl: config[:dead_request_ttl],
|
420
|
-
scan_size: config[:
|
421
|
+
scan_size: config[:lock_release_batch_size],
|
421
422
|
logger: config[:logger],
|
422
423
|
instrumenter: config[:instrumenter],
|
423
424
|
instrument: nil
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_queued_locks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis-client
|
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
requirements: []
|
111
|
-
rubygems_version: 3.
|
111
|
+
rubygems_version: 3.5.1
|
112
112
|
signing_key:
|
113
113
|
specification_version: 4
|
114
114
|
summary: Queued distributed locks based on Redis.
|