redis-cluster-client 0.13.1 → 0.13.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2bc3348020af7012ab193ef18128f2cd37028c9225f1e7fa9555d3609ff92362
4
- data.tar.gz: 3c08890f1c50f297f0d60f0503bd268742bbcd242a32ac73df733496a013660e
3
+ metadata.gz: 96ad21a33077fd4809c93c017d75c5f0c257a666a741f329c1e61cf55f6c1cfe
4
+ data.tar.gz: 11c6d1f81a0b529682887266c0b1f0cfec305aff1f289b6d3a7b9aff6ed2151c
5
5
  SHA512:
6
- metadata.gz: 8a4036ef8be3c29c747abc7deb59698fbf5d5e581ab9913fd3e06d530a9bae7eba13a397929bb9e3eaf611d5ee01960378ffef54bc6f69706aaf672bc9f38f89
7
- data.tar.gz: '08897fd0c13bb175399b9118783e812f20555e0e09d021cf24fab236168d8ffd5a3ad4599f2ba1db56ccebaf501f9319c605940069c963f54b2268e1acad5dae'
6
+ metadata.gz: 0fa59538e10f1b37b9ef4c02173b4a3a58baf7abc41cd67d18c18f94fad236aac5ffa0e51bfffc33a17a8a116f0c49aef3744b54f91f9a032a7c57d04a0d0c38
7
+ data.tar.gz: 858ade5da894495cd5c72b036be79ba58775a78ce21184d3d0425d2ad30e2d73ad501a9580bbf1ed658eebe04fac8a24d8b9b2e2b8c37d719012df0ae7c027fa
@@ -122,11 +122,8 @@ class RedisClient
122
122
  end
123
123
 
124
124
  def determine_optional_key_position(command, option_name)
125
- command.each_with_index do |e, i|
126
- return i + 1 if e.to_s.downcase(:ascii) == option_name
127
- end
128
-
129
- 0
125
+ i = command.index { |v| v.to_s.casecmp(option_name).zero? }
126
+ i.nil? ? 0 : i + 1
130
127
  end
131
128
  end
132
129
  end
@@ -17,18 +17,57 @@ class RedisClient
17
17
  class Router
18
18
  ZERO_CURSOR_FOR_SCAN = '0'
19
19
  TSF = ->(f, x) { f.nil? ? x : f.call(x) }.curry
20
+ DEDICATED_ACTIONS = lambda do # rubocop:disable Metrics/BlockLength
21
+ action = Struct.new('RedisCommandRoutingAction', :method_name, :reply_transformer, keyword_init: true)
22
+ pick_first = ->(reply) { reply.first } # rubocop:disable Style/SymbolProc
23
+ multiple_key_action = action.new(method_name: :send_multiple_keys_command)
24
+ all_node_first_action = action.new(method_name: :send_command_to_all_nodes, reply_transformer: pick_first)
25
+ primary_first_action = action.new(method_name: :send_command_to_primaries, reply_transformer: pick_first)
26
+ not_supported_action = action.new(method_name: :fail_not_supported_command)
27
+ keyless_action = action.new(method_name: :fail_keyless_command)
28
+ {
29
+ 'ping' => action.new(method_name: :send_ping_command, reply_transformer: pick_first),
30
+ 'wait' => action.new(method_name: :send_wait_command),
31
+ 'keys' => action.new(method_name: :send_command_to_replicas, reply_transformer: ->(reply) { reply.flatten.sort_by(&:to_s) }),
32
+ 'dbsize' => action.new(method_name: :send_command_to_replicas, reply_transformer: ->(reply) { reply.select { |e| e.is_a?(Integer) }.sum }),
33
+ 'scan' => action.new(method_name: :send_scan_command),
34
+ 'lastsave' => action.new(method_name: :send_command_to_all_nodes, reply_transformer: ->(reply) { reply.sort_by(&:to_i) }),
35
+ 'role' => action.new(method_name: :send_command_to_all_nodes),
36
+ 'config' => action.new(method_name: :send_config_command),
37
+ 'client' => action.new(method_name: :send_client_command),
38
+ 'cluster' => action.new(method_name: :send_cluster_command),
39
+ 'memory' => action.new(method_name: :send_memory_command),
40
+ 'script' => action.new(method_name: :send_script_command),
41
+ 'pubsub' => action.new(method_name: :send_pubsub_command),
42
+ 'watch' => action.new(method_name: :send_watch_command),
43
+ 'mget' => multiple_key_action,
44
+ 'mset' => multiple_key_action,
45
+ 'del' => multiple_key_action,
46
+ 'acl' => all_node_first_action,
47
+ 'auth' => all_node_first_action,
48
+ 'bgrewriteaof' => all_node_first_action,
49
+ 'bgsave' => all_node_first_action,
50
+ 'quit' => all_node_first_action,
51
+ 'save' => all_node_first_action,
52
+ 'flushall' => primary_first_action,
53
+ 'flushdb' => primary_first_action,
54
+ 'readonly' => not_supported_action,
55
+ 'readwrite' => not_supported_action,
56
+ 'shutdown' => not_supported_action,
57
+ 'discard' => keyless_action,
58
+ 'exec' => keyless_action,
59
+ 'multi' => keyless_action,
60
+ 'unwatch' => keyless_action
61
+ }.each_with_object({}) do |(k, v), acc|
62
+ acc[k] = v
63
+ acc[k.upcase] = v
64
+ end
65
+ end.call.freeze
20
66
 
21
- private_constant :ZERO_CURSOR_FOR_SCAN, :TSF
67
+ private_constant :ZERO_CURSOR_FOR_SCAN, :TSF, :DEDICATED_ACTIONS
22
68
 
23
69
  attr_reader :config
24
70
 
25
- Action = Struct.new(
26
- 'RedisCommandRoutingAction',
27
- :method_name,
28
- :reply_transformer,
29
- keyword_init: true
30
- )
31
-
32
71
  def initialize(config, concurrent_worker, pool: nil, **kwargs)
33
72
  @config = config
34
73
  @concurrent_worker = concurrent_worker
@@ -38,16 +77,15 @@ class RedisClient
38
77
  @node.reload!
39
78
  @command = ::RedisClient::Cluster::Command.load(@node.replica_clients.shuffle, slow_command_timeout: config.slow_command_timeout)
40
79
  @command_builder = @config.command_builder
41
- @dedicated_actions = build_dedicated_actions
42
80
  rescue ::RedisClient::Cluster::InitialSetupError => e
43
81
  e.with_config(config)
44
82
  raise
45
83
  end
46
84
 
47
85
  def send_command(method, command, *args, &block) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
48
- return assign_node_and_send_command(method, command, args, &block) unless @dedicated_actions.key?(command.first)
86
+ return assign_node_and_send_command(method, command, args, &block) unless DEDICATED_ACTIONS.key?(command.first)
49
87
 
50
- action = @dedicated_actions[command.first]
88
+ action = DEDICATED_ACTIONS[command.first]
51
89
  return send(action.method_name, method, command, args, &block) if action.reply_transformer.nil?
52
90
 
53
91
  reply = send(action.method_name, method, command, args)
@@ -257,53 +295,6 @@ class RedisClient
257
295
 
258
296
  private
259
297
 
260
- def build_dedicated_actions # rubocop:disable Metrics/AbcSize
261
- pick_first = ->(reply) { reply.first } # rubocop:disable Style/SymbolProc
262
- multiple_key_action = Action.new(method_name: :send_multiple_keys_command)
263
- all_node_first_action = Action.new(method_name: :send_command_to_all_nodes, reply_transformer: pick_first)
264
- primary_first_action = Action.new(method_name: :send_command_to_primaries, reply_transformer: pick_first)
265
- not_supported_action = Action.new(method_name: :fail_not_supported_command)
266
- keyless_action = Action.new(method_name: :fail_keyless_command)
267
- actions = {
268
- 'ping' => Action.new(method_name: :send_ping_command, reply_transformer: pick_first),
269
- 'wait' => Action.new(method_name: :send_wait_command),
270
- 'keys' => Action.new(method_name: :send_command_to_replicas, reply_transformer: ->(reply) { reply.flatten.sort_by(&:to_s) }),
271
- 'dbsize' => Action.new(method_name: :send_command_to_replicas, reply_transformer: ->(reply) { reply.select { |e| e.is_a?(Integer) }.sum }),
272
- 'scan' => Action.new(method_name: :send_scan_command),
273
- 'lastsave' => Action.new(method_name: :send_command_to_all_nodes, reply_transformer: ->(reply) { reply.sort_by(&:to_i) }),
274
- 'role' => Action.new(method_name: :send_command_to_all_nodes),
275
- 'config' => Action.new(method_name: :send_config_command),
276
- 'client' => Action.new(method_name: :send_client_command),
277
- 'cluster' => Action.new(method_name: :send_cluster_command),
278
- 'memory' => Action.new(method_name: :send_memory_command),
279
- 'script' => Action.new(method_name: :send_script_command),
280
- 'pubsub' => Action.new(method_name: :send_pubsub_command),
281
- 'watch' => Action.new(method_name: :send_watch_command),
282
- 'mget' => multiple_key_action,
283
- 'mset' => multiple_key_action,
284
- 'del' => multiple_key_action,
285
- 'acl' => all_node_first_action,
286
- 'auth' => all_node_first_action,
287
- 'bgrewriteaof' => all_node_first_action,
288
- 'bgsave' => all_node_first_action,
289
- 'quit' => all_node_first_action,
290
- 'save' => all_node_first_action,
291
- 'flushall' => primary_first_action,
292
- 'flushdb' => primary_first_action,
293
- 'readonly' => not_supported_action,
294
- 'readwrite' => not_supported_action,
295
- 'shutdown' => not_supported_action,
296
- 'discard' => keyless_action,
297
- 'exec' => keyless_action,
298
- 'multi' => keyless_action,
299
- 'unwatch' => keyless_action
300
- }.freeze
301
- actions.each_with_object({}) do |(k, v), acc|
302
- acc[k] = v
303
- acc[k.upcase] = v
304
- end.freeze
305
- end
306
-
307
298
  def send_command_to_all_nodes(method, command, args, &block)
308
299
  @node.call_all(method, command, args, &block)
309
300
  end
@@ -19,7 +19,6 @@ class RedisClient
19
19
  @config = config.nil? ? ClusterConfig.new(**kwargs) : config
20
20
  @concurrent_worker = ::RedisClient::Cluster::ConcurrentWorker.create(**(concurrency || {}))
21
21
  @command_builder = @config.command_builder
22
-
23
22
  @pool = pool
24
23
  @kwargs = kwargs
25
24
  @router = nil
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-cluster-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.13.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taishi Kasuga
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-08 00:00:00.000000000 Z
10
+ date: 2025-01-16 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: redis-client
@@ -24,7 +23,6 @@ dependencies:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
25
  version: '0.22'
27
- description:
28
26
  email:
29
27
  - proxy0721@gmail.com
30
28
  executables: []
@@ -62,7 +60,6 @@ licenses:
62
60
  metadata:
63
61
  rubygems_mfa_required: 'true'
64
62
  allowed_push_host: https://rubygems.org
65
- post_install_message:
66
63
  rdoc_options: []
67
64
  require_paths:
68
65
  - lib
@@ -77,8 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
74
  - !ruby/object:Gem::Version
78
75
  version: '0'
79
76
  requirements: []
80
- rubygems_version: 3.5.22
81
- signing_key:
77
+ rubygems_version: 3.6.2
82
78
  specification_version: 4
83
- summary: A Redis cluster client for Ruby
79
+ summary: Redis cluster-aware client for Ruby
84
80
  test_files: []