Commit 19a03896efcc7ba1c6cf233f1ab9b83ce7801a6a
Committed by
GitHub
Exists in
master
and in
21 other branches
Merge pull request #631 from audreyschwarz/report_full_bulk_index_error_message
Raise with message on bulk import error
Showing
2 changed files
with
24 additions
and
2 deletions
Show diff stats
lib/searchkick.rb
@@ -107,8 +107,10 @@ module Searchkick | @@ -107,8 +107,10 @@ module Searchkick | ||
107 | if items.any? | 107 | if items.any? |
108 | response = client.bulk(body: items) | 108 | response = client.bulk(body: items) |
109 | if response["errors"] | 109 | if response["errors"] |
110 | - first_item = response["items"].first | ||
111 | - raise Searchkick::ImportError, (first_item["index"] || first_item["delete"])["error"] | 110 | + first_with_error = response["items"].map do |item| |
111 | + (item["index"] || item["delete"]) | ||
112 | + end.find { |item| item["error"] } | ||
113 | + raise Searchkick::ImportError, "#{first_with_error["error"]} on item with id '#{first_with_error["_id"]}'" | ||
112 | end | 114 | end |
113 | end | 115 | end |
114 | end | 116 | end |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +require_relative "test_helper" | ||
2 | + | ||
3 | +class ErrorsTest < Minitest::Test | ||
4 | + def test_bulk_import_raises_with_full_message | ||
5 | + valid_dog = Dog.new(name: "2016-01-02") | ||
6 | + invalid_dog = Dog.new(name: "Ol' One-Leg") | ||
7 | + index = Searchkick::Index.new "dogs", mappings: { | ||
8 | + dog: { | ||
9 | + properties: { | ||
10 | + name: { type: "date" } | ||
11 | + } | ||
12 | + } | ||
13 | + } | ||
14 | + index.store valid_dog | ||
15 | + error = assert_raises(Searchkick::ImportError) do | ||
16 | + index.bulk_index [valid_dog, invalid_dog] | ||
17 | + end | ||
18 | + assert_match /MapperParsingException.*Ol' One-Leg/, error.message | ||
19 | + end | ||
20 | +end |