From 372bb702ab76476ae89ad499e40832fa69136433 Mon Sep 17 00:00:00 2001 From: giwa Date: Fri, 19 Jul 2019 18:28:06 +0900 Subject: [PATCH] raise embulk error --- lib/embulk/input/elasticsearch/connection.rb | 4 +-- lib/embulk/input/elasticsearch/converter.rb | 2 +- lib/embulk/input/elasticsearch/error.rb | 36 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 lib/embulk/input/elasticsearch/error.rb diff --git a/lib/embulk/input/elasticsearch/connection.rb b/lib/embulk/input/elasticsearch/connection.rb index 7072059..0d05e38 100644 --- a/lib/embulk/input/elasticsearch/connection.rb +++ b/lib/embulk/input/elasticsearch/connection.rb @@ -73,8 +73,8 @@ def search_with_retry sleep 2**retries retry end - Embulk.logger.error "Could not search to Elasticsearch after #{retries} retries. #{e.message}" - return nil + msg = "Could not search to Elasticsearch after #{retries} retries. #{e.message}" + raise Elasticsearch::ConfigError(e, msg) end end diff --git a/lib/embulk/input/elasticsearch/converter.rb b/lib/embulk/input/elasticsearch/converter.rb index f000cb5..680300b 100644 --- a/lib/embulk/input/elasticsearch/converter.rb +++ b/lib/embulk/input/elasticsearch/converter.rb @@ -40,7 +40,7 @@ def self.convert_value(value, field) when "json" value else - raise "Unsupported type #{field['type']}" + raise Elasticsearch::TypecastError.new "Unsupported type #{field['type']}" end end end diff --git a/lib/embulk/input/elasticsearch/error.rb b/lib/embulk/input/elasticsearch/error.rb new file mode 100644 index 0000000..6777dc0 --- /dev/null +++ b/lib/embulk/input/elasticsearch/error.rb @@ -0,0 +1,36 @@ +module Embulk + module Input + + class Elasticsearch < InputPlugin + + module Traceable + def initialize(e, more_msg = nil) + message = e.is_a?(String) ? '' : "(#{e.class}) " + message << "#{e}#{more_msg}\n" + message << "\tat #{e.backtrace.join("\n\tat ")}\n" if e.respond_to?(:backtrace) + + while e.respond_to?(:cause) and e.cause + # Java Exception cannot follow the JRuby causes. + message << "Caused by (#{e.cause.class}) #{e.cause}\n" + message << "\tat #{e.cause.backtrace.join("\n\tat ")}\n" if e.cause.respond_to?(:backtrace) + e = e.cause + end + + super(message) + end + end + + class ConfigError < ::Embulk::ConfigError + include Traceable + end + + class DataError < ::Embulk::DataError + include Traceable + end + + class TypecastError < DataError + end + + end + end +end \ No newline at end of file