redis_queued_locks 1.17.0 → 1.18.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/.claude/project-overview.md +86 -10
- data/.claude/rules/acquirer.md +31 -11
- data/.claude/rules/arguments.md +2 -1
- data/.claude/rules/git.md +46 -0
- data/.claude/rules/logic.md +9 -3
- data/.claude/rules/swarm.md +4 -3
- data/.claude/rules/tests.md +9 -3
- data/.claude/rules/type-checking.md +10 -2
- data/.claude/rules/visitors.md +12 -7
- data/CHANGELOG.md +62 -0
- data/CLAUDE.md +7 -2
- data/README.md +348 -79
- data/lib/redis_queued_locks/acquirer/acquire_lock/dequeue_from_lock_queue/log_visitor.rb +6 -3
- data/lib/redis_queued_locks/acquirer/acquire_lock/dequeue_from_lock_queue.rb +9 -7
- data/lib/redis_queued_locks/acquirer/acquire_lock/instr_visitor.rb +20 -10
- data/lib/redis_queued_locks/acquirer/acquire_lock/log_visitor.rb +34 -16
- data/lib/redis_queued_locks/acquirer/acquire_lock/try_to_lock/log_visitor.rb +240 -28
- data/lib/redis_queued_locks/acquirer/acquire_lock/try_to_lock.rb +398 -129
- data/lib/redis_queued_locks/acquirer/acquire_lock/yield_expire/log_visitor.rb +12 -6
- data/lib/redis_queued_locks/acquirer/acquire_lock/yield_expire.rb +32 -8
- data/lib/redis_queued_locks/acquirer/acquire_lock.rb +73 -20
- data/lib/redis_queued_locks/acquirer/clear_dead_requests.rb +9 -1
- data/lib/redis_queued_locks/acquirer/extend_lock_ttl.rb +182 -3
- data/lib/redis_queued_locks/acquirer/is_locked.rb +19 -2
- data/lib/redis_queued_locks/acquirer/is_queued.rb +6 -2
- data/lib/redis_queued_locks/acquirer/lock_info.rb +96 -6
- data/lib/redis_queued_locks/acquirer/lock_series_poc/instr_visitor.rb +8 -2
- data/lib/redis_queued_locks/acquirer/lock_series_poc/log_visitor.rb +18 -6
- data/lib/redis_queued_locks/acquirer/lock_series_poc.rb +126 -27
- data/lib/redis_queued_locks/acquirer/locks.rb +103 -6
- data/lib/redis_queued_locks/acquirer/queue_info.rb +38 -9
- data/lib/redis_queued_locks/acquirer/queues.rb +28 -4
- data/lib/redis_queued_locks/acquirer/release_all_locks.rb +35 -1
- data/lib/redis_queued_locks/acquirer/release_lock.rb +40 -9
- data/lib/redis_queued_locks/acquirer/release_locks_of.rb +43 -3
- data/lib/redis_queued_locks/acquirer/release_read_lock.rb +143 -0
- data/lib/redis_queued_locks/acquirer.rb +1 -0
- data/lib/redis_queued_locks/client.rb +129 -14
- data/lib/redis_queued_locks/resource.rb +117 -9
- data/lib/redis_queued_locks/swarm/flush_zombies.rb +38 -0
- data/lib/redis_queued_locks/swarm/zombie_info.rb +42 -0
- data/lib/redis_queued_locks/version.rb +1 -1
- data/rbs_collection.lock.yaml +10 -2
- data/rbs_collection.yaml +0 -2
- data/sig/redis_queued_locks/acquirer/acquire_lock/dequeue_from_lock_queue/log_visitor.rbs +2 -1
- data/sig/redis_queued_locks/acquirer/acquire_lock/dequeue_from_lock_queue.rbs +0 -1
- data/sig/redis_queued_locks/acquirer/acquire_lock/instr_visitor.rbs +5 -0
- data/sig/redis_queued_locks/acquirer/acquire_lock/log_visitor.rbs +12 -6
- data/sig/redis_queued_locks/acquirer/acquire_lock/try_to_lock/log_visitor.rbs +74 -7
- data/sig/redis_queued_locks/acquirer/acquire_lock/try_to_lock.rbs +4 -2
- data/sig/redis_queued_locks/acquirer/acquire_lock/yield_expire.rbs +3 -0
- data/sig/redis_queued_locks/acquirer/acquire_lock/yield_with_expire/log_visitor.rbs +4 -2
- data/sig/redis_queued_locks/acquirer/extend_lock_ttl.rbs +19 -1
- data/sig/redis_queued_locks/acquirer/lock_info.rbs +9 -1
- data/sig/redis_queued_locks/acquirer/locks.rbs +10 -1
- data/sig/redis_queued_locks/acquirer/queue_info.rbs +2 -4
- data/sig/redis_queued_locks/acquirer/queues.rbs +1 -1
- data/sig/redis_queued_locks/acquirer/release_lock.rbs +8 -1
- data/sig/redis_queued_locks/acquirer/release_read_lock.rbs +44 -0
- data/sig/redis_queued_locks/client.rbs +22 -2
- data/sig/redis_queued_locks/resource.rbs +9 -2
- data/sig/redis_queued_locks/swarm/zombie_info.rbs +5 -0
- metadata +4 -1
|
@@ -14,11 +14,12 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
14
14
|
# @param acquirer_id [String]
|
|
15
15
|
# @param host_id [String]
|
|
16
16
|
# @param access_strategy [Symbol]
|
|
17
|
+
# @param rw_mode [Symbol]
|
|
17
18
|
# @return [void]
|
|
18
19
|
#
|
|
19
20
|
# @api private
|
|
20
21
|
# @since 1.7.0
|
|
21
|
-
# @version 1.
|
|
22
|
+
# @version 1.18.0
|
|
22
23
|
def start(
|
|
23
24
|
logger,
|
|
24
25
|
log_sampled,
|
|
@@ -27,7 +28,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
27
28
|
queue_ttl,
|
|
28
29
|
acquirer_id,
|
|
29
30
|
host_id,
|
|
30
|
-
access_strategy
|
|
31
|
+
access_strategy,
|
|
32
|
+
rw_mode
|
|
31
33
|
)
|
|
32
34
|
return unless log_sampled && log_lock_try
|
|
33
35
|
|
|
@@ -37,7 +39,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
37
39
|
"queue_ttl => #{queue_ttl} " \
|
|
38
40
|
"acq_id => '#{acquirer_id}' " \
|
|
39
41
|
"hst_id => '#{host_id}' " \
|
|
40
|
-
"acs_strat => '#{access_strategy}'"
|
|
42
|
+
"acs_strat => '#{access_strategy}' " \
|
|
43
|
+
"rw_mode => '#{rw_mode}'"
|
|
41
44
|
end rescue nil
|
|
42
45
|
end
|
|
43
46
|
|
|
@@ -49,11 +52,12 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
49
52
|
# @param acquirer_id [String]
|
|
50
53
|
# @param host_id [String]
|
|
51
54
|
# @param access_strategy [Symbol]
|
|
55
|
+
# @param rw_mode [Symbol]
|
|
52
56
|
# @return [void]
|
|
53
57
|
#
|
|
54
58
|
# @api private
|
|
55
59
|
# @since 1.7.0
|
|
56
|
-
# @version 1.
|
|
60
|
+
# @version 1.18.0
|
|
57
61
|
def rconn_fetched(
|
|
58
62
|
logger,
|
|
59
63
|
log_sampled,
|
|
@@ -62,7 +66,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
62
66
|
queue_ttl,
|
|
63
67
|
acquirer_id,
|
|
64
68
|
host_id,
|
|
65
|
-
access_strategy
|
|
69
|
+
access_strategy,
|
|
70
|
+
rw_mode
|
|
66
71
|
)
|
|
67
72
|
return unless log_sampled && log_lock_try
|
|
68
73
|
|
|
@@ -72,7 +77,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
72
77
|
"queue_ttl => #{queue_ttl} " \
|
|
73
78
|
"acq_id => '#{acquirer_id}' " \
|
|
74
79
|
"hst_id => '#{host_id}' " \
|
|
75
|
-
"acs_strat => '#{access_strategy}'"
|
|
80
|
+
"acs_strat => '#{access_strategy}' " \
|
|
81
|
+
"rw_mode => '#{rw_mode}'"
|
|
76
82
|
end rescue nil
|
|
77
83
|
end
|
|
78
84
|
|
|
@@ -84,11 +90,12 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
84
90
|
# @param acquirer_id [String]
|
|
85
91
|
# @param host_id [String]
|
|
86
92
|
# @param access_strategy [Symbol]
|
|
93
|
+
# @param rw_mode [Symbol]
|
|
87
94
|
# @return [void]
|
|
88
95
|
#
|
|
89
96
|
# @api private
|
|
90
97
|
# @since 1.7.0
|
|
91
|
-
# @version 1.
|
|
98
|
+
# @version 1.18.0
|
|
92
99
|
def same_process_conflict_detected(
|
|
93
100
|
logger,
|
|
94
101
|
log_sampled,
|
|
@@ -97,7 +104,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
97
104
|
queue_ttl,
|
|
98
105
|
acquirer_id,
|
|
99
106
|
host_id,
|
|
100
|
-
access_strategy
|
|
107
|
+
access_strategy,
|
|
108
|
+
rw_mode
|
|
101
109
|
)
|
|
102
110
|
return unless log_sampled && log_lock_try
|
|
103
111
|
|
|
@@ -107,7 +115,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
107
115
|
"queue_ttl => #{queue_ttl} " \
|
|
108
116
|
"acq_id => '#{acquirer_id}' " \
|
|
109
117
|
"hst_id => '#{host_id}' " \
|
|
110
|
-
"acs_strat => '#{access_strategy}'"
|
|
118
|
+
"acs_strat => '#{access_strategy}' " \
|
|
119
|
+
"rw_mode => '#{rw_mode}'"
|
|
111
120
|
end rescue nil
|
|
112
121
|
end
|
|
113
122
|
|
|
@@ -119,12 +128,13 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
119
128
|
# @param acquirer_id [String]
|
|
120
129
|
# @param host_id [String]
|
|
121
130
|
# @param access_strategy [Symbol]
|
|
131
|
+
# @param rw_mode [Symbol]
|
|
122
132
|
# @param sp_conflict_status [Symbol]
|
|
123
133
|
# @return [void]
|
|
124
134
|
#
|
|
125
135
|
# @api private
|
|
126
136
|
# @since 1.7.0
|
|
127
|
-
# @version 1.
|
|
137
|
+
# @version 1.18.0
|
|
128
138
|
def same_process_conflict_analyzed(
|
|
129
139
|
logger,
|
|
130
140
|
log_sampled,
|
|
@@ -134,6 +144,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
134
144
|
acquirer_id,
|
|
135
145
|
host_id,
|
|
136
146
|
access_strategy,
|
|
147
|
+
rw_mode,
|
|
137
148
|
sp_conflict_status
|
|
138
149
|
)
|
|
139
150
|
return unless log_sampled && log_lock_try
|
|
@@ -145,6 +156,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
145
156
|
"acq_id => '#{acquirer_id}' " \
|
|
146
157
|
"hst_id => '#{host_id}' " \
|
|
147
158
|
"acs_strat => '#{access_strategy}' " \
|
|
159
|
+
"rw_mode => '#{rw_mode}' " \
|
|
148
160
|
"spc_status => '#{sp_conflict_status}'"
|
|
149
161
|
end rescue nil
|
|
150
162
|
end
|
|
@@ -157,6 +169,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
157
169
|
# @param acquirer_id [String]
|
|
158
170
|
# @param host_id [String]
|
|
159
171
|
# @param access_strategy [Symbol]
|
|
172
|
+
# @param rw_mode [Symbol]
|
|
160
173
|
# @param sp_conflict_status [Symbol]
|
|
161
174
|
# @param ttl [Integer]
|
|
162
175
|
# @param spc_processed_timestamp [Float]
|
|
@@ -164,7 +177,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
164
177
|
#
|
|
165
178
|
# @api private
|
|
166
179
|
# @since 1.7.0
|
|
167
|
-
# @version 1.
|
|
180
|
+
# @version 1.18.0
|
|
168
181
|
def reentrant_lock__extend_and_work_through(
|
|
169
182
|
logger,
|
|
170
183
|
log_sampled,
|
|
@@ -174,6 +187,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
174
187
|
acquirer_id,
|
|
175
188
|
host_id,
|
|
176
189
|
access_strategy,
|
|
190
|
+
rw_mode,
|
|
177
191
|
sp_conflict_status,
|
|
178
192
|
ttl,
|
|
179
193
|
spc_processed_timestamp
|
|
@@ -187,6 +201,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
187
201
|
"acq_id => '#{acquirer_id}' " \
|
|
188
202
|
"hst_id => '#{host_id}' " \
|
|
189
203
|
"acs_strat => '#{access_strategy}' " \
|
|
204
|
+
"rw_mode => '#{rw_mode}' " \
|
|
190
205
|
"spc_status => '#{sp_conflict_status}' " \
|
|
191
206
|
"last_ext_ttl => #{ttl} " \
|
|
192
207
|
"last_ext_ts => '#{spc_processed_timestamp}'"
|
|
@@ -201,13 +216,14 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
201
216
|
# @param acquirer_id [String]
|
|
202
217
|
# @param host_id [String]
|
|
203
218
|
# @param access_strategy [Symbol]
|
|
219
|
+
# @param rw_mode [Symbol]
|
|
204
220
|
# @param sp_conflict_status [Symbol]
|
|
205
221
|
# @param spc_processed_timestamp [Float]
|
|
206
222
|
# @return [void]
|
|
207
223
|
#
|
|
208
224
|
# @api private
|
|
209
225
|
# @since 1.7.0
|
|
210
|
-
# @version 1.
|
|
226
|
+
# @version 1.18.0
|
|
211
227
|
def reentrant_lock__work_through(
|
|
212
228
|
logger,
|
|
213
229
|
log_sampled,
|
|
@@ -217,6 +233,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
217
233
|
acquirer_id,
|
|
218
234
|
host_id,
|
|
219
235
|
access_strategy,
|
|
236
|
+
rw_mode,
|
|
220
237
|
sp_conflict_status,
|
|
221
238
|
spc_processed_timestamp
|
|
222
239
|
)
|
|
@@ -229,6 +246,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
229
246
|
"acq_id => '#{acquirer_id}' " \
|
|
230
247
|
"hst_id => '#{host_id}' " \
|
|
231
248
|
"acs_strat => '#{access_strategy}' " \
|
|
249
|
+
"rw_mode => '#{rw_mode}' " \
|
|
232
250
|
"spc_status => '#{sp_conflict_status}' " \
|
|
233
251
|
"last_spc_ts => '#{spc_processed_timestamp}'"
|
|
234
252
|
end rescue nil
|
|
@@ -242,13 +260,14 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
242
260
|
# @param acquirer_id [String]
|
|
243
261
|
# @param host_id [String]
|
|
244
262
|
# @param access_strategy [Symbol]
|
|
263
|
+
# @param rw_mode [Symbol]
|
|
245
264
|
# @param sp_conflict_status [Symbol]
|
|
246
265
|
# @param spc_processed_timestamp [Float]
|
|
247
266
|
# @return [void]
|
|
248
267
|
#
|
|
249
268
|
# @api private
|
|
250
269
|
# @since 1.7.0
|
|
251
|
-
# @version 1.
|
|
270
|
+
# @version 1.18.0
|
|
252
271
|
def single_process_lock_conflict__dead_lock(
|
|
253
272
|
logger,
|
|
254
273
|
log_sampled,
|
|
@@ -258,6 +277,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
258
277
|
acquirer_id,
|
|
259
278
|
host_id,
|
|
260
279
|
access_strategy,
|
|
280
|
+
rw_mode,
|
|
261
281
|
sp_conflict_status,
|
|
262
282
|
spc_processed_timestamp
|
|
263
283
|
)
|
|
@@ -270,6 +290,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
270
290
|
"acq_id => '#{acquirer_id}' " \
|
|
271
291
|
"hst_id => '#{host_id}' " \
|
|
272
292
|
"acs_strat => '#{access_strategy}' " \
|
|
293
|
+
"rw_mode => '#{rw_mode}' " \
|
|
273
294
|
"spc_status => '#{sp_conflict_status}' " \
|
|
274
295
|
"last_spc_ts => '#{spc_processed_timestamp}'"
|
|
275
296
|
end rescue nil
|
|
@@ -283,11 +304,55 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
283
304
|
# @param acquirer_id [String]
|
|
284
305
|
# @param host_id [String]
|
|
285
306
|
# @param access_strategy [Symbol]
|
|
307
|
+
# @param rw_mode [Symbol]
|
|
308
|
+
# @param sp_conflict_status [Symbol]
|
|
309
|
+
# @param spc_processed_timestamp [Float]
|
|
310
|
+
# @return [void]
|
|
311
|
+
#
|
|
312
|
+
# @api private
|
|
313
|
+
# @since 1.18.0
|
|
314
|
+
def single_process_lock_conflict__lock_upgrade(
|
|
315
|
+
logger,
|
|
316
|
+
log_sampled,
|
|
317
|
+
log_lock_try,
|
|
318
|
+
lock_key,
|
|
319
|
+
queue_ttl,
|
|
320
|
+
acquirer_id,
|
|
321
|
+
host_id,
|
|
322
|
+
access_strategy,
|
|
323
|
+
rw_mode,
|
|
324
|
+
sp_conflict_status,
|
|
325
|
+
spc_processed_timestamp
|
|
326
|
+
)
|
|
327
|
+
return unless log_sampled && log_lock_try
|
|
328
|
+
|
|
329
|
+
logger.debug do
|
|
330
|
+
"[redis_queued_locks.try_lock.single_process_lock_conflict__lock_upgrade] " \
|
|
331
|
+
"lock_key => '#{lock_key}' " \
|
|
332
|
+
"queue_ttl => #{queue_ttl} " \
|
|
333
|
+
"acq_id => '#{acquirer_id}' " \
|
|
334
|
+
"hst_id => '#{host_id}' " \
|
|
335
|
+
"acs_strat => '#{access_strategy}' " \
|
|
336
|
+
"rw_mode => '#{rw_mode}' " \
|
|
337
|
+
"spc_status => '#{sp_conflict_status}' " \
|
|
338
|
+
"last_spc_ts => '#{spc_processed_timestamp}'"
|
|
339
|
+
end rescue nil
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# @param logger [::Logger,#debug]
|
|
343
|
+
# @param log_sampled [Boolean]
|
|
344
|
+
# @param log_lock_try [Boolean]
|
|
345
|
+
# @param lock_key [String]
|
|
346
|
+
# @param queue_ttl [Integer]
|
|
347
|
+
# @param acquirer_id [String]
|
|
348
|
+
# @param host_id [String]
|
|
349
|
+
# @param access_strategy [Symbol]
|
|
350
|
+
# @param rw_mode [Symbol]
|
|
286
351
|
# @return [void]
|
|
287
352
|
#
|
|
288
353
|
# @api private
|
|
289
354
|
# @since 1.7.0
|
|
290
|
-
# @version 1.
|
|
355
|
+
# @version 1.18.0
|
|
291
356
|
def acq_added_to_queue(
|
|
292
357
|
logger,
|
|
293
358
|
log_sampled,
|
|
@@ -296,7 +361,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
296
361
|
queue_ttl,
|
|
297
362
|
acquirer_id,
|
|
298
363
|
host_id,
|
|
299
|
-
access_strategy
|
|
364
|
+
access_strategy,
|
|
365
|
+
rw_mode
|
|
300
366
|
)
|
|
301
367
|
return unless log_sampled && log_lock_try
|
|
302
368
|
|
|
@@ -306,7 +372,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
306
372
|
"queue_ttl => #{queue_ttl} " \
|
|
307
373
|
"acq_id => '#{acquirer_id}' " \
|
|
308
374
|
"hst_id => '#{host_id}' " \
|
|
309
|
-
"acs_strat => '#{access_strategy}'"
|
|
375
|
+
"acs_strat => '#{access_strategy}' " \
|
|
376
|
+
"rw_mode => '#{rw_mode}'"
|
|
310
377
|
end rescue nil
|
|
311
378
|
end
|
|
312
379
|
|
|
@@ -318,11 +385,12 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
318
385
|
# @param acquirer_id [String]
|
|
319
386
|
# @param host_id [String]
|
|
320
387
|
# @param access_strategy [Symbol]
|
|
388
|
+
# @param rw_mode [Symbol]
|
|
321
389
|
# @return [void]
|
|
322
390
|
#
|
|
323
391
|
# @api private
|
|
324
392
|
# @since 1.7.0
|
|
325
|
-
# @version 1.
|
|
393
|
+
# @version 1.18.0
|
|
326
394
|
def remove_expired_acqs(
|
|
327
395
|
logger,
|
|
328
396
|
log_sampled,
|
|
@@ -331,7 +399,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
331
399
|
queue_ttl,
|
|
332
400
|
acquirer_id,
|
|
333
401
|
host_id,
|
|
334
|
-
access_strategy
|
|
402
|
+
access_strategy,
|
|
403
|
+
rw_mode
|
|
335
404
|
)
|
|
336
405
|
return unless log_sampled && log_lock_try
|
|
337
406
|
|
|
@@ -341,7 +410,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
341
410
|
"queue_ttl => #{queue_ttl} " \
|
|
342
411
|
"acq_id => '#{acquirer_id}' " \
|
|
343
412
|
"hst_id => '#{host_id}' " \
|
|
344
|
-
"acs_strat => '#{access_strategy}'"
|
|
413
|
+
"acs_strat => '#{access_strategy}' " \
|
|
414
|
+
"rw_mode => '#{rw_mode}'"
|
|
345
415
|
end rescue nil
|
|
346
416
|
end
|
|
347
417
|
|
|
@@ -353,12 +423,13 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
353
423
|
# @param acquirer_id [String]
|
|
354
424
|
# @param host_id [String]
|
|
355
425
|
# @param access_strategy [Symbol]
|
|
426
|
+
# @param rw_mode [Symbol]
|
|
356
427
|
# @param waiting_acquirer [String,NilClass]
|
|
357
428
|
# @return [void]
|
|
358
429
|
#
|
|
359
430
|
# @api private
|
|
360
431
|
# @since 1.7.0
|
|
361
|
-
# @version 1.
|
|
432
|
+
# @version 1.18.0
|
|
362
433
|
def get_first_from_queue(
|
|
363
434
|
logger,
|
|
364
435
|
log_sampled,
|
|
@@ -368,6 +439,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
368
439
|
acquirer_id,
|
|
369
440
|
host_id,
|
|
370
441
|
access_strategy,
|
|
442
|
+
rw_mode,
|
|
371
443
|
waiting_acquirer
|
|
372
444
|
)
|
|
373
445
|
return unless log_sampled && log_lock_try
|
|
@@ -379,6 +451,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
379
451
|
"acq_id => '#{acquirer_id}' " \
|
|
380
452
|
"hst_id => '#{host_id}' " \
|
|
381
453
|
"acs_strat => '#{access_strategy}' " \
|
|
454
|
+
"rw_mode => '#{rw_mode}' " \
|
|
382
455
|
"first_acq_id_in_queue => '#{waiting_acquirer}'"
|
|
383
456
|
end rescue nil
|
|
384
457
|
end
|
|
@@ -391,11 +464,12 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
391
464
|
# @param acquirer_id [String]
|
|
392
465
|
# @param host_id [String]
|
|
393
466
|
# @param access_strategy [Symbol]
|
|
467
|
+
# @param rw_mode [Symbol]
|
|
394
468
|
# @return [void]
|
|
395
469
|
#
|
|
396
470
|
# @api private
|
|
397
471
|
# @since 1.7.0
|
|
398
|
-
# @version 1.
|
|
472
|
+
# @version 1.18.0
|
|
399
473
|
def exit__queue_ttl_reached(
|
|
400
474
|
logger,
|
|
401
475
|
log_sampled,
|
|
@@ -404,7 +478,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
404
478
|
queue_ttl,
|
|
405
479
|
acquirer_id,
|
|
406
480
|
host_id,
|
|
407
|
-
access_strategy
|
|
481
|
+
access_strategy,
|
|
482
|
+
rw_mode
|
|
408
483
|
)
|
|
409
484
|
return unless log_sampled && log_lock_try
|
|
410
485
|
|
|
@@ -414,7 +489,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
414
489
|
"queue_ttl => #{queue_ttl} " \
|
|
415
490
|
"acq_id => '#{acquirer_id}' " \
|
|
416
491
|
"hst_id => '#{host_id}' " \
|
|
417
|
-
"acs_strat => '#{access_strategy}'"
|
|
492
|
+
"acs_strat => '#{access_strategy}' " \
|
|
493
|
+
"rw_mode => '#{rw_mode}'"
|
|
418
494
|
end rescue nil
|
|
419
495
|
end
|
|
420
496
|
|
|
@@ -426,13 +502,14 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
426
502
|
# @param acquirer_id [String]
|
|
427
503
|
# @param host_id [String]
|
|
428
504
|
# @param access_strategy [Symbol]
|
|
505
|
+
# @param rw_mode [Symbol]
|
|
429
506
|
# @param waiting_acquirer [String,NilClass]
|
|
430
507
|
# @param current_lock_data [Hash<String,Any>]
|
|
431
508
|
# @return [void]
|
|
432
509
|
#
|
|
433
510
|
# @api private
|
|
434
511
|
# @since 1.7.0
|
|
435
|
-
# @version 1.
|
|
512
|
+
# @version 1.18.0
|
|
436
513
|
def exit__no_first(
|
|
437
514
|
logger,
|
|
438
515
|
log_sampled,
|
|
@@ -442,6 +519,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
442
519
|
acquirer_id,
|
|
443
520
|
host_id,
|
|
444
521
|
access_strategy,
|
|
522
|
+
rw_mode,
|
|
445
523
|
waiting_acquirer,
|
|
446
524
|
current_lock_data
|
|
447
525
|
)
|
|
@@ -454,6 +532,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
454
532
|
"acq_id => '#{acquirer_id}' " \
|
|
455
533
|
"hst_id => '#{host_id}' " \
|
|
456
534
|
"acs_strat => '#{access_strategy}' " \
|
|
535
|
+
"rw_mode => '#{rw_mode}' " \
|
|
457
536
|
"first_acq_id_in_queue => '#{waiting_acquirer}' " \
|
|
458
537
|
"<current_lock_data> => <<#{current_lock_data}>>"
|
|
459
538
|
end rescue nil
|
|
@@ -467,6 +546,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
467
546
|
# @param acquirer_id [String]
|
|
468
547
|
# @param host_id [String]
|
|
469
548
|
# @param access_strategy [Symbol]
|
|
549
|
+
# @param rw_mode [Symbol]
|
|
470
550
|
# @param waiting_acquirer [String,NilClass]
|
|
471
551
|
# @param locked_by_acquirer [String]
|
|
472
552
|
# @param current_lock_data [Hash<String,Any>]
|
|
@@ -474,7 +554,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
474
554
|
#
|
|
475
555
|
# @api private
|
|
476
556
|
# @since 1.7.0
|
|
477
|
-
# @version 1.
|
|
557
|
+
# @version 1.18.0
|
|
478
558
|
def exit__lock_still_obtained(
|
|
479
559
|
logger,
|
|
480
560
|
log_sampled,
|
|
@@ -484,6 +564,7 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
484
564
|
acquirer_id,
|
|
485
565
|
host_id,
|
|
486
566
|
access_strategy,
|
|
567
|
+
rw_mode,
|
|
487
568
|
waiting_acquirer,
|
|
488
569
|
locked_by_acquirer,
|
|
489
570
|
current_lock_data
|
|
@@ -497,12 +578,57 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
497
578
|
"acq_id => '#{acquirer_id}' " \
|
|
498
579
|
"hst_id => '#{host_id}' " \
|
|
499
580
|
"acs_strat => '#{access_strategy}' " \
|
|
581
|
+
"rw_mode => '#{rw_mode}' " \
|
|
500
582
|
"first_acq_id_in_queue => '#{waiting_acquirer}' " \
|
|
501
583
|
"locked_by_acq_id => '#{locked_by_acquirer}' " \
|
|
502
584
|
"<current_lock_data> => <<#{current_lock_data}>>"
|
|
503
585
|
end rescue nil
|
|
504
586
|
end
|
|
505
587
|
|
|
588
|
+
# Read lock request is blocked by an earlier write lock request (FIFO between modes).
|
|
589
|
+
#
|
|
590
|
+
# @param logger [::Logger,#debug]
|
|
591
|
+
# @param log_sampled [Boolean]
|
|
592
|
+
# @param log_lock_try [Boolean]
|
|
593
|
+
# @param lock_key [String]
|
|
594
|
+
# @param queue_ttl [Integer]
|
|
595
|
+
# @param acquirer_id [String]
|
|
596
|
+
# @param host_id [String]
|
|
597
|
+
# @param access_strategy [Symbol]
|
|
598
|
+
# @param rw_mode [Symbol]
|
|
599
|
+
# @param ahead_acquirer [String]
|
|
600
|
+
# @return [void]
|
|
601
|
+
#
|
|
602
|
+
# @api private
|
|
603
|
+
# @since 1.18.0
|
|
604
|
+
def exit__write_request_ahead(
|
|
605
|
+
logger,
|
|
606
|
+
log_sampled,
|
|
607
|
+
log_lock_try,
|
|
608
|
+
lock_key,
|
|
609
|
+
queue_ttl,
|
|
610
|
+
acquirer_id,
|
|
611
|
+
host_id,
|
|
612
|
+
access_strategy,
|
|
613
|
+
rw_mode,
|
|
614
|
+
ahead_acquirer
|
|
615
|
+
)
|
|
616
|
+
return unless log_sampled && log_lock_try
|
|
617
|
+
|
|
618
|
+
logger.debug do
|
|
619
|
+
"[redis_queued_locks.try_lock.exit__write_request_ahead] " \
|
|
620
|
+
"lock_key => '#{lock_key}' " \
|
|
621
|
+
"queue_ttl => #{queue_ttl} " \
|
|
622
|
+
"acq_id => '#{acquirer_id}' " \
|
|
623
|
+
"hst_id => '#{host_id}' " \
|
|
624
|
+
"acs_strat => '#{access_strategy}' " \
|
|
625
|
+
"rw_mode => '#{rw_mode}' " \
|
|
626
|
+
"ahead_acq_id => '#{ahead_acquirer}'"
|
|
627
|
+
end rescue nil
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
# Write lock request is blocked by an earlier read lock request (FIFO between modes).
|
|
631
|
+
#
|
|
506
632
|
# @param logger [::Logger,#debug]
|
|
507
633
|
# @param log_sampled [Boolean]
|
|
508
634
|
# @param log_lock_try [Boolean]
|
|
@@ -511,11 +637,95 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
511
637
|
# @param acquirer_id [String]
|
|
512
638
|
# @param host_id [String]
|
|
513
639
|
# @param access_strategy [Symbol]
|
|
640
|
+
# @param rw_mode [Symbol]
|
|
641
|
+
# @param ahead_acquirer [String]
|
|
642
|
+
# @return [void]
|
|
643
|
+
#
|
|
644
|
+
# @api private
|
|
645
|
+
# @since 1.18.0
|
|
646
|
+
def exit__read_request_ahead(
|
|
647
|
+
logger,
|
|
648
|
+
log_sampled,
|
|
649
|
+
log_lock_try,
|
|
650
|
+
lock_key,
|
|
651
|
+
queue_ttl,
|
|
652
|
+
acquirer_id,
|
|
653
|
+
host_id,
|
|
654
|
+
access_strategy,
|
|
655
|
+
rw_mode,
|
|
656
|
+
ahead_acquirer
|
|
657
|
+
)
|
|
658
|
+
return unless log_sampled && log_lock_try
|
|
659
|
+
|
|
660
|
+
logger.debug do
|
|
661
|
+
"[redis_queued_locks.try_lock.exit__read_request_ahead] " \
|
|
662
|
+
"lock_key => '#{lock_key}' " \
|
|
663
|
+
"queue_ttl => #{queue_ttl} " \
|
|
664
|
+
"acq_id => '#{acquirer_id}' " \
|
|
665
|
+
"hst_id => '#{host_id}' " \
|
|
666
|
+
"acs_strat => '#{access_strategy}' " \
|
|
667
|
+
"rw_mode => '#{rw_mode}' " \
|
|
668
|
+
"ahead_acq_id => '#{ahead_acquirer}'"
|
|
669
|
+
end rescue nil
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
# The lock is still held by readers: write lock requests wait for all readers,
|
|
673
|
+
# read lock requests wait for their own (same acquirer) read lock (see `:wait_for_lock`).
|
|
674
|
+
#
|
|
675
|
+
# @param logger [::Logger,#debug]
|
|
676
|
+
# @param log_sampled [Boolean]
|
|
677
|
+
# @param log_lock_try [Boolean]
|
|
678
|
+
# @param lock_key [String]
|
|
679
|
+
# @param queue_ttl [Integer]
|
|
680
|
+
# @param acquirer_id [String]
|
|
681
|
+
# @param host_id [String]
|
|
682
|
+
# @param access_strategy [Symbol]
|
|
683
|
+
# @param rw_mode [Symbol]
|
|
684
|
+
# @param waiting_acquirer [String,NilClass]
|
|
685
|
+
# @return [void]
|
|
686
|
+
#
|
|
687
|
+
# @api private
|
|
688
|
+
# @since 1.18.0
|
|
689
|
+
def exit__read_lock_still_obtained(
|
|
690
|
+
logger,
|
|
691
|
+
log_sampled,
|
|
692
|
+
log_lock_try,
|
|
693
|
+
lock_key,
|
|
694
|
+
queue_ttl,
|
|
695
|
+
acquirer_id,
|
|
696
|
+
host_id,
|
|
697
|
+
access_strategy,
|
|
698
|
+
rw_mode,
|
|
699
|
+
waiting_acquirer
|
|
700
|
+
)
|
|
701
|
+
return unless log_sampled && log_lock_try
|
|
702
|
+
|
|
703
|
+
logger.debug do
|
|
704
|
+
"[redis_queued_locks.try_lock.exit__read_lock_still_obtained] " \
|
|
705
|
+
"lock_key => '#{lock_key}' " \
|
|
706
|
+
"queue_ttl => #{queue_ttl} " \
|
|
707
|
+
"acq_id => '#{acquirer_id}' " \
|
|
708
|
+
"hst_id => '#{host_id}' " \
|
|
709
|
+
"acs_strat => '#{access_strategy}' " \
|
|
710
|
+
"rw_mode => '#{rw_mode}' " \
|
|
711
|
+
"first_acq_id_in_queue => '#{waiting_acquirer}'"
|
|
712
|
+
end rescue nil
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
# @param logger [::Logger,#debug]
|
|
716
|
+
# @param log_sampled [Boolean]
|
|
717
|
+
# @param log_lock_try [Boolean]
|
|
718
|
+
# @param lock_key [String]
|
|
719
|
+
# @param queue_ttl [Integer]
|
|
720
|
+
# @param acquirer_id [String]
|
|
721
|
+
# @param host_id [String]
|
|
722
|
+
# @param access_strategy [Symbol]
|
|
723
|
+
# @param rw_mode [Symbol]
|
|
514
724
|
# @return [void]
|
|
515
725
|
#
|
|
516
726
|
# @api private
|
|
517
727
|
# @since 1.7.0
|
|
518
|
-
# @version 1.
|
|
728
|
+
# @version 1.18.0
|
|
519
729
|
def obtain__free_to_acquire(
|
|
520
730
|
logger,
|
|
521
731
|
log_sampled,
|
|
@@ -524,7 +734,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
524
734
|
queue_ttl,
|
|
525
735
|
acquirer_id,
|
|
526
736
|
host_id,
|
|
527
|
-
access_strategy
|
|
737
|
+
access_strategy,
|
|
738
|
+
rw_mode
|
|
528
739
|
)
|
|
529
740
|
return unless log_sampled && log_lock_try
|
|
530
741
|
|
|
@@ -534,7 +745,8 @@ module RedisQueuedLocks::Acquirer::AcquireLock::TryToLock::LogVisitor
|
|
|
534
745
|
"queue_ttl => #{queue_ttl} " \
|
|
535
746
|
"acq_id => '#{acquirer_id}' " \
|
|
536
747
|
"hst_id => '#{host_id}' " \
|
|
537
|
-
"acs_strat => '#{access_strategy}'"
|
|
748
|
+
"acs_strat => '#{access_strategy}' " \
|
|
749
|
+
"rw_mode => '#{rw_mode}'"
|
|
538
750
|
end rescue nil
|
|
539
751
|
end
|
|
540
752
|
end
|