redis_queued_locks 1.2.0 → 1.3.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.
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 1.0.0
5
- module RedisQueuedLocks::Acquier::AcquireLock::YieldWithExpire
6
- # @since 1.0.0
7
- extend RedisQueuedLocks::Utilities
8
-
9
- # @param redis [RedisClient] Redis connection manager.
10
- # @param logger [::Logger,#debug] Logger object.
11
- # @param lock_key [String] Lock key to be expired.
12
- # @param acquier_id [String] Acquier identifier.
13
- # @param timed [Boolean] Should the lock be wrapped by Tiemlout with with lock's ttl
14
- # @param ttl_shift [Float] Lock's TTL shifting. Should affect block's ttl. In millisecodns.
15
- # @param ttl [Integer,NilClass] Lock's time to live (in ms). Nil means "without timeout".
16
- # @param queue_ttl [Integer] Lock request lifetime.
17
- # @param block [Block] Custom logic that should be invoked unter the obtained lock.
18
- # @return [Any,NilClass] nil is returned no block parametr is provided.
19
- #
20
- # @api private
21
- # @since 1.0.0
22
- def yield_with_expire(
23
- redis,
24
- logger,
25
- lock_key,
26
- acquier_id,
27
- timed,
28
- ttl_shift,
29
- ttl,
30
- queue_ttl,
31
- &block
32
- )
33
- if block_given?
34
- if timed && ttl != nil
35
- timeout = ((ttl - ttl_shift) / 1000.0).yield_self { |time| (time < 0) ? 0.0 : time }
36
- yield_with_timeout(timeout, lock_key, ttl, &block)
37
- else
38
- yield
39
- end
40
- end
41
- ensure
42
- run_non_critical do
43
- logger.debug do
44
- "[redis_queued_locks.expire_lock] " \
45
- "lock_key => '#{lock_key}' " \
46
- "queue_ttl => #{queue_ttl} " \
47
- "acq_id => '#{acquier_id}'"
48
- end
49
- end
50
- redis.call('EXPIRE', lock_key, '0')
51
- end
52
-
53
- private
54
-
55
- # @param timeout [Float]
56
- # @parma lock_key [String]
57
- # @param lock_ttl [Integer,NilClass]
58
- # @param block [Blcok]
59
- # @return [Any]
60
- #
61
- # @api private
62
- # @since 1.0.0
63
- def yield_with_timeout(timeout, lock_key, lock_ttl, &block)
64
- ::Timeout.timeout(timeout, &block)
65
- rescue ::Timeout::Error
66
- raise(
67
- RedisQueuedLocks::TimedLockTimeoutError,
68
- "Passed <timed> block of code exceeded " \
69
- "the lock TTL (lock: \"#{lock_key}\", ttl: #{lock_ttl})"
70
- )
71
- end
72
- end