logstash-output-kafka 8.0.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a981761a88f5164e806a8905d0029f5c9cae7c0e8c3c3fcda75a6c2f0e1ba376
4
- data.tar.gz: dfff30a2b2945f37011d6c017ef24a3a4d59364a4f89b71cdc828990299ce848
3
+ metadata.gz: 70867b390301afc2fbd04d4c4c1f59376dfbe5e19fe2ebf7b39fbbb244c3da15
4
+ data.tar.gz: cb7a7741d69c84c4cc582dc37ee1c69427025dc4a2ca407739cb79f38e663805
5
5
  SHA512:
6
- metadata.gz: 95dd113a68bef32a2f2fcfca611ae82d11087697af6ea13ba122ffc070da65a4bacf9019d3db1a60f8d16a1d65d09dc3e1a682e3a26f1fc37405e75a88b7dfc1
7
- data.tar.gz: f86de71028de564096d0f85f1d46e95edee7c7fe84834f2e44115934da43a008019cef0ad5956f478e8bad968b16f84ebfdf6024e05c8b100fd18af879041acf
6
+ metadata.gz: cb3e1e0dcf3f15d3719148409fd4eeebe2a78c93800c43ecafcbd89a0c3faa80a90badcca009cf0635197bab6f2642991e7af22e7d2176bc3f187a769d27737c
7
+ data.tar.gz: 52305cbebcbb20ed48fb2fee1100a27754f35e2cbb3c57c9d5c2528862a189a99450932490f3b9a4b6a15997246ea0922b6ce8f6d021fcff90a16c39b0be915e
@@ -1,3 +1,6 @@
1
+ ## 8.0.1
2
+ - Fixed issue with unnecessary sleep after retries exhausted [#216](https://github.com/logstash-plugins/logstash-output-kafka/pull/216)
3
+
1
4
  ## 8.0.0
2
5
  - Removed obsolete `block_on_buffer_full`, `ssl` and `timeout_ms` options
3
6
 
@@ -225,7 +225,7 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
225
225
  end
226
226
 
227
227
  def retrying_send(batch)
228
- remaining = @retries;
228
+ remaining = @retries
229
229
 
230
230
  while batch.any?
231
231
  if !remaining.nil?
@@ -275,13 +275,15 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
275
275
  break if failures.empty?
276
276
 
277
277
  # Otherwise, retry with any failed transmissions
278
- batch = failures
279
- delay = @retry_backoff_ms / 1000.0
280
- logger.info("Sending batch to Kafka failed. Will retry after a delay.", :batch_size => batch.size,
281
- :failures => failures.size, :sleep => delay);
282
- sleep(delay)
278
+ if remaining.nil? || remaining >= 0
279
+ delay = @retry_backoff_ms / 1000.0
280
+ logger.info("Sending batch to Kafka failed. Will retry after a delay.", :batch_size => batch.size,
281
+ :failures => failures.size,
282
+ :sleep => delay)
283
+ batch = failures
284
+ sleep(delay)
285
+ end
283
286
  end
284
-
285
287
  end
286
288
 
287
289
  def close
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-output-kafka'
4
- s.version = '8.0.0'
4
+ s.version = '8.0.1'
5
5
  s.licenses = ['Apache-2.0']
6
6
  s.summary = "Writes events to a Kafka topic"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -49,7 +49,7 @@ describe "outputs/kafka" do
49
49
  kafka.register
50
50
  kafka.multi_receive([event])
51
51
  end
52
-
52
+
53
53
  it 'should raise config error when truststore location is not set and ssl is enabled' do
54
54
  kafka = LogStash::Outputs::Kafka.new(simple_kafka_config.merge("security_protocol" => "SSL"))
55
55
  expect { kafka.register }.to raise_error(LogStash::ConfigurationError, /ssl_truststore_location must be set when SSL is enabled/)
@@ -120,6 +120,41 @@ describe "outputs/kafka" do
120
120
  end
121
121
  end
122
122
 
123
+ context 'when retries is 0' do
124
+ let(:retries) { 0 }
125
+ let(:max_sends) { 1 }
126
+
127
+ it "should should only send once" do
128
+ expect_any_instance_of(org.apache.kafka.clients.producer.KafkaProducer).to receive(:send)
129
+ .once
130
+ .and_wrap_original do |m, *args|
131
+ # Always fail.
132
+ future = java.util.concurrent.FutureTask.new { raise "Failed" }
133
+ future.run
134
+ future
135
+ end
136
+ kafka = LogStash::Outputs::Kafka.new(simple_kafka_config.merge("retries" => retries))
137
+ kafka.register
138
+ kafka.multi_receive([event])
139
+ end
140
+
141
+ it 'should not sleep' do
142
+ expect_any_instance_of(org.apache.kafka.clients.producer.KafkaProducer).to receive(:send)
143
+ .once
144
+ .and_wrap_original do |m, *args|
145
+ # Always fail.
146
+ future = java.util.concurrent.FutureTask.new { raise "Failed" }
147
+ future.run
148
+ future
149
+ end
150
+
151
+ kafka = LogStash::Outputs::Kafka.new(simple_kafka_config.merge("retries" => retries))
152
+ expect(kafka).not_to receive(:sleep).with(anything)
153
+ kafka.register
154
+ kafka.multi_receive([event])
155
+ end
156
+ end
157
+
123
158
  context "and when retries is set by the user" do
124
159
  let(:retries) { (rand * 10).to_i }
125
160
  let(:max_sends) { retries + 1 }
@@ -137,6 +172,21 @@ describe "outputs/kafka" do
137
172
  kafka.register
138
173
  kafka.multi_receive([event])
139
174
  end
175
+
176
+ it 'should only sleep retries number of times' do
177
+ expect_any_instance_of(org.apache.kafka.clients.producer.KafkaProducer).to receive(:send)
178
+ .at_most(max_sends)
179
+ .and_wrap_original do |m, *args|
180
+ # Always fail.
181
+ future = java.util.concurrent.FutureTask.new { raise "Failed" }
182
+ future.run
183
+ future
184
+ end
185
+ kafka = LogStash::Outputs::Kafka.new(simple_kafka_config.merge("retries" => retries))
186
+ expect(kafka).to receive(:sleep).exactly(retries).times
187
+ kafka.register
188
+ kafka.multi_receive([event])
189
+ end
140
190
  end
141
191
  end
142
192
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0
4
+ version: 8.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elasticsearch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-11 00:00:00.000000000 Z
11
+ date: 2019-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement