@@ -12,7 +12,7 @@ class Client < RedisClient::Cluster
12
12
RedisClient ::Cluster ::ErrorCollection => Redis ::Cluster ::CommandErrorCollection ,
13
13
RedisClient ::Cluster ::Transaction ::ConsistencyError => Redis ::Cluster ::TransactionConsistencyError ,
14
14
RedisClient ::Cluster ::NodeMightBeDown => Redis ::Cluster ::NodeMightBeDown ,
15
- ) . freeze
15
+ )
16
16
17
17
class << self
18
18
def config ( **kwargs )
@@ -22,6 +22,29 @@ def config(**kwargs)
22
22
def sentinel ( **kwargs )
23
23
super ( protocol : 2 , **kwargs )
24
24
end
25
+
26
+ def translate_error! ( error , mapping : ERROR_MAPPING )
27
+ case error
28
+ when RedisClient ::Cluster ::ErrorCollection
29
+ error . errors . each do |_node , node_error |
30
+ if node_error . is_a? ( RedisClient ::AuthenticationError )
31
+ raise mapping . fetch ( node_error . class ) , node_error . message , node_error . backtrace
32
+ end
33
+ end
34
+
35
+ remapped_node_errors = error . errors . map do |node_key , node_error |
36
+ remapped = mapping . fetch ( node_error . class , node_error . class ) . new ( node_error . message )
37
+ remapped . set_backtrace node_error . backtrace
38
+ [ node_key , remapped ]
39
+ end . to_h
40
+
41
+ raise ( Redis ::Cluster ::CommandErrorCollection . new ( remapped_node_errors , error . message ) . tap do |remapped |
42
+ remapped . set_backtrace error . backtrace
43
+ end )
44
+ else
45
+ Redis ::Client . translate_error! ( error , mapping : mapping )
46
+ end
47
+ end
25
48
end
26
49
27
50
def initialize ( *)
@@ -79,22 +102,8 @@ def multi(watch: nil, &block)
79
102
80
103
def handle_errors
81
104
yield
82
- rescue RedisClient ::Cluster ::ErrorCollection => error
83
- error . errors . each do |_node , node_error |
84
- if node_error . is_a? ( RedisClient ::AuthenticationError )
85
- raise ERROR_MAPPING . fetch ( node_error . class ) , node_error . message , node_error . backtrace
86
- end
87
- end
88
- remapped_node_errors = error . errors . map do |node_key , node_error |
89
- remapped = ERROR_MAPPING . fetch ( node_error . class , node_error . class ) . new ( node_error . message )
90
- remapped . set_backtrace node_error . backtrace
91
- [ node_key , remapped ]
92
- end . to_h
93
- raise ( Redis ::Cluster ::CommandErrorCollection . new ( remapped_node_errors , error . message ) . tap do |remapped |
94
- remapped . set_backtrace error . backtrace
95
- end )
96
105
rescue ::RedisClient ::Error => error
97
- raise ERROR_MAPPING . fetch ( error . class ) , error . message , error . backtrace
106
+ Redis :: Cluster :: Client . translate_error! ( error )
98
107
end
99
108
end
100
109
end
0 commit comments