Skip to content

Commit

Permalink
Merge pull request #1238 from zendesk/ktsanaktsidis/make_error_collec…
Browse files Browse the repository at this point in the history
…tion_useful

Cluster: Preserve message and suberrors when raising CommandErrorCollection
  • Loading branch information
byroot committed Nov 17, 2023
2 parents 6729fc8 + 07e7849 commit a592a63
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
9 changes: 8 additions & 1 deletion cluster/lib/redis/cluster/client.rb
Expand Up @@ -84,7 +84,14 @@ def handle_errors
raise ERROR_MAPPING.fetch(node_error.class), node_error.message, node_error.backtrace
end
end
raise ERROR_MAPPING.fetch(error.class), error.message, error.backtrace
remapped_node_errors = error.errors.map do |node_key, node_error|
remapped = ERROR_MAPPING.fetch(node_error.class, node_error.class).new(node_error.message)
remapped.set_backtrace node_error.backtrace
[node_key, remapped]
end.to_h
raise(Redis::Cluster::CommandErrorCollection.new(remapped_node_errors, error.message).tap do |remapped|
remapped.set_backtrace error.backtrace
end)
rescue ::RedisClient::Error => error
raise ERROR_MAPPING.fetch(error.class), error.message, error.backtrace
end
Expand Down
4 changes: 3 additions & 1 deletion cluster/test/commands_on_server_test.rb
Expand Up @@ -21,9 +21,11 @@ def test_bgsave
'Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenever possible.'

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

Expand Down

0 comments on commit a592a63

Please sign in to comment.