@@ -12,7 +12,7 @@ class Client < RedisClient::Cluster
1212 RedisClient ::Cluster ::ErrorCollection => Redis ::Cluster ::CommandErrorCollection ,
1313 RedisClient ::Cluster ::Transaction ::ConsistencyError => Redis ::Cluster ::TransactionConsistencyError ,
1414 RedisClient ::Cluster ::NodeMightBeDown => Redis ::Cluster ::NodeMightBeDown ,
15- ) . freeze
15+ )
1616
1717 class << self
1818 def config ( **kwargs )
@@ -22,6 +22,29 @@ def config(**kwargs)
2222 def sentinel ( **kwargs )
2323 super ( protocol : 2 , **kwargs )
2424 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
2548 end
2649
2750 def initialize ( *)
@@ -79,22 +102,8 @@ def multi(watch: nil, &block)
79102
80103 def handle_errors
81104 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 )
96105 rescue ::RedisClient ::Error => error
97- raise ERROR_MAPPING . fetch ( error . class ) , error . message , error . backtrace
106+ Redis :: Cluster :: Client . translate_error! ( error )
98107 end
99108 end
100109 end
0 commit comments