redis_queued_locks 1.6.0 → 1.7.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 +9 -1
- data/README.md +141 -53
- data/lib/redis_queued_locks/acquier/acquire_lock/dequeue_from_lock_queue/log_visitor.rb +36 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/dequeue_from_lock_queue.rb +39 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/instr_visitor.rb +151 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/log_visitor.rb +192 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/try_to_lock/log_visitor.rb +485 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/try_to_lock.rb +73 -198
- data/lib/redis_queued_locks/acquier/acquire_lock/yield_expire/log_visitor.rb +68 -0
- data/lib/redis_queued_locks/acquier/acquire_lock/yield_expire.rb +13 -22
- data/lib/redis_queued_locks/acquier/acquire_lock.rb +83 -110
- data/lib/redis_queued_locks/client.rb +23 -2
- data/lib/redis_queued_locks/utilities.rb +0 -1
- data/lib/redis_queued_locks/version.rb +2 -2
- data/lib/redis_queued_locks/watcher.rb +1 -0
- data/redis_queued_locks.gemspec +23 -3
- metadata +13 -5
@@ -0,0 +1,192 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 1.7.0
|
5
|
+
# rubocop:disable Metrics/ModuleLength
|
6
|
+
module RedisQueuedLocks::Acquier::AcquireLock::LogVisitor
|
7
|
+
extend self
|
8
|
+
|
9
|
+
# @param logger [::Logger,#debug]
|
10
|
+
# @param log_sampled [Boolean]
|
11
|
+
# @param lock_key [String]
|
12
|
+
# @param queue_ttl [Integer]
|
13
|
+
# @param acquier_id [String]
|
14
|
+
# @param access_strategy [Symbol]
|
15
|
+
# @return [void]
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
# @since 1.7.0
|
19
|
+
def start_lock_obtaining(
|
20
|
+
logger,
|
21
|
+
log_sampled,
|
22
|
+
lock_key,
|
23
|
+
queue_ttl,
|
24
|
+
acquier_id,
|
25
|
+
access_strategy
|
26
|
+
)
|
27
|
+
return unless log_sampled
|
28
|
+
|
29
|
+
logger.debug do
|
30
|
+
"[redis_queued_locks.start_lock_obtaining] " \
|
31
|
+
"lock_key => '#{lock_key}' " \
|
32
|
+
"queue_ttl => #{queue_ttl} " \
|
33
|
+
"acq_id => '#{acquier_id}' " \
|
34
|
+
"acs_strat => '#{access_strategy}'"
|
35
|
+
end rescue nil
|
36
|
+
end
|
37
|
+
|
38
|
+
# @param logger [::Logger,#debug]
|
39
|
+
# @param log_sampled [Boolean]
|
40
|
+
# @param lock_key [String]
|
41
|
+
# @param queue_ttl [Integer]
|
42
|
+
# @param acquier_id [String]
|
43
|
+
# @param access_strategy [Symbol]
|
44
|
+
# @return [void]
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
# @since 1.7.0
|
48
|
+
def start_try_to_lock_cycle(
|
49
|
+
logger,
|
50
|
+
log_sampled,
|
51
|
+
lock_key,
|
52
|
+
queue_ttl,
|
53
|
+
acquier_id,
|
54
|
+
access_strategy
|
55
|
+
)
|
56
|
+
return unless log_sampled
|
57
|
+
|
58
|
+
logger.debug do
|
59
|
+
"[redis_queued_locks.start_try_to_lock_cycle] " \
|
60
|
+
"lock_key => '#{lock_key}' " \
|
61
|
+
"queue_ttl => #{queue_ttl} " \
|
62
|
+
"acq_id => '#{acquier_id}' " \
|
63
|
+
"acs_strat => '#{access_strategy}'"
|
64
|
+
end rescue nil
|
65
|
+
end
|
66
|
+
|
67
|
+
# @param logger [::Logger,#debug]
|
68
|
+
# @param log_sampled [Boolean]
|
69
|
+
# @param lock_key [String]
|
70
|
+
# @param queue_ttl [Integer]
|
71
|
+
# @param acquier_id [String]
|
72
|
+
# @param access_strategy [Symbol]
|
73
|
+
# @return [void]
|
74
|
+
#
|
75
|
+
# @api private
|
76
|
+
# @since 1.7.0
|
77
|
+
def dead_score_reached__reset_acquier_position(
|
78
|
+
logger,
|
79
|
+
log_sampled,
|
80
|
+
lock_key,
|
81
|
+
queue_ttl,
|
82
|
+
acquier_id,
|
83
|
+
access_strategy
|
84
|
+
)
|
85
|
+
return unless log_sampled
|
86
|
+
|
87
|
+
logger.debug do
|
88
|
+
"[redis_queued_locks.dead_score_reached__reset_acquier_position] " \
|
89
|
+
"lock_key => '#{lock_key}' " \
|
90
|
+
"queue_ttl => #{queue_ttl} " \
|
91
|
+
"acq_id => '#{acquier_id}' " \
|
92
|
+
"acs_strat => '#{access_strategy}'"
|
93
|
+
end rescue nil
|
94
|
+
end
|
95
|
+
|
96
|
+
# @param logger [::Logger,#debug]
|
97
|
+
# @param log_sampled [Boolean]
|
98
|
+
# @param lock_key [String]
|
99
|
+
# @param queue_ttl [Integer]
|
100
|
+
# @param acquier_id [String]
|
101
|
+
# @param acq_time [Numeric]
|
102
|
+
# @param access_strategy [Symbol]
|
103
|
+
# @return [void]
|
104
|
+
#
|
105
|
+
# @api private
|
106
|
+
# @since 1.7.0
|
107
|
+
def extendable_reentrant_lock_obtained(
|
108
|
+
logger,
|
109
|
+
log_sampled,
|
110
|
+
lock_key,
|
111
|
+
queue_ttl,
|
112
|
+
acquier_id,
|
113
|
+
acq_time,
|
114
|
+
access_strategy
|
115
|
+
)
|
116
|
+
return unless log_sampled
|
117
|
+
|
118
|
+
logger.debug do
|
119
|
+
"[redis_queued_locks.extendable_reentrant_lock_obtained] " \
|
120
|
+
"lock_key => '#{lock_key}' " \
|
121
|
+
"queue_ttl => #{queue_ttl} " \
|
122
|
+
"acq_id => '#{acquier_id}' " \
|
123
|
+
"acs_strat => '#{access_strategy}' " \
|
124
|
+
"acq_time => #{acq_time} (ms)"
|
125
|
+
end rescue nil
|
126
|
+
end
|
127
|
+
|
128
|
+
# @param logger [::Logger,#debug]
|
129
|
+
# @param log_sampled [Boolean]
|
130
|
+
# @param lock_key [String]
|
131
|
+
# @param queue_ttl [Integer]
|
132
|
+
# @param acquier_id [String]
|
133
|
+
# @param acq_time [Numeric]
|
134
|
+
# @param access_strategy [Symbol]
|
135
|
+
# @return [void]
|
136
|
+
#
|
137
|
+
# @api private
|
138
|
+
# @since 1.7.0
|
139
|
+
def reentrant_lock_obtained(
|
140
|
+
logger,
|
141
|
+
log_sampled,
|
142
|
+
lock_key,
|
143
|
+
queue_ttl,
|
144
|
+
acquier_id,
|
145
|
+
acq_time,
|
146
|
+
access_strategy
|
147
|
+
)
|
148
|
+
return unless log_sampled
|
149
|
+
|
150
|
+
logger.debug do
|
151
|
+
"[redis_queued_locks.reentrant_lock_obtained] " \
|
152
|
+
"lock_key => '#{lock_key}' " \
|
153
|
+
"queue_ttl => #{queue_ttl} " \
|
154
|
+
"acq_id => '#{acquier_id}' " \
|
155
|
+
"acs_strat => '#{access_strategy}' " \
|
156
|
+
"acq_time => #{acq_time} (ms)"
|
157
|
+
end rescue nil
|
158
|
+
end
|
159
|
+
|
160
|
+
# @param logger [::Logger,#debug]
|
161
|
+
# @param log_sampled [Boolean]
|
162
|
+
# @param lock_key [String]
|
163
|
+
# @param queue_ttl [Integer]
|
164
|
+
# @param acquier_id [String]
|
165
|
+
# @param acq_time [Numeric]
|
166
|
+
# @param access_strategy [Symbol]
|
167
|
+
# @return [void]
|
168
|
+
#
|
169
|
+
# @api private
|
170
|
+
# @since 1.7.0
|
171
|
+
def lock_obtained(
|
172
|
+
logger,
|
173
|
+
log_sampled,
|
174
|
+
lock_key,
|
175
|
+
queue_ttl,
|
176
|
+
acquier_id,
|
177
|
+
acq_time,
|
178
|
+
access_strategy
|
179
|
+
)
|
180
|
+
return unless log_sampled
|
181
|
+
|
182
|
+
logger.debug do
|
183
|
+
"[redis_queued_locks.lock_obtained] " \
|
184
|
+
"lock_key => '#{lock_key}' " \
|
185
|
+
"queue_ttl => #{queue_ttl} " \
|
186
|
+
"acq_id => '#{acquier_id}' " \
|
187
|
+
"acs_strat => '#{access_strategy}' " \
|
188
|
+
"acq_time => #{acq_time} (ms)"
|
189
|
+
end rescue nil
|
190
|
+
end
|
191
|
+
end
|
192
|
+
# rubocop:enable Metrics/ModuleLength
|
@@ -0,0 +1,485 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 1.7.0
|
5
|
+
# rubocop:disable Metrics/ModuleLength
|
6
|
+
module RedisQueuedLocks::Acquier::AcquireLock::TryToLock::LogVisitor
|
7
|
+
extend self
|
8
|
+
|
9
|
+
# @param logger [::Logger,#debug]
|
10
|
+
# @param log_sampled [Boolean]
|
11
|
+
# @param log_lock_try [Boolean]
|
12
|
+
# @param lock_key [String]
|
13
|
+
# @param queue_ttl [Integer]
|
14
|
+
# @param acquier_id [String]
|
15
|
+
# @param access_strategy [Symbol]
|
16
|
+
# @return [void]
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
# @since 1.7.0
|
20
|
+
def start(
|
21
|
+
logger,
|
22
|
+
log_sampled,
|
23
|
+
log_lock_try,
|
24
|
+
lock_key,
|
25
|
+
queue_ttl,
|
26
|
+
acquier_id,
|
27
|
+
access_strategy
|
28
|
+
)
|
29
|
+
return unless log_sampled && log_lock_try
|
30
|
+
|
31
|
+
logger.debug do
|
32
|
+
"[redis_queued_locks.try_lock.start] " \
|
33
|
+
"lock_key => '#{lock_key}' " \
|
34
|
+
"queue_ttl => #{queue_ttl} " \
|
35
|
+
"acq_id => '#{acquier_id}' " \
|
36
|
+
"acs_strat => '#{access_strategy}'"
|
37
|
+
end rescue nil
|
38
|
+
end
|
39
|
+
|
40
|
+
# @param logger [::Logger,#debug]
|
41
|
+
# @param log_sampled [Boolean]
|
42
|
+
# @param log_lock_try [Boolean]
|
43
|
+
# @param lock_key [String]
|
44
|
+
# @param queue_ttl [Integer]
|
45
|
+
# @param acquier_id [String]
|
46
|
+
# @param access_strategy [Symbol]
|
47
|
+
# @return [void]
|
48
|
+
#
|
49
|
+
# @api private
|
50
|
+
# @since 1.7.0
|
51
|
+
def rconn_fetched(
|
52
|
+
logger,
|
53
|
+
log_sampled,
|
54
|
+
log_lock_try,
|
55
|
+
lock_key,
|
56
|
+
queue_ttl,
|
57
|
+
acquier_id,
|
58
|
+
access_strategy
|
59
|
+
)
|
60
|
+
return unless log_sampled && log_lock_try
|
61
|
+
|
62
|
+
logger.debug do
|
63
|
+
"[redis_queued_locks.try_lock.rconn_fetched] " \
|
64
|
+
"lock_key => '#{lock_key}' " \
|
65
|
+
"queue_ttl => #{queue_ttl} " \
|
66
|
+
"acq_id => '#{acquier_id}' " \
|
67
|
+
"acs_strat => '#{access_strategy}'"
|
68
|
+
end rescue nil
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param logger [::Logger,#debug]
|
72
|
+
# @param log_sampled [Boolean]
|
73
|
+
# @param log_lock_try [Boolean]
|
74
|
+
# @param lock_key [String]
|
75
|
+
# @param queue_ttl [Integer]
|
76
|
+
# @param acquier_id [String]
|
77
|
+
# @param access_strategy [Symbol]
|
78
|
+
# @return [void]
|
79
|
+
#
|
80
|
+
# @api private
|
81
|
+
# @since 1.7.0
|
82
|
+
def same_process_conflict_detected(
|
83
|
+
logger,
|
84
|
+
log_sampled,
|
85
|
+
log_lock_try,
|
86
|
+
lock_key,
|
87
|
+
queue_ttl,
|
88
|
+
acquier_id,
|
89
|
+
access_strategy
|
90
|
+
)
|
91
|
+
return unless log_sampled && log_lock_try
|
92
|
+
|
93
|
+
logger.debug do
|
94
|
+
"[redis_queued_locks.try_lock.same_process_conflict_detected] " \
|
95
|
+
"lock_key => '#{lock_key}' " \
|
96
|
+
"queue_ttl => #{queue_ttl} " \
|
97
|
+
"acq_id => '#{acquier_id}' " \
|
98
|
+
"acs_strat => '#{access_strategy}'"
|
99
|
+
end rescue nil
|
100
|
+
end
|
101
|
+
|
102
|
+
# @param logger [::Logger,#debug]
|
103
|
+
# @param log_sampled [Boolean]
|
104
|
+
# @param log_lock_try [Boolean]
|
105
|
+
# @param lock_key [String]
|
106
|
+
# @param queue_ttl [Integer]
|
107
|
+
# @param acquier_id [String]
|
108
|
+
# @param access_strategy [Symbol]
|
109
|
+
# @param sp_conflict_status [Symbol]
|
110
|
+
# @return [void]
|
111
|
+
#
|
112
|
+
# @api private
|
113
|
+
# @since 1.7.0
|
114
|
+
def same_process_conflict_analyzed(
|
115
|
+
logger,
|
116
|
+
log_sampled,
|
117
|
+
log_lock_try,
|
118
|
+
lock_key,
|
119
|
+
queue_ttl,
|
120
|
+
acquier_id,
|
121
|
+
access_strategy,
|
122
|
+
sp_conflict_status
|
123
|
+
)
|
124
|
+
return unless log_sampled && log_lock_try
|
125
|
+
|
126
|
+
logger.debug do
|
127
|
+
"[redis_queued_locks.try_lock.same_process_conflict_analyzed] " \
|
128
|
+
"lock_key => '#{lock_key}' " \
|
129
|
+
"queue_ttl => #{queue_ttl} " \
|
130
|
+
"acq_id => '#{acquier_id}' " \
|
131
|
+
"acs_strat => '#{access_strategy}' " \
|
132
|
+
"spc_status => '#{sp_conflict_status}'"
|
133
|
+
end rescue nil
|
134
|
+
end
|
135
|
+
|
136
|
+
# @param logger [::Logger,#debug]
|
137
|
+
# @param log_sampled [Boolean]
|
138
|
+
# @param log_lock_try [Boolean]
|
139
|
+
# @param lock_key [String]
|
140
|
+
# @param queue_ttl [Integer]
|
141
|
+
# @param acquier_id [String]
|
142
|
+
# @param access_strategy [Symbol]
|
143
|
+
# @param sp_conflict_status [Symbol]
|
144
|
+
# @param ttl [Integer]
|
145
|
+
# @param spc_processed_timestamp [Float]
|
146
|
+
# @return [void]
|
147
|
+
#
|
148
|
+
# @api private
|
149
|
+
# @since 1.7.0
|
150
|
+
def reentrant_lock__extend_and_work_through(
|
151
|
+
logger,
|
152
|
+
log_sampled,
|
153
|
+
log_lock_try,
|
154
|
+
lock_key,
|
155
|
+
queue_ttl,
|
156
|
+
acquier_id,
|
157
|
+
access_strategy,
|
158
|
+
sp_conflict_status,
|
159
|
+
ttl,
|
160
|
+
spc_processed_timestamp
|
161
|
+
)
|
162
|
+
return unless log_sampled && log_lock_try
|
163
|
+
|
164
|
+
logger.debug do
|
165
|
+
"[redis_queued_locks.try_lock.reentrant_lock__extend_and_work_through] " \
|
166
|
+
"lock_key => '#{lock_key}' " \
|
167
|
+
"queue_ttl => #{queue_ttl} " \
|
168
|
+
"acq_id => '#{acquier_id}' " \
|
169
|
+
"acs_strat => '#{access_strategy}' " \
|
170
|
+
"spc_status => '#{sp_conflict_status}' " \
|
171
|
+
"last_ext_ttl => #{ttl} " \
|
172
|
+
"last_ext_ts => '#{spc_processed_timestamp}'"
|
173
|
+
end rescue nil
|
174
|
+
end
|
175
|
+
|
176
|
+
# @param logger [::Logger,#debug]
|
177
|
+
# @param log_sampled [Boolean]
|
178
|
+
# @param log_lock_try [Boolean]
|
179
|
+
# @param lock_key [String]
|
180
|
+
# @param queue_ttl [Integer]
|
181
|
+
# @param acquier_id [String]
|
182
|
+
# @param access_strategy [Symbol]
|
183
|
+
# @param sp_conflict_status [Symbol]
|
184
|
+
# @param spc_processed_timestamp [Float]
|
185
|
+
# @return [void]
|
186
|
+
#
|
187
|
+
# @api private
|
188
|
+
# @since 1.7.0
|
189
|
+
def reentrant_lock__work_through(
|
190
|
+
logger,
|
191
|
+
log_sampled,
|
192
|
+
log_lock_try,
|
193
|
+
lock_key,
|
194
|
+
queue_ttl,
|
195
|
+
acquier_id,
|
196
|
+
access_strategy,
|
197
|
+
sp_conflict_status,
|
198
|
+
spc_processed_timestamp
|
199
|
+
)
|
200
|
+
return unless log_sampled && log_lock_try
|
201
|
+
|
202
|
+
logger.debug do
|
203
|
+
"[redis_queued_locks.try_lock.reentrant_lock__work_through] " \
|
204
|
+
"lock_key => '#{lock_key}' " \
|
205
|
+
"queue_ttl => #{queue_ttl} " \
|
206
|
+
"acq_id => '#{acquier_id}' " \
|
207
|
+
"acs_strat => '#{access_strategy}' " \
|
208
|
+
"spc_status => '#{sp_conflict_status}' " \
|
209
|
+
"last_spc_ts => '#{spc_processed_timestamp}'"
|
210
|
+
end rescue nil
|
211
|
+
end
|
212
|
+
|
213
|
+
# @param logger [::Logger,#debug]
|
214
|
+
# @param log_sampled [Boolean]
|
215
|
+
# @param log_lock_try [Boolean]
|
216
|
+
# @param lock_key [String]
|
217
|
+
# @param queue_ttl [Integer]
|
218
|
+
# @param acquier_id [String]
|
219
|
+
# @param access_strategy [Symbol]
|
220
|
+
# @param sp_conflict_status [Symbol]
|
221
|
+
# @param spc_processed_timestamp [Float]
|
222
|
+
# @return [void]
|
223
|
+
#
|
224
|
+
# @api private
|
225
|
+
# @since 1.7.0
|
226
|
+
def single_process_lock_conflict__dead_lock(
|
227
|
+
logger,
|
228
|
+
log_sampled,
|
229
|
+
log_lock_try,
|
230
|
+
lock_key,
|
231
|
+
queue_ttl,
|
232
|
+
acquier_id,
|
233
|
+
access_strategy,
|
234
|
+
sp_conflict_status,
|
235
|
+
spc_processed_timestamp
|
236
|
+
)
|
237
|
+
return unless log_sampled && log_lock_try
|
238
|
+
|
239
|
+
logger.debug do
|
240
|
+
"[redis_queued_locks.try_lock.single_process_lock_conflict__dead_lock] " \
|
241
|
+
"lock_key => '#{lock_key}' " \
|
242
|
+
"queue_ttl => #{queue_ttl} " \
|
243
|
+
"acq_id => '#{acquier_id}' " \
|
244
|
+
"acs_strat => '#{access_strategy}' " \
|
245
|
+
"spc_status => '#{sp_conflict_status}' " \
|
246
|
+
"last_spc_ts => '#{spc_processed_timestamp}'"
|
247
|
+
end rescue nil
|
248
|
+
end
|
249
|
+
|
250
|
+
# @param logger [::Logger,#debug]
|
251
|
+
# @param log_sampled [Boolean]
|
252
|
+
# @param log_lock_try [Boolean]
|
253
|
+
# @param lock_key [String]
|
254
|
+
# @param queue_ttl [Integer]
|
255
|
+
# @param acquier_id [String]
|
256
|
+
# @param access_strategy [Symbol]
|
257
|
+
# @return [void]
|
258
|
+
#
|
259
|
+
# @api private
|
260
|
+
# @since 1.7.0
|
261
|
+
def acq_added_to_queue(
|
262
|
+
logger,
|
263
|
+
log_sampled,
|
264
|
+
log_lock_try,
|
265
|
+
lock_key,
|
266
|
+
queue_ttl,
|
267
|
+
acquier_id,
|
268
|
+
access_strategy
|
269
|
+
)
|
270
|
+
return unless log_sampled && log_lock_try
|
271
|
+
|
272
|
+
logger.debug do
|
273
|
+
"[redis_queued_locks.try_lock.acq_added_to_queue] " \
|
274
|
+
"lock_key => '#{lock_key}' " \
|
275
|
+
"queue_ttl => #{queue_ttl} " \
|
276
|
+
"acq_id => '#{acquier_id}' " \
|
277
|
+
"acs_strat => '#{access_strategy}'"
|
278
|
+
end rescue nil
|
279
|
+
end
|
280
|
+
|
281
|
+
# @param logger [::Logger,#debug]
|
282
|
+
# @param log_sampled [Boolean]
|
283
|
+
# @param log_lock_try [Boolean]
|
284
|
+
# @param lock_key [String]
|
285
|
+
# @param queue_ttl [Integer]
|
286
|
+
# @param acquier_id [String]
|
287
|
+
# @param access_strategy [Symbol]
|
288
|
+
# @return [void]
|
289
|
+
#
|
290
|
+
# @api private
|
291
|
+
# @since 1.7.0
|
292
|
+
def remove_expired_acqs(
|
293
|
+
logger,
|
294
|
+
log_sampled,
|
295
|
+
log_lock_try,
|
296
|
+
lock_key,
|
297
|
+
queue_ttl,
|
298
|
+
acquier_id,
|
299
|
+
access_strategy
|
300
|
+
)
|
301
|
+
return unless log_sampled && log_lock_try
|
302
|
+
|
303
|
+
logger.debug do
|
304
|
+
"[redis_queued_locks.try_lock.remove_expired_acqs] " \
|
305
|
+
"lock_key => '#{lock_key}' " \
|
306
|
+
"queue_ttl => #{queue_ttl} " \
|
307
|
+
"acq_id => '#{acquier_id}' " \
|
308
|
+
"acs_strat => '#{access_strategy}'"
|
309
|
+
end rescue nil
|
310
|
+
end
|
311
|
+
|
312
|
+
# @param logger [::Logger,#debug]
|
313
|
+
# @param log_sampled [Boolean]
|
314
|
+
# @param log_lock_try [Boolean]
|
315
|
+
# @param lock_key [String]
|
316
|
+
# @param queue_ttl [Integer]
|
317
|
+
# @param acquier_id [String]
|
318
|
+
# @param access_strategy [Symbol]
|
319
|
+
# @param waiting_acquier [String]
|
320
|
+
# @return [void]
|
321
|
+
#
|
322
|
+
# @api private
|
323
|
+
# @since 1.7.0
|
324
|
+
def get_first_from_queue(
|
325
|
+
logger,
|
326
|
+
log_sampled,
|
327
|
+
log_lock_try,
|
328
|
+
lock_key,
|
329
|
+
queue_ttl,
|
330
|
+
acquier_id,
|
331
|
+
access_strategy,
|
332
|
+
waiting_acquier
|
333
|
+
)
|
334
|
+
return unless log_sampled && log_lock_try
|
335
|
+
|
336
|
+
logger.debug do
|
337
|
+
"[redis_queued_locks.try_lock.get_first_from_queue] " \
|
338
|
+
"lock_key => '#{lock_key}' " \
|
339
|
+
"queue_ttl => #{queue_ttl} " \
|
340
|
+
"acq_id => '#{acquier_id}' " \
|
341
|
+
"acs_strat => '#{access_strategy}' " \
|
342
|
+
"first_acq_id_in_queue => '#{waiting_acquier}'"
|
343
|
+
end rescue nil
|
344
|
+
end
|
345
|
+
|
346
|
+
# @param logger [::Logger,#debug]
|
347
|
+
# @param log_sampled [Boolean]
|
348
|
+
# @param log_lock_try [Boolean]
|
349
|
+
# @param lock_key [String]
|
350
|
+
# @param queue_ttl [Integer]
|
351
|
+
# @param acquier_id [String]
|
352
|
+
# @param access_strategy [Symbol]
|
353
|
+
# @return [void]
|
354
|
+
#
|
355
|
+
# @api private
|
356
|
+
# @since 1.7.0
|
357
|
+
def exit__queue_ttl_reached(
|
358
|
+
logger,
|
359
|
+
log_sampled,
|
360
|
+
log_lock_try,
|
361
|
+
lock_key,
|
362
|
+
queue_ttl,
|
363
|
+
acquier_id,
|
364
|
+
access_strategy
|
365
|
+
)
|
366
|
+
return unless log_sampled && log_lock_try
|
367
|
+
|
368
|
+
logger.debug do
|
369
|
+
"[redis_queued_locks.try_lock.exit__queue_ttl_reached] " \
|
370
|
+
"lock_key => '#{lock_key}' " \
|
371
|
+
"queue_ttl => #{queue_ttl} " \
|
372
|
+
"acq_id => '#{acquier_id}' " \
|
373
|
+
"acs_strat => '#{access_strategy}'"
|
374
|
+
end rescue nil
|
375
|
+
end
|
376
|
+
|
377
|
+
# @param logger [::Logger,#debug]
|
378
|
+
# @param log_sampled [Boolean]
|
379
|
+
# @param log_lock_try [Boolean]
|
380
|
+
# @param lock_key [String]
|
381
|
+
# @param queue_ttl [Integer]
|
382
|
+
# @param acquier_id [String]
|
383
|
+
# @param access_strategy [Symbol]
|
384
|
+
# @param waiting_acquier [String]
|
385
|
+
# @param current_lock_data [Hash<String,Any>]
|
386
|
+
# @return [void]
|
387
|
+
#
|
388
|
+
# @api private
|
389
|
+
# @since 1.7.0
|
390
|
+
def exit__no_first(
|
391
|
+
logger,
|
392
|
+
log_sampled,
|
393
|
+
log_lock_try,
|
394
|
+
lock_key,
|
395
|
+
queue_ttl,
|
396
|
+
acquier_id,
|
397
|
+
access_strategy,
|
398
|
+
waiting_acquier,
|
399
|
+
current_lock_data
|
400
|
+
)
|
401
|
+
return unless log_sampled && log_lock_try
|
402
|
+
|
403
|
+
logger.debug do
|
404
|
+
"[redis_queued_locks.try_lock.exit__no_first] " \
|
405
|
+
"lock_key => '#{lock_key}' " \
|
406
|
+
"queue_ttl => #{queue_ttl} " \
|
407
|
+
"acq_id => '#{acquier_id}' " \
|
408
|
+
"acs_strat => '#{access_strategy}' " \
|
409
|
+
"first_acq_id_in_queue => '#{waiting_acquier}' " \
|
410
|
+
"<current_lock_data> => <<#{current_lock_data}>>"
|
411
|
+
end rescue nil
|
412
|
+
end
|
413
|
+
|
414
|
+
# @param logger [::Logger,#debug]
|
415
|
+
# @param log_sampled [Boolean]
|
416
|
+
# @param log_lock_try [Boolean]
|
417
|
+
# @param lock_key [String]
|
418
|
+
# @param queue_ttl [Integer]
|
419
|
+
# @param acquier_id [String]
|
420
|
+
# @param access_strategy [Symbol]
|
421
|
+
# @param waiting_acquier [String]
|
422
|
+
# @param locked_by_acquier [String]
|
423
|
+
# @param current_lock_data [Hash<String,Any>]
|
424
|
+
# @return [void]
|
425
|
+
#
|
426
|
+
# @api private
|
427
|
+
# @since 1.7.0
|
428
|
+
def exit__lock_still_obtained(
|
429
|
+
logger,
|
430
|
+
log_sampled,
|
431
|
+
log_lock_try,
|
432
|
+
lock_key,
|
433
|
+
queue_ttl,
|
434
|
+
acquier_id,
|
435
|
+
access_strategy,
|
436
|
+
waiting_acquier,
|
437
|
+
locked_by_acquier,
|
438
|
+
current_lock_data
|
439
|
+
)
|
440
|
+
return unless log_sampled && log_lock_try
|
441
|
+
|
442
|
+
logger.debug do
|
443
|
+
"[redis_queued_locks.try_lock.exit__lock_still_obtained] " \
|
444
|
+
"lock_key => '#{lock_key}' " \
|
445
|
+
"queue_ttl => #{queue_ttl} " \
|
446
|
+
"acq_id => '#{acquier_id}' " \
|
447
|
+
"acs_strat => '#{access_strategy}' " \
|
448
|
+
"first_acq_id_in_queue => '#{waiting_acquier}' " \
|
449
|
+
"locked_by_acq_id => '#{locked_by_acquier}' " \
|
450
|
+
"<current_lock_data> => <<#{current_lock_data}>>"
|
451
|
+
end rescue nil
|
452
|
+
end
|
453
|
+
|
454
|
+
# @param logger [::Logger,#debug]
|
455
|
+
# @param log_sampled [Boolean]
|
456
|
+
# @param log_lock_try [Boolean]
|
457
|
+
# @param lock_key [String]
|
458
|
+
# @param queue_ttl [Integer]
|
459
|
+
# @param acquier_id [String]
|
460
|
+
# @param access_strategy [Symbol]
|
461
|
+
# @return [void]
|
462
|
+
#
|
463
|
+
# @api private
|
464
|
+
# @since 1.7.0
|
465
|
+
def obtain__free_to_acquire(
|
466
|
+
logger,
|
467
|
+
log_sampled,
|
468
|
+
log_lock_try,
|
469
|
+
lock_key,
|
470
|
+
queue_ttl,
|
471
|
+
acquier_id,
|
472
|
+
access_strategy
|
473
|
+
)
|
474
|
+
return unless log_sampled && log_lock_try
|
475
|
+
|
476
|
+
logger.debug do
|
477
|
+
"[redis_queued_locks.try_lock.obtain__free_to_acquire] " \
|
478
|
+
"lock_key => '#{lock_key}' " \
|
479
|
+
"queue_ttl => #{queue_ttl} " \
|
480
|
+
"acq_id => '#{acquier_id}' " \
|
481
|
+
"acs_strat => '#{access_strategy}'"
|
482
|
+
end rescue nil
|
483
|
+
end
|
484
|
+
end
|
485
|
+
# rubocop:enable Metrics/ModuleLength
|