redis-cluster-client 0.17.5 → 0.17.6
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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 675e3b7c851ac7deebc2f261d0aaa7fa6ef4c1865b3382014c41404ca314f5cc
|
|
4
|
+
data.tar.gz: 6a25062f50524661e566a1223752822711cf10246bedec98e52d1bdac3205fcc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98cd5427026578e9a175cdcd21def056ca24997213f1c70385c193ce5fa2991a5f60edadb34e557d5c4a75ba4ff985d2c9a8b0c2f7e3e76f22cd9ce529846961
|
|
7
|
+
data.tar.gz: 1f8e2a9cc8576fee87fdfb91485fbb13a5609381ef8f186ae287915f8f51cd4c3611e627e65d82d9c0767d9345a1d62e14a24b0b0a41dd70624558fe3b50e2c5
|
|
@@ -42,6 +42,14 @@ class RedisClient
|
|
|
42
42
|
@replica_clients.freeze
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
def connect_to_node(node_key, option)
|
|
46
|
+
return @clients[node_key] if @clients.key?(node_key)
|
|
47
|
+
|
|
48
|
+
client = build_client(node_key, option)
|
|
49
|
+
@clients = @clients.merge(node_key => client)
|
|
50
|
+
client
|
|
51
|
+
end
|
|
52
|
+
|
|
45
53
|
private
|
|
46
54
|
|
|
47
55
|
def disconnect_from_unwanted_nodes(options)
|
|
@@ -52,13 +60,15 @@ class RedisClient
|
|
|
52
60
|
|
|
53
61
|
def connect_to_new_nodes(options)
|
|
54
62
|
(options.keys - @clients.keys).each do |node_key|
|
|
55
|
-
|
|
56
|
-
config = ::RedisClient::Cluster::Node::Config.new(scale_read: @replica_node_keys.include?(node_key), **option)
|
|
57
|
-
client = @pool.nil? ? config.new_client : config.new_pool(**@pool)
|
|
58
|
-
@clients[node_key] = client
|
|
63
|
+
@clients[node_key] = build_client(node_key, options[node_key])
|
|
59
64
|
end
|
|
60
65
|
end
|
|
61
66
|
|
|
67
|
+
def build_client(node_key, option)
|
|
68
|
+
config = ::RedisClient::Cluster::Node::Config.new(scale_read: @replica_node_keys.include?(node_key), **option.merge(@client_options))
|
|
69
|
+
@pool.nil? ? config.new_client : config.new_pool(**@pool)
|
|
70
|
+
end
|
|
71
|
+
|
|
62
72
|
def make_random(seed)
|
|
63
73
|
# OPTIMIZE: Figure out the most elegant way to pin a node during a pipeline or scan.
|
|
64
74
|
seed.nil? ? Random : Random.new(seed)
|
|
@@ -129,6 +129,22 @@ class RedisClient
|
|
|
129
129
|
@topology.clients.fetch(node_key)
|
|
130
130
|
end
|
|
131
131
|
|
|
132
|
+
def find_or_connect(node_key)
|
|
133
|
+
client = @topology.clients[node_key]
|
|
134
|
+
return client unless client.nil?
|
|
135
|
+
raise ReloadNeeded if node_key.nil? || !@mutex.try_lock
|
|
136
|
+
|
|
137
|
+
begin
|
|
138
|
+
@topology.connect_to_node(node_key, @config.client_config_for_node(node_key))
|
|
139
|
+
ensure
|
|
140
|
+
@mutex.unlock
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def primary_node_key?(node_key)
|
|
145
|
+
@replications.key?(node_key)
|
|
146
|
+
end
|
|
147
|
+
|
|
132
148
|
def call_all(method, command, args, &block)
|
|
133
149
|
call_multiple_nodes!(@topology.clients, method, command, args, &block)
|
|
134
150
|
end
|
|
@@ -238,14 +238,16 @@ class RedisClient
|
|
|
238
238
|
|
|
239
239
|
def assign_redirection_node(err_msg)
|
|
240
240
|
_, slot, node_key = err_msg.split
|
|
241
|
-
|
|
242
|
-
@node.
|
|
243
|
-
handle_node_reload_error { @node.
|
|
241
|
+
# A MOVED to anything but a known primary means the map is behind; the reload is throttled by the jitter.
|
|
242
|
+
renew_cluster_state unless @node.primary_node_key?(node_key)
|
|
243
|
+
node = handle_node_reload_error { @node.find_or_connect(node_key) }
|
|
244
|
+
@node.update_slot(slot.to_i, node_key)
|
|
245
|
+
node
|
|
244
246
|
end
|
|
245
247
|
|
|
246
248
|
def assign_asking_node(err_msg)
|
|
247
249
|
_, _, node_key = err_msg.split
|
|
248
|
-
handle_node_reload_error { @node.
|
|
250
|
+
handle_node_reload_error { @node.find_or_connect(node_key) }
|
|
249
251
|
end
|
|
250
252
|
|
|
251
253
|
def node_keys
|