Skip to content

Commit a592a63

Browse files
authored
Merge pull request #1238 from zendesk/ktsanaktsidis/make_error_collection_useful
Cluster: Preserve message and suberrors when raising CommandErrorCollection
2 parents 6729fc8 + 07e7849 commit a592a63

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

cluster/lib/redis/cluster/client.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,14 @@ def handle_errors
8484
raise ERROR_MAPPING.fetch(node_error.class), node_error.message, node_error.backtrace
8585
end
8686
end
87-
raise ERROR_MAPPING.fetch(error.class), error.message, error.backtrace
87+
remapped_node_errors = error.errors.map do |node_key, node_error|
88+
remapped = ERROR_MAPPING.fetch(node_error.class, node_error.class).new(node_error.message)
89+
remapped.set_backtrace node_error.backtrace
90+
[node_key, remapped]
91+
end.to_h
92+
raise(Redis::Cluster::CommandErrorCollection.new(remapped_node_errors, error.message).tap do |remapped|
93+
remapped.set_backtrace error.backtrace
94+
end)
8895
rescue ::RedisClient::Error => error
8996
raise ERROR_MAPPING.fetch(error.class), error.message, error.backtrace
9097
end

cluster/test/commands_on_server_test.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ def test_bgsave
2121
'Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenever possible.'
2222

2323
redis_cluster_mock(bgsave: ->(*_) { "-Error #{err_msg}" }) do |redis|
24-
assert_raises(Redis::Cluster::CommandErrorCollection, 'Command error replied on any node') do
24+
err = assert_raises(Redis::Cluster::CommandErrorCollection, 'Command error replied on any node') do
2525
redis.bgsave
2626
end
27+
assert_includes err.message, err_msg
28+
assert_kind_of Redis::CommandError, err.errors.values.first
2729
end
2830
end
2931

0 commit comments

Comments
 (0)