diff --git a/elasticsearch-transport/lib/elasticsearch/transport/transport/base.rb b/elasticsearch-transport/lib/elasticsearch/transport/transport/base.rb index 9b23ce9532..321722e0d9 100644 --- a/elasticsearch-transport/lib/elasticsearch/transport/transport/base.rb +++ b/elasticsearch-transport/lib/elasticsearch/transport/transport/base.rb @@ -312,9 +312,9 @@ def perform_request(method, path, params={}, body=nil, &block) if response.status.to_i >= 300 __log method, path, params, body, url, response, nil, 'N/A', duration if logger __trace method, path, params, body, url, response, nil, 'N/A', duration if tracer - __log_failed response if logger - # Swallow the exception when the `ignore` parameter matches response status + # Swallow the exception and log when the `ignore` parameter matches response status + __log_failed response if logger && !ignore.include?(response.status.to_i) __raise_transport_error response unless ignore.include?(response.status.to_i) end diff --git a/elasticsearch-transport/test/unit/transport_base_test.rb b/elasticsearch-transport/test/unit/transport_base_test.rb index 773fff42ae..07937396c7 100644 --- a/elasticsearch-transport/test/unit/transport_base_test.rb +++ b/elasticsearch-transport/test/unit/transport_base_test.rb @@ -420,7 +420,7 @@ def initialize(*); end @transport.perform_request('GET', '/') {Elasticsearch::Transport::Transport::Response.new 200, '{"foo":"bar"}' } end - should "log a failed Elasticsearch request" do + should "log a failed Elasticsearch request as fatal" do @block = Proc.new { |c, u| puts "ERROR" } @block.expects(:call).returns(Elasticsearch::Transport::Transport::Response.new 500, 'ERROR') @@ -432,6 +432,17 @@ def initialize(*); end end end unless RUBY_1_8 + should "not log a failed Elasticsearch request as fatal" do + @block = Proc.new { |c, u| puts "ERROR" } + @block.expects(:call).returns(Elasticsearch::Transport::Transport::Response.new 500, 'ERROR') + + @transport.expects(:__log).twice + @transport.logger.expects(:fatal).never + + # No `BadRequest` error + @transport.perform_request('POST', '_search', :ignore => 500, &@block) + end unless RUBY_1_8 + should "log and re-raise a Ruby exception" do @block = Proc.new { |c, u| puts "ERROR" } @block.expects(:call).raises(Exception)