logstash-input-s3 3.3.0 → 3.3.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: f7b3da5d60d7cc955dc088b8373efb14fa0d4b8318ba689b102726f92b8f947c
4
- data.tar.gz: 3ed4bb7fc75bb4ef6f173a90eb9a6ff2788ef517c72c88b814dd70ae72879ab3
3
+ metadata.gz: 40d44b6d4f759ae776a74c6d2e316ec74f62dba65dc2d75702749913471feda8
4
+ data.tar.gz: cc518e42d35b2ef3c39045f9700a7f970bccb0e3cf145d7cebb0dd51860bcd13
5
5
  SHA512:
6
- metadata.gz: b18302b15ea951230da913422c462a8ac70d61e17030c8f8273145d618ad41317b8b4c87f12d986dc979ea02fed8780594511bbe3669c4d8de0982b8f722fc76
7
- data.tar.gz: e82da29add08a72dc8ba4ed2d0a32c551d85b57fadb8fbb7e929a5e8028b8f821ec5a358535a89882d33cedd16c308cf9a9137938c1cf11bbe9e176a92e34823
6
+ metadata.gz: 450923e8e0d886fe972ea82365a7b38eda37cef594f79fa3839615ab64c3fbcdad6fa12d724a80e05c57136126168c16ada1d5587e0e3152f04540846a145bdb
7
+ data.tar.gz: 70c2526ec6b8acf37d3e82af2a30bed30864e41aae8182cc3f336d68623604c3a1b3380118f4ec6cfecc87e317304fb961d198b9383d70d5f74b5d3c7513e894
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.3.1
2
+ - Improve error handling when listing/downloading from S3 #144
3
+
1
4
  ## 3.3.0
2
5
  - Add documentation for endpoint, role_arn and role_session_name #142
3
6
  - Add support for additional_settings option #141
@@ -110,18 +110,21 @@ class LogStash::Inputs::S3 < LogStash::Inputs::Base
110
110
  def list_new_files
111
111
  objects = {}
112
112
 
113
- @s3bucket.objects(:prefix => @prefix).each do |log|
114
- @logger.debug("S3 input: Found key", :key => log.key)
115
-
116
- unless ignore_filename?(log.key)
117
- if sincedb.newer?(log.last_modified) && log.content_length > 0
118
- objects[log.key] = log.last_modified
119
- @logger.debug("S3 input: Adding to objects[]", :key => log.key)
120
- @logger.debug("objects[] length is: ", :length => objects.length)
113
+ begin
114
+ @s3bucket.objects(:prefix => @prefix).each do |log|
115
+ @logger.debug("S3 input: Found key", :key => log.key)
116
+ unless ignore_filename?(log.key)
117
+ if sincedb.newer?(log.last_modified) && log.content_length > 0
118
+ objects[log.key] = log.last_modified
119
+ @logger.debug("S3 input: Adding to objects[]", :key => log.key)
120
+ @logger.debug("objects[] length is: ", :length => objects.length)
121
+ end
121
122
  end
122
123
  end
124
+ rescue Aws::Errors::ServiceError => e
125
+ @logger.error("S3 input: Unable to list objects in bucket", :prefix => prefix, :message => e.message)
123
126
  end
124
- return objects.keys.sort {|a,b| objects[a] <=> objects[b]}
127
+ objects.keys.sort {|a,b| objects[a] <=> objects[b]}
125
128
  end # def fetch_new_files
126
129
 
127
130
  public
@@ -372,11 +375,14 @@ class LogStash::Inputs::S3 < LogStash::Inputs::Base
372
375
  @logger.debug("S3 input: Download remote file", :remote_key => remote_object.key, :local_filename => local_filename)
373
376
  File.open(local_filename, 'wb') do |s3file|
374
377
  return completed if stop?
375
- remote_object.get(:response_target => s3file)
378
+ begin
379
+ remote_object.get(:response_target => s3file)
380
+ completed = true
381
+ rescue Aws::Errors::ServiceError => e
382
+ @logger.warn("S3 input: Unable to download remote file", :remote_key => remote_object.key, :message => e.message)
383
+ end
376
384
  end
377
- completed = true
378
-
379
- return completed
385
+ completed
380
386
  end
381
387
 
382
388
  private
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-s3'
4
- s.version = '3.3.0'
4
+ s.version = '3.3.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Streams events from files in a S3 bucket"
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"
@@ -256,6 +256,62 @@ describe LogStash::Inputs::S3 do
256
256
  end
257
257
  end
258
258
 
259
+ context 'while communicating with s3' do
260
+ let(:config) {
261
+ {
262
+ "access_key_id" => "1234",
263
+ "secret_access_key" => "secret",
264
+ "bucket" => "logstash-test",
265
+ "codec" => "json",
266
+ }
267
+ }
268
+ %w(AccessDenied NotFound).each do |error|
269
+ context "while listing bucket contents, #{error} is returned" do
270
+ before do
271
+ Aws.config[:s3] = {
272
+ stub_responses: {
273
+ list_objects: error
274
+ }
275
+ }
276
+ end
277
+
278
+ it 'should not crash the plugin' do
279
+ events = fetch_events(config)
280
+ expect(events.size).to eq(0)
281
+ end
282
+ end
283
+ end
284
+
285
+ %w(AccessDenied NoSuchKey).each do |error|
286
+ context "when retrieving an object, #{error} is returned" do
287
+ let(:objects) { [log] }
288
+ let(:log) { double(:key => 'uncompressed.log', :last_modified => Time.now - 2 * day, :content_length => 5) }
289
+
290
+ let(:config) {
291
+ {
292
+ "access_key_id" => "1234",
293
+ "secret_access_key" => "secret",
294
+ "bucket" => "logstash-test",
295
+ "codec" => "json",
296
+ }
297
+ }
298
+ before do
299
+ Aws.config[:s3] = {
300
+ stub_responses: {
301
+ get_object: error
302
+ }
303
+ }
304
+ allow_any_instance_of(Aws::S3::Bucket).to receive(:objects) { objects }
305
+ end
306
+
307
+ it 'should not crash the plugin' do
308
+ events = fetch_events(config)
309
+ expect(events.size).to eq(0)
310
+ end
311
+ end
312
+ end
313
+ end
314
+
259
315
  context 'when working with logs' do
260
316
  let(:objects) { [log] }
261
317
  let(:log) { double(:key => 'uncompressed.log', :last_modified => Time.now - 2 * day, :content_length => 5) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic