fluent-plugin-s3 0.6.8 → 0.6.9

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
  SHA1:
3
- metadata.gz: 8b5cf42881912f6452810b283b3bd9be7a94160f
4
- data.tar.gz: a7f3fb4b37a91b18b72d8f7bdef7a80c783ba64b
3
+ metadata.gz: 4d3125cb720171313d0ac3b19ee194e3996454d4
4
+ data.tar.gz: ca82560974fb26d500e418888b6ca03cdc020f2c
5
5
  SHA512:
6
- metadata.gz: 21e938107f0fa66ddedf3634013c9e0472ac2a5855f26dfecd3bd01bebce120957e7e656693a4bf993a28afc9272514ac61b5b8678d7f313bec080161c47c442
7
- data.tar.gz: 2c334c3fe1c8f34baae53b5668a02971279c8a574e063a04c6f9e4ce925601060bd957356e700abc9d49f0ed3aa3f891ad633e815f62d1eb85b60741268a0aee
6
+ metadata.gz: 981012e05d6804b223b3e683e3da31754f034c818a4bdcc3820be7643c48a21ecd08a76e9df945adf35b77ed4e70e4b1da33bd4155765ee26cabefbadda6fb36
7
+ data.tar.gz: 751fbb6b67929ea0bb0934e345a83f0afb3f8cea60cffc64f4f6947f623122643c50e6b5bb1e9c1266a01fa708b3150e74777fd71bdd4bc809cfbcac59f2a23b
data/.travis.yml CHANGED
@@ -5,12 +5,13 @@ rvm:
5
5
  - 2.0
6
6
  - 2.1
7
7
  - 2.2.3
8
- - 2.3.0
8
+ - 2.3.1
9
9
  - ruby-head
10
10
  - rbx
11
11
 
12
12
  gemfile:
13
13
  - Gemfile
14
+ - Gemfile.v0.12
14
15
 
15
16
  branches:
16
17
  only:
@@ -25,3 +26,8 @@ matrix:
25
26
  allow_failures:
26
27
  - rvm: ruby-head
27
28
  - rvm: rbx
29
+ exclude:
30
+ - rvm: 1.9.3
31
+ gemfile: Gemfile
32
+ - rvm: 2.0
33
+ gemfile: Gemfile
data/ChangeLog CHANGED
@@ -1,3 +1,10 @@
1
+ Release 0.6.9 - 2016/07/28
2
+
3
+ * Support v0.14
4
+ * Fix aws_iam_retries warning
5
+ * Fix race condition at start with buffers
6
+
7
+
1
8
  Release 0.6.8 - 2016/04/19
2
9
 
3
10
  * Add sse customer key options
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'json', '= 1.8.3'
4
+
3
5
  gemspec
data/Gemfile.v0.12 ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'json', '= 1.8.3'
4
+ gem 'fluentd', '~> 0.12.0'
5
+
6
+ gemspec
data/README.md CHANGED
@@ -126,8 +126,7 @@ You get:
126
126
  "log/events/ts=20130112-00/events_0.gz"
127
127
 
128
128
  The
129
- [fluent-mixin-config-placeholders](https://github.com/tagomoris/fluent-mixin-c
130
- onfig-placeholders) mixin is also incorporated, so additional variables such
129
+ [fluent-mixin-config-placeholders](https://github.com/tagomoris/fluent-mixin-config-placeholders) mixin is also incorporated, so additional variables such
131
130
  as %{hostname}, %{uuid}, etc. can be used in the s3_object_key_format. This
132
131
  could prove useful in preventing filename conflicts when writing from multiple
133
132
  servers.
@@ -158,7 +157,7 @@ See `Use your compression algorithm` section for adding another format.
158
157
  **format**
159
158
 
160
159
  Change one line format in the S3 object. Supported formats are "out_file",
161
- "json", "ltsv" and "single_value".
160
+ "json", "ltsv" and "single_value". See also [official Formatter article](http://docs.fluentd.org/articles/formatter-plugin-overview).
162
161
 
163
162
  * out_file (default).
164
163
 
@@ -260,8 +259,7 @@ using IAM roles. Valid values are:
260
259
  * private (default)
261
260
  * public-read
262
261
  * public-read-write (not recommended - see [Canned
263
- ACL](http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#cann
264
- ed-acl))
262
+ ACL](http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl))
265
263
  * authenticated-read
266
264
  * bucket-owner-read
267
265
  * bucket-owner-full-control
@@ -337,12 +335,9 @@ Typically, you use AssumeRole for cross-account access or federation.
337
335
  See also:
338
336
 
339
337
  * [Using IAM Roles - AWS Identity and Access
340
- Management](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.h
341
- tml)
342
- * [Aws::STS::Client](http://docs.aws.amazon.com/sdkforruby/api/Aws/STS/Clien
343
- t.html)
344
- * [Aws::AssumeRoleCredentials](http://docs.aws.amazon.com/sdkforruby/api/Aws
345
- /AssumeRoleCredentials.html)
338
+ Management](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)
339
+ * [Aws::STS::Client](http://docs.aws.amazon.com/sdkforruby/api/Aws/STS/Client.html)
340
+ * [Aws::AssumeRoleCredentials](http://docs.aws.amazon.com/sdkforruby/api/Aws/AssumeRoleCredentials.html)
346
341
 
347
342
  **role_arn (required)**
348
343
 
@@ -383,14 +378,11 @@ EC2 instance.
383
378
 
384
379
  See also:
385
380
 
386
- * [Aws::InstanceProfileCredentials](http://docs.aws.amazon.com/sdkforruby/ap
387
- i/Aws/InstanceProfileCredentials.html)
381
+ * [Aws::InstanceProfileCredentials](http://docs.aws.amazon.com/sdkforruby/api/Aws/InstanceProfileCredentials.html)
388
382
  * [Temporary Security Credentials - AWS Identity and Access
389
- Management](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials
390
- _temp.html)
383
+ Management](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)
391
384
  * [Instance Metadata and User Data - Amazon Elastic Compute
392
- Cloud](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-met
393
- adata.html)
385
+ Cloud](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
394
386
 
395
387
  **retries**
396
388
 
@@ -428,8 +420,7 @@ local developing.
428
420
 
429
421
  See also:
430
422
 
431
- * [Aws::SharedCredentials](http://docs.aws.amazon.com/sdkforruby/api/Aws/Sha
432
- redCredentials.html)
423
+ * [Aws::SharedCredentials](http://docs.aws.amazon.com/sdkforruby/api/Aws/SharedCredentials.html)
433
424
 
434
425
  **path**
435
426
 
@@ -456,8 +447,7 @@ Note that the bucket must already exist and **auto_create_bucket** has no
456
447
  effect in this case.
457
448
 
458
449
  Refer to the [AWS
459
- documentation](http://docs.aws.amazon.com/IAM/latest/UserGuide/ExampleIAMPolic
460
- ies.html) for example policies.
450
+ documentation](http://docs.aws.amazon.com/IAM/latest/UserGuide/ExampleIAMPolicies.html) for example policies.
461
451
 
462
452
  Using [IAM
463
453
  roles](http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.8
1
+ 0.6.9
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency "yajl-ruby", "~> 1.0"
23
23
  gem.add_dependency "fluent-mixin-config-placeholders", ">= 0.3.0"
24
24
  gem.add_development_dependency "rake", ">= 0.9.2"
25
+ gem.add_development_dependency "rr", "= 1.1.2"
25
26
  gem.add_development_dependency "test-unit", ">= 3.0.8"
26
27
  gem.add_development_dependency "test-unit-rr", ">= 1.0.3"
27
28
  gem.add_development_dependency "timecop"
@@ -1,6 +1,5 @@
1
1
  module Fluent
2
2
  require 'fluent/mixin/config_placeholders'
3
- require 'securerandom'
4
3
 
5
4
  class S3Output < Fluent::TimeSlicedOutput
6
5
  Fluent::Plugin.register_output('s3', self)
@@ -70,7 +69,7 @@ module Fluent
70
69
  config_param :profile_name, :string, :default => nil
71
70
  end
72
71
  desc "The number of attempts to load instance profile credentials from the EC2 metadata service using IAM role"
73
- config_param :aws_iam_retries, :integer, :default => 5
72
+ config_param :aws_iam_retries, :integer, :default => nil
74
73
  desc "S3 bucket name"
75
74
  config_param :s3_bucket, :string
76
75
  desc "S3 region name"
@@ -165,7 +164,6 @@ module Fluent
165
164
  end
166
165
 
167
166
  def start
168
- super
169
167
  options = setup_credentials
170
168
  options[:region] = @s3_region if @s3_region
171
169
  options[:endpoint] = @s3_endpoint if @s3_endpoint
@@ -181,8 +179,7 @@ module Fluent
181
179
  check_apikeys if @check_apikey_on_start
182
180
  ensure_bucket
183
181
 
184
- # Securerandom.hex(2) returns 4 length hex
185
- @hex_random_n = (@hex_random_length + 1) / 2
182
+ super
186
183
  end
187
184
 
188
185
  def format(tag, time, record)
@@ -257,25 +254,16 @@ module Fluent
257
254
 
258
255
  private
259
256
 
260
- # tsuffix is the one which file buffer filename has
261
- def tsuffix(chunk)
262
- if chunk.is_a?(Fluent::FileBufferChunk)
263
- unique_id = chunk.unique_id
264
- tsuffix = unique_id[0...(unique_id.size/2)].unpack('C*').map {|x| x.to_s(16) }.join('') # size: 16
265
- else
266
- nil
267
- end
257
+ # v0.14 has a useful Fluent::UniqueId.hex(unique_id) method, though
258
+ def unique_hex(chunk)
259
+ unique_id = chunk.unique_id
260
+ unique_id.unpack('C*').map {|x| x.to_s(16) }.join('')
268
261
  end
269
262
 
270
263
  def hex_random(chunk)
271
- if chunk.is_a?(Fluent::FileBufferChunk)
272
- # let me use tsuffix because its value is kept on retrying even after rebooting
273
- tsuffix = tsuffix(chunk)
274
- tsuffix.reverse! # tsuffix is like (time_sec, time_usec, rand) => reversing gives more randomness
275
- tsuffix[0...@hex_random_length]
276
- else
277
- SecureRandom.hex(@hex_random_n)[0...@hex_random_length]
278
- end
264
+ unique_hex = unique_hex(chunk)
265
+ unique_hex.reverse! # unique_hex is like (time_sec, time_usec, rand) => reversing gives more randomness
266
+ unique_hex[0...@hex_random_length]
279
267
  end
280
268
 
281
269
  def ensure_bucket
data/test/test_out_s3.rb CHANGED
@@ -26,7 +26,7 @@ class S3OutputTest < Test::Unit::TestCase
26
26
  ]
27
27
 
28
28
  def create_driver(conf = CONFIG)
29
- Fluent::Test::BufferedOutputTestDriver.new(Fluent::S3Output) do
29
+ Fluent::Test::TimeSlicedOutputTestDriver.new(Fluent::S3Output) do
30
30
  def write(chunk)
31
31
  chunk.read
32
32
  end
@@ -247,7 +247,7 @@ class S3OutputTest < Test::Unit::TestCase
247
247
 
248
248
  assert_equal %[2011-01-02T13:14:15Z\ttest\t{"a":1}\n] +
249
249
  %[2011-01-02T13:14:15Z\ttest\t{"a":2}\n],
250
- data
250
+ data.first
251
251
  end
252
252
 
253
253
  CONFIG_TIME_SLICE = %[
@@ -330,38 +330,24 @@ class S3OutputTest < Test::Unit::TestCase
330
330
  Dir.glob('tmp/*').each {|file| FileUtils.rm_f(file) }
331
331
  end
332
332
 
333
- def test_write_with_custom_s3_object_key_format_containing_hex_random_placeholder_memory_buffer
334
- hex = "012345"
335
- mock(SecureRandom).hex(3) { hex }
336
-
337
- config = CONFIG_TIME_SLICE.gsub(/%{hostname}/,"%{hex_random}") << "\nhex_random_length 5"
338
- write_with_custom_s3_object_key_format_containing_hex_random_placeholder(config, hex[0...5])
339
- end
340
-
341
- def test_write_with_custom_s3_object_key_format_containing_hex_random_placeholder_file_buffer
342
- tsuffix = "5226c3c4fb3d49b1"
343
- any_instance_of(Fluent::FileBufferChunk) do |klass|
344
- unique_id = "R&\xC3\xC4\xFB=I\xB1R&\xC3\xC4\xFB=I\xB1" # corresponding unique_id with tsuffxi
345
- stub(klass).unique_id { unique_id }
346
- end
347
- hex = tsuffix.reverse
333
+ # ToDo: need to test hex_random does not change on retry, but it is difficult with
334
+ # the current fluentd test helper because it does not provide a way to run with the same chunks
335
+ def test_write_with_custom_s3_object_key_format_containing_hex_random_placeholder
336
+ unique_hex = "5226c3c4fb3d49b15226c3c4fb3d49b1"
337
+ hex_random = unique_hex.reverse[0...5]
348
338
 
349
- config = CONFIG_TIME_SLICE.gsub(/%{hostname}/,"%{hex_random}") << "\nhex_random_length 16"
339
+ config = CONFIG_TIME_SLICE.gsub(/%{hostname}/,"%{hex_random}") << "\nhex_random_length #{hex_random.length}"
350
340
  config = config.gsub(/buffer_type memory/, "buffer_type file\nbuffer_path test/tmp/buf")
351
- write_with_custom_s3_object_key_format_containing_hex_random_placeholder(config, hex)
352
- end
353
341
 
354
- # ToDo: need to test hex_random does not change on retry, but it is difficult with
355
- # the current fluentd test helper because it does not provide a way to run with the same chunks
356
- def write_with_custom_s3_object_key_format_containing_hex_random_placeholder(config, hex)
357
342
  # Partial mock the S3Bucket, not to make an actual connection to Amazon S3
358
343
  setup_mocks(true)
359
344
 
360
- s3path = "log/events/ts=20110102-13/events_0-#{hex}.gz"
345
+ s3path = "log/events/ts=20110102-13/events_0-#{hex_random}.gz"
361
346
  s3_local_file_path = "/tmp/s3-test.txt"
362
347
  setup_s3_object_mocks(s3_local_file_path: s3_local_file_path, s3path: s3path)
363
348
 
364
349
  d = create_time_sliced_driver(config)
350
+ stub(d.instance).unique_hex { unique_hex }
365
351
 
366
352
  time = Time.parse("2011-01-02 13:14:15 UTC").to_i
367
353
  d.emit({"a"=>1}, time)
@@ -553,7 +539,7 @@ class S3OutputTest < Test::Unit::TestCase
553
539
  d.run
554
540
 
555
541
  logs = d.instance.log.logs
556
- assert_true logs.any? {|log| log.include?('[warn]: out_s3: delayed events were put') }
542
+ assert_true logs.any? {|log| log.include?('out_s3: delayed events were put') }
557
543
 
558
544
  Timecop.return
559
545
  FileUtils.rm_f(s3_local_file_path)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-19 00:00:00.000000000 Z
12
+ date: 2016-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -87,6 +87,20 @@ dependencies:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.9.2
90
+ - !ruby/object:Gem::Dependency
91
+ name: rr
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.2
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.1.2
90
104
  - !ruby/object:Gem::Dependency
91
105
  name: test-unit
92
106
  requirement: !ruby/object:Gem::Requirement
@@ -140,6 +154,7 @@ files:
140
154
  - AUTHORS
141
155
  - ChangeLog
142
156
  - Gemfile
157
+ - Gemfile.v0.12
143
158
  - README.md
144
159
  - Rakefile
145
160
  - VERSION
@@ -170,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
185
  version: '0'
171
186
  requirements: []
172
187
  rubyforge_project:
173
- rubygems_version: 2.2.2
188
+ rubygems_version: 2.5.1
174
189
  signing_key:
175
190
  specification_version: 4
176
191
  summary: Amazon S3 output plugin for Fluentd event collector