redis_queued_locks 1.19.0 → 1.21.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 +96 -23
- data/.claude/rules/acquirer.md +39 -20
- data/.claude/rules/arguments.md +3 -2
- data/.claude/rules/git.md +3 -2
- data/.claude/rules/logic.md +32 -8
- data/.claude/rules/swarm.md +14 -9
- data/.claude/rules/tests.md +12 -3
- data/.claude/rules/type-checking.md +2 -1
- data/.claude/rules/visitors.md +10 -11
- data/.claude/skills/rql-code-review/SKILL.md +386 -0
- data/.claude/skills/rql-code-review/templates/report.en.md +31 -0
- data/.claude/skills/rql-code-review/templates/report.ru.md +31 -0
- data/CHANGELOG.md +194 -0
- data/CLAUDE.md +6 -3
- data/README.md +502 -92
- data/lib/redis_queued_locks/acquirer/acquire_lock/dequeue_from_lock_queue/log_visitor.rb +1 -0
- data/lib/redis_queued_locks/acquirer/acquire_lock/instr_visitor.rb +42 -0
- data/lib/redis_queued_locks/acquirer/acquire_lock/log_visitor.rb +45 -0
- data/lib/redis_queued_locks/acquirer/acquire_lock/try_to_lock/log_visitor.rb +1 -0
- data/lib/redis_queued_locks/acquirer/acquire_lock/try_to_lock.rb +695 -128
- data/lib/redis_queued_locks/acquirer/acquire_lock/with_acq_timeout.rb +2 -2
- data/lib/redis_queued_locks/acquirer/acquire_lock/yield_expire/log_visitor.rb +1 -0
- data/lib/redis_queued_locks/acquirer/acquire_lock/yield_expire.rb +8 -6
- data/lib/redis_queued_locks/acquirer/acquire_lock.rb +134 -26
- data/lib/redis_queued_locks/acquirer/clear_dead_requests.rb +229 -24
- data/lib/redis_queued_locks/acquirer/extend_lock_ttl.rb +189 -18
- data/lib/redis_queued_locks/acquirer/is_locked.rb +0 -1
- data/lib/redis_queued_locks/acquirer/is_queued.rb +0 -1
- data/lib/redis_queued_locks/acquirer/keys.rb +151 -7
- data/lib/redis_queued_locks/acquirer/lock_info.rb +39 -41
- data/lib/redis_queued_locks/acquirer/lock_series_poc/instr_visitor.rb +3 -2
- data/lib/redis_queued_locks/acquirer/lock_series_poc/log_visitor.rb +5 -4
- data/lib/redis_queued_locks/acquirer/lock_series_poc.rb +79 -20
- data/lib/redis_queued_locks/acquirer/locks.rb +212 -83
- data/lib/redis_queued_locks/acquirer/queue_info.rb +11 -18
- data/lib/redis_queued_locks/acquirer/queues.rb +123 -50
- data/lib/redis_queued_locks/acquirer/reindex_locks.rb +253 -0
- data/lib/redis_queued_locks/acquirer/release_all_locks.rb +177 -61
- data/lib/redis_queued_locks/acquirer/release_lock.rb +84 -25
- data/lib/redis_queued_locks/acquirer/release_locks_of.rb +274 -70
- data/lib/redis_queued_locks/acquirer/release_read_lock.rb +22 -3
- data/lib/redis_queued_locks/acquirer.rb +1 -0
- data/lib/redis_queued_locks/client.rb +164 -36
- data/lib/redis_queued_locks/config.rb +16 -13
- data/lib/redis_queued_locks/errors.rb +34 -4
- data/lib/redis_queued_locks/instrument/sampler.rb +4 -7
- data/lib/redis_queued_locks/logging/sampler.rb +4 -8
- data/lib/redis_queued_locks/resource.rb +113 -6
- data/lib/redis_queued_locks/swarm/flush_zombies.rb +333 -61
- data/lib/redis_queued_locks/swarm/redis_client_builder.rb +8 -4
- data/lib/redis_queued_locks/swarm/swarm_element/threaded.rb +3 -2
- data/lib/redis_queued_locks/swarm/zombie_info.rb +203 -53
- data/lib/redis_queued_locks/swarm.rb +97 -5
- data/lib/redis_queued_locks/utilities.rb +1 -1
- data/lib/redis_queued_locks/version.rb +2 -2
- data/sig/redis_queued_locks/acquirer/acquire_lock/instr_visitor.rbs +14 -0
- data/sig/redis_queued_locks/acquirer/acquire_lock/log_visitor.rbs +13 -0
- data/sig/redis_queued_locks/acquirer/acquire_lock/try_to_lock.rbs +107 -1
- data/sig/redis_queued_locks/acquirer/acquire_lock/yield_expire.rbs +3 -3
- data/sig/redis_queued_locks/acquirer/acquire_lock.rbs +3 -1
- data/sig/redis_queued_locks/acquirer/clear_dead_requests.rbs +19 -1
- data/sig/redis_queued_locks/acquirer/extend_lock_ttl.rbs +20 -4
- data/sig/redis_queued_locks/acquirer/keys.rbs +11 -1
- data/sig/redis_queued_locks/acquirer/locks.rbs +15 -6
- data/sig/redis_queued_locks/acquirer/queues.rbs +9 -2
- data/sig/redis_queued_locks/acquirer/reindex_locks.rbs +52 -0
- data/sig/redis_queued_locks/acquirer/release_all_locks.rbs +8 -1
- data/sig/redis_queued_locks/acquirer/release_lock.rbs +6 -3
- data/sig/redis_queued_locks/acquirer/release_locks_of.rbs +20 -1
- data/sig/redis_queued_locks/acquirer/release_read_lock.rbs +1 -1
- data/sig/redis_queued_locks/client.rbs +21 -2
- data/sig/redis_queued_locks/errors.rbs +5 -2
- data/sig/redis_queued_locks/instrument/sampler.rbs +0 -2
- data/sig/redis_queued_locks/logging/sampler.rbs +0 -2
- data/sig/redis_queued_locks/resource.rbs +7 -1
- data/sig/redis_queued_locks/swarm/flush_zombies.rbs +51 -1
- data/sig/redis_queued_locks/swarm/zombie_info.rbs +58 -7
- data/sig/vendor/redis_client.rbs +2 -0
- metadata +6 -1
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# @api private
|
|
4
4
|
# @since 1.7.0
|
|
5
|
+
# @version 1.21.0
|
|
6
|
+
# rubocop:disable Metrics/ModuleLength
|
|
5
7
|
module RedisQueuedLocks::Acquirer::AcquireLock::InstrVisitor
|
|
8
|
+
# rubocop:disable Metrics/ClassLength
|
|
6
9
|
class << self
|
|
7
10
|
# @param instrumenter [#notify]
|
|
8
11
|
# @param instr_sampled [Boolean]
|
|
@@ -172,5 +175,44 @@ module RedisQueuedLocks::Acquirer::AcquireLock::InstrVisitor
|
|
|
172
175
|
hold_time:, ttl:, acq_id:, hst_id:, ts:, lock_key:, rw_mode:, acq_time:, instrument:
|
|
173
176
|
}) rescue nil
|
|
174
177
|
end
|
|
178
|
+
|
|
179
|
+
# The lock is not obtained (the failure result of `#lock`/`#lock!`: the timeout, the retry
|
|
180
|
+
# limit, `fail_fast`, the dead lock or the lock upgrade conflict).
|
|
181
|
+
#
|
|
182
|
+
# @param instrumenter [#notify]
|
|
183
|
+
# @param instr_sampled [Boolean]
|
|
184
|
+
# @param lock_key [String]
|
|
185
|
+
# @param rw_mode [Symbol]
|
|
186
|
+
# @param ttl [Integer]
|
|
187
|
+
# @param acq_id [String]
|
|
188
|
+
# @param hst_id [String]
|
|
189
|
+
# @param ts [Numeric]
|
|
190
|
+
# @param acq_time [Numeric]
|
|
191
|
+
# @param result [Symbol] The failure result (`:timeout_reached`, `:retry_limit_reached`, ...).
|
|
192
|
+
# @param instrument [NilClass,Any]
|
|
193
|
+
# @return [void]
|
|
194
|
+
#
|
|
195
|
+
# @api private
|
|
196
|
+
# @since 1.21.0
|
|
197
|
+
def lock_obtaining_failed(
|
|
198
|
+
instrumenter,
|
|
199
|
+
instr_sampled,
|
|
200
|
+
lock_key,
|
|
201
|
+
rw_mode,
|
|
202
|
+
ttl,
|
|
203
|
+
acq_id,
|
|
204
|
+
hst_id,
|
|
205
|
+
ts,
|
|
206
|
+
acq_time,
|
|
207
|
+
result,
|
|
208
|
+
instrument
|
|
209
|
+
)
|
|
210
|
+
return unless instr_sampled
|
|
211
|
+
instrumenter.notify('redis_queued_locks.lock_obtaining_failed', {
|
|
212
|
+
lock_key:, rw_mode:, ttl:, acq_id:, hst_id:, ts:, acq_time:, result:, instrument:
|
|
213
|
+
}) rescue nil
|
|
214
|
+
end
|
|
175
215
|
end
|
|
216
|
+
# rubocop:enable Metrics/ClassLength
|
|
176
217
|
end
|
|
218
|
+
# rubocop:enable Metrics/ModuleLength
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# @api private
|
|
4
4
|
# @since 1.7.0
|
|
5
|
+
# @version 1.21.0
|
|
5
6
|
# rubocop:disable Metrics/ModuleLength
|
|
6
7
|
module RedisQueuedLocks::Acquirer::AcquireLock::LogVisitor
|
|
7
8
|
# rubocop:disable Metrics/ClassLength
|
|
@@ -230,6 +231,50 @@ module RedisQueuedLocks::Acquirer::AcquireLock::LogVisitor
|
|
|
230
231
|
"acq_time => #{acq_time} (ms)"
|
|
231
232
|
end rescue nil
|
|
232
233
|
end
|
|
234
|
+
|
|
235
|
+
# The lock is not obtained (the failure result of `#lock`/`#lock!`: the timeout, the retry
|
|
236
|
+
# limit, `fail_fast`, the dead lock or the lock upgrade conflict).
|
|
237
|
+
#
|
|
238
|
+
# @param logger [::Logger,#debug]
|
|
239
|
+
# @param log_sampled [Boolean]
|
|
240
|
+
# @param lock_key [String]
|
|
241
|
+
# @param queue_ttl [Integer]
|
|
242
|
+
# @param acquirer_id [String]
|
|
243
|
+
# @param host_id [String]
|
|
244
|
+
# @param acq_time [Numeric]
|
|
245
|
+
# @param access_strategy [Symbol]
|
|
246
|
+
# @param rw_mode [Symbol]
|
|
247
|
+
# @param result [Symbol] The failure result (`:timeout_reached`, `:retry_limit_reached`, ...).
|
|
248
|
+
# @return [void]
|
|
249
|
+
#
|
|
250
|
+
# @api private
|
|
251
|
+
# @since 1.21.0
|
|
252
|
+
def lock_obtaining_failed(
|
|
253
|
+
logger,
|
|
254
|
+
log_sampled,
|
|
255
|
+
lock_key,
|
|
256
|
+
queue_ttl,
|
|
257
|
+
acquirer_id,
|
|
258
|
+
host_id,
|
|
259
|
+
acq_time,
|
|
260
|
+
access_strategy,
|
|
261
|
+
rw_mode,
|
|
262
|
+
result
|
|
263
|
+
)
|
|
264
|
+
return unless log_sampled
|
|
265
|
+
|
|
266
|
+
logger.debug do
|
|
267
|
+
"[redis_queued_locks.lock_obtaining_failed] " \
|
|
268
|
+
"lock_key => '#{lock_key}' " \
|
|
269
|
+
"queue_ttl => #{queue_ttl} " \
|
|
270
|
+
"acq_id => '#{acquirer_id}' " \
|
|
271
|
+
"hst_id => '#{host_id}' " \
|
|
272
|
+
"acs_strat => '#{access_strategy}' " \
|
|
273
|
+
"rw_mode => '#{rw_mode}' " \
|
|
274
|
+
"acq_time => #{acq_time} (ms) " \
|
|
275
|
+
"result => '#{result}'"
|
|
276
|
+
end rescue nil
|
|
277
|
+
end
|
|
233
278
|
end
|
|
234
279
|
# rubocop:enable Metrics/ClassLength
|
|
235
280
|
end
|