Skip to content

Commit 9434243

Browse files
committed
Adds retry-capability. If one batch fails, each document will be retried one by one.
1 parent 432163d commit 9434243

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

lib/logstash/outputs/json_batch.rb

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ class LogStash::Outputs::JSONBatch < LogStash::Outputs::Base
1919
# format is `headers => ["X-My-Header", "%{host}"]`
2020
config :headers, :validate => :hash
2121

22-
config :flush_size, :validate => :number
22+
config :flush_size, :validate => :number, :default => 50
2323

24-
config :idle_flush_time, :validate => :number
24+
config :idle_flush_time, :validate => :number, :default => 5
25+
26+
config :retry_individual, :validate => :boolean, :default => false
2527

2628
def register
2729
# Handle this deprecated option. TODO: remove the option
@@ -41,6 +43,13 @@ def register
4143
:max_interval => @idle_flush_time,
4244
:logger => @logger
4345
)
46+
logger.info("Initialized json_batch with settings",
47+
:flush_size => @flush_size,
48+
:idle_flush_time => @idle_flush_time,
49+
:request_tokens => @pool_max,
50+
:url => @url,
51+
:headers => request_headers,
52+
:retry_individual => @retry_individual)
4453

4554
end # def register
4655

@@ -67,6 +76,8 @@ def make_request(documents, count)
6776
# Block waiting for a token
6877
token = @request_tokens.pop
6978

79+
80+
7081
# Create an async request
7182
begin
7283
request = client.send(:post, @url, :body => body, :headers => request_headers, :async => true)
@@ -87,14 +98,22 @@ def make_request(documents, count)
8798

8899
request.on_success do |response|
89100
#string = "Some "+ Time.new.inspect + " " + response
90-
#puts "%s status code returned for %s docs @ %s\n" % [response.code, documents.length, Time.new.inspect]
101+
#
91102
if response.code < 200 || response.code > 299
92103
log_failure(
93-
"Encountered non-200 HTTP code #{200}",
94-
:response_code => response.code,
95-
:url => url,
96-
:response_body => response.body,
97-
:num_docs => documents.length)
104+
"Encountered non-200 HTTP code #{response.code}",
105+
:response_code => response.code,
106+
:url => url,
107+
:response_body => response.body,
108+
:num_docs => documents.length,
109+
:retry_individual => @retry_individual)
110+
if documents.length > 1 && @retry_individual
111+
documents.each do |doc|
112+
make_request([doc], 0)
113+
end
114+
else
115+
puts "%s status code returned for %s docs @ %s\n" % [response.code, body, Time.new.inspect]
116+
end
98117
end
99118
end
100119

0 commit comments

Comments
 (0)