fluent-plugin-kinesis 0.3.4 → 0.3.5
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.
- data/CHANGELOG.md +5 -0
- data/lib/fluent/plugin/out_kinesis.rb +14 -5
- data/lib/fluent/plugin/version.rb +1 -1
- data/test/plugin/test_out_kinesis.rb +110 -26
- metadata +29 -13
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.3.5
|
4
|
+
|
5
|
+
- **1MB record size limit**: Increased record size limit from 50KB to 1MB due to [Amazon Kinesis improvement.](http://aws.amazon.com/jp/about-aws/whats-new/2015/06/amazon-kinesis-announces-put-pricing-change-1mb-record-support-and-the-kinesis-producer-library/)
|
6
|
+
- **Switching IAM user support**: Added support for [shared credential file](http://docs.aws.amazon.com/ja_jp/AWSSdkDocsRuby/latest/DeveloperGuide/prog-basics-creds.html#creds-specify-provider).
|
7
|
+
|
3
8
|
## 0.3.4
|
4
9
|
|
5
10
|
- **Multi-byte UTF-8 support**: We now support multi-byte UTF-8 by using *use_yajl* option.
|
@@ -28,7 +28,7 @@ module FluentPluginKinesis
|
|
28
28
|
USER_AGENT_NAME = 'fluent-plugin-kinesis-output-filter'
|
29
29
|
PROC_BASE_STR = 'proc {|record| %s }'
|
30
30
|
PUT_RECORDS_MAX_COUNT = 500
|
31
|
-
PUT_RECORD_MAX_DATA_SIZE = 1024 *
|
31
|
+
PUT_RECORD_MAX_DATA_SIZE = 1024 * 1024
|
32
32
|
PUT_RECORDS_MAX_DATA_SIZE = 1024 * 1024 * 5
|
33
33
|
|
34
34
|
Fluent::Plugin.register_output('kinesis',self)
|
@@ -42,6 +42,9 @@ module FluentPluginKinesis
|
|
42
42
|
# it may be set as an environment variable.
|
43
43
|
config_param :region, :string, default: nil
|
44
44
|
|
45
|
+
config_param :profile, :string, :default => nil
|
46
|
+
config_param :credentials_path, :string, :default => nil
|
47
|
+
|
45
48
|
config_param :stream_name, :string
|
46
49
|
config_param :random_partition_key, :bool, default: false
|
47
50
|
config_param :partition_key, :string, default: nil
|
@@ -119,7 +122,7 @@ module FluentPluginKinesis
|
|
119
122
|
unless record_exceeds_max_size?(record['data'])
|
120
123
|
true
|
121
124
|
else
|
122
|
-
log.error sprintf('Record exceeds the
|
125
|
+
log.error sprintf('Record exceeds the %.3f KB(s) per-record size limit and will not be delivered: %s', PUT_RECORD_MAX_DATA_SIZE / 1024.0, record['data'])
|
123
126
|
false
|
124
127
|
end
|
125
128
|
}.map{|record|
|
@@ -160,6 +163,11 @@ module FluentPluginKinesis
|
|
160
163
|
access_key_id: @aws_key_id,
|
161
164
|
secret_access_key: @aws_sec_key,
|
162
165
|
)
|
166
|
+
elsif @profile
|
167
|
+
credentials_opts = {:profile_name => @profile}
|
168
|
+
credentials_opts[:path] = @credentials_path if @credentials_path
|
169
|
+
credentials = Aws::SharedCredentials.new(credentials_opts)
|
170
|
+
options[:credentials] = credentials
|
163
171
|
end
|
164
172
|
|
165
173
|
if @debug
|
@@ -226,15 +234,16 @@ module FluentPluginKinesis
|
|
226
234
|
records_payload_length = 0
|
227
235
|
data_list.each{|data_to_put|
|
228
236
|
payload = data_to_put[:data]
|
229
|
-
|
237
|
+
partition_key = data_to_put[:partition_key]
|
238
|
+
if records.length >= PUT_RECORDS_MAX_COUNT or (records_payload_length + payload.length + partition_key.length) >= PUT_RECORDS_MAX_DATA_SIZE
|
230
239
|
records_array.push(records)
|
231
240
|
records = []
|
232
241
|
records_payload_length = 0
|
233
242
|
end
|
234
243
|
records.push(data_to_put)
|
235
|
-
records_payload_length += payload.length
|
244
|
+
records_payload_length += (payload.length + partition_key.length)
|
236
245
|
}
|
237
|
-
records_array.push(records)
|
246
|
+
records_array.push(records) unless records.empty?
|
238
247
|
records_array
|
239
248
|
end
|
240
249
|
|
@@ -50,6 +50,66 @@ class KinesisOutputTest < Test::Unit::TestCase
|
|
50
50
|
assert_equal 'test_partition_key', d.instance.partition_key
|
51
51
|
end
|
52
52
|
|
53
|
+
def test_configure_with_credentials
|
54
|
+
d = create_driver(<<-EOS)
|
55
|
+
profile default
|
56
|
+
credentials_path /home/scott/.aws/credentials
|
57
|
+
stream_name test_stream
|
58
|
+
region us-east-1
|
59
|
+
partition_key test_partition_key
|
60
|
+
EOS
|
61
|
+
|
62
|
+
assert_equal 'default', d.instance.profile
|
63
|
+
assert_equal '/home/scott/.aws/credentials', d.instance.credentials_path
|
64
|
+
assert_equal 'test_stream', d.instance.stream_name
|
65
|
+
assert_equal 'us-east-1', d.instance.region
|
66
|
+
assert_equal 'test_partition_key', d.instance.partition_key
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_load_client
|
70
|
+
client = stub(Object.new)
|
71
|
+
client.describe_stream
|
72
|
+
client.put_records { {} }
|
73
|
+
|
74
|
+
stub(Aws::Kinesis::Client).new do |options|
|
75
|
+
assert_equal("test_key_id", options[:access_key_id])
|
76
|
+
assert_equal("test_sec_key", options[:secret_access_key])
|
77
|
+
assert_equal("us-east-1", options[:region])
|
78
|
+
client
|
79
|
+
end
|
80
|
+
|
81
|
+
d = create_driver
|
82
|
+
d.run
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_load_client_with_credentials
|
86
|
+
client = stub(Object.new)
|
87
|
+
client.describe_stream
|
88
|
+
client.put_records { {} }
|
89
|
+
|
90
|
+
stub(Aws::Kinesis::Client).new do |options|
|
91
|
+
assert_equal(nil, options[:access_key_id])
|
92
|
+
assert_equal(nil, options[:secret_access_key])
|
93
|
+
assert_equal("us-east-1", options[:region])
|
94
|
+
|
95
|
+
credentials = options[:credentials]
|
96
|
+
assert_equal("default", credentials.profile_name)
|
97
|
+
assert_equal("/home/scott/.aws/credentials", credentials.path)
|
98
|
+
|
99
|
+
client
|
100
|
+
end
|
101
|
+
|
102
|
+
d = create_driver(<<-EOS)
|
103
|
+
profile default
|
104
|
+
credentials_path /home/scott/.aws/credentials
|
105
|
+
stream_name test_stream
|
106
|
+
region us-east-1
|
107
|
+
partition_key test_partition_key
|
108
|
+
EOS
|
109
|
+
|
110
|
+
d.run
|
111
|
+
end
|
112
|
+
|
53
113
|
def test_configure_with_more_options
|
54
114
|
|
55
115
|
conf = %[
|
@@ -351,75 +411,99 @@ class KinesisOutputTest < Test::Unit::TestCase
|
|
351
411
|
|
352
412
|
def test_record_exceeds_max_size
|
353
413
|
d = create_driver
|
414
|
+
|
415
|
+
# PUT_RECORD_MAX_DATA_SIZE = 1024*1024 is way too big, try something smaller (10), just to verify the logic not the actual value
|
416
|
+
original_put_record_max_data_size = d.instance.class.send(:remove_const, :PUT_RECORD_MAX_DATA_SIZE) if d.instance.class.const_defined?(:PUT_RECORD_MAX_DATA_SIZE)
|
417
|
+
d.instance.class.const_set(:PUT_RECORD_MAX_DATA_SIZE, 10)
|
418
|
+
|
354
419
|
string = ''
|
355
|
-
(1..
|
420
|
+
(1..5).each{ string = string + '1' }
|
356
421
|
assert_equal(
|
357
422
|
false,
|
358
423
|
d.instance.send(:record_exceeds_max_size?,string)
|
359
424
|
)
|
360
425
|
|
361
426
|
string = ''
|
362
|
-
(1..
|
427
|
+
(1..10).each{ string = string + '1' }
|
363
428
|
assert_equal(
|
364
429
|
false,
|
365
430
|
d.instance.send(:record_exceeds_max_size?,string)
|
366
431
|
)
|
367
432
|
|
368
433
|
string = ''
|
369
|
-
(1..
|
434
|
+
(1..11).each{ string = string + '1' }
|
370
435
|
assert_equal(
|
371
436
|
true,
|
372
437
|
d.instance.send(:record_exceeds_max_size?,string)
|
373
438
|
)
|
439
|
+
|
440
|
+
# reset the constant
|
441
|
+
d.instance.class.const_set(:PUT_RECORD_MAX_DATA_SIZE, original_put_record_max_data_size)
|
374
442
|
end
|
375
443
|
|
376
444
|
def test_build_records_array_to_put
|
377
445
|
d = create_driver
|
378
446
|
|
447
|
+
# PUT_RECORDS_MAX_DATA_SIZE = 1024*1024*5 is way too big, try something smaller (100), just to verify the logic not the actual value
|
448
|
+
original_put_records_max_data_size = d.instance.class.send(:remove_const, :PUT_RECORDS_MAX_DATA_SIZE) if d.instance.class.const_defined?(:PUT_RECORDS_MAX_DATA_SIZE)
|
449
|
+
d.instance.class.const_set(:PUT_RECORDS_MAX_DATA_SIZE, 100)
|
450
|
+
|
451
|
+
# PUT_RECORDS_MAX_COUNT = 500 is way too big, try something smaller (10), just to verify the logic not the actual value
|
452
|
+
original_put_records_max_count = d.instance.class.send(:remove_const, :PUT_RECORDS_MAX_COUNT) if d.instance.class.const_defined?(:PUT_RECORDS_MAX_COUNT)
|
453
|
+
d.instance.class.const_set(:PUT_RECORDS_MAX_COUNT, 10)
|
454
|
+
|
379
455
|
data_list = []
|
380
|
-
(0..
|
381
|
-
data_list.push({data:
|
456
|
+
(0..10).each do |n|
|
457
|
+
data_list.push({data: '1', partition_key: '0'})
|
382
458
|
end
|
383
459
|
result = d.instance.send(:build_records_array_to_put,data_list)
|
384
460
|
assert_equal(2,result.length)
|
385
|
-
assert_equal(
|
461
|
+
assert_equal(10,result[0].length)
|
386
462
|
assert_equal(1,result[1].length)
|
387
463
|
|
388
464
|
data_list = []
|
389
|
-
(0..
|
390
|
-
data_list.push({data: '1'})
|
465
|
+
(0..24).each do
|
466
|
+
data_list.push({data: '1', partition_key: '0'})
|
391
467
|
end
|
392
468
|
result = d.instance.send(:build_records_array_to_put,data_list)
|
393
469
|
assert_equal(3,result.length)
|
394
|
-
assert_equal(
|
395
|
-
assert_equal(
|
396
|
-
assert_equal(
|
470
|
+
assert_equal(10,result[0].length)
|
471
|
+
assert_equal(10,result[1].length)
|
472
|
+
assert_equal(5,result[2].length)
|
397
473
|
|
398
474
|
data_list = []
|
399
|
-
|
400
|
-
|
401
|
-
data_string = data_string + '1'
|
402
|
-
end
|
403
|
-
(0..500).each do
|
404
|
-
data_list.push({data: data_string})
|
475
|
+
(0..20).each do
|
476
|
+
data_list.push({data: '0123456789', partition_key: '1'})
|
405
477
|
end
|
478
|
+
# Should return 3 lists: 9*11 + 9*11 + 3*11
|
406
479
|
result = d.instance.send(:build_records_array_to_put,data_list)
|
407
480
|
assert_equal(3,result.length)
|
408
|
-
assert_equal(
|
481
|
+
assert_equal(9,result[0].length)
|
409
482
|
assert_operator(
|
410
|
-
|
411
|
-
result[0].reduce(0){|sum,i| sum + i[:data].length}
|
483
|
+
100, :>,
|
484
|
+
result[0].reduce(0){|sum,i| sum + i[:data].length + i[:partition_key].length}
|
412
485
|
)
|
413
|
-
assert_equal(
|
486
|
+
assert_equal(9,result[1].length)
|
414
487
|
assert_operator(
|
415
|
-
|
416
|
-
result[1].reduce(0){|sum,i| sum + i[:data].length}
|
488
|
+
100, :>,
|
489
|
+
result[1].reduce(0){|sum,i| sum + i[:data].length + i[:partition_key].length}
|
417
490
|
)
|
418
|
-
assert_equal(
|
491
|
+
assert_equal(3,result[2].length)
|
419
492
|
assert_operator(
|
420
|
-
|
421
|
-
result[2].reduce(0){|sum,i| sum + i[:data].length}
|
493
|
+
100, :>,
|
494
|
+
result[2].reduce(0){|sum,i| sum + i[:data].length + i[:partition_key].length}
|
422
495
|
)
|
496
|
+
|
497
|
+
# reset the constants
|
498
|
+
d.instance.class.const_set(:PUT_RECORDS_MAX_DATA_SIZE, original_put_records_max_data_size)
|
499
|
+
d.instance.class.const_set(:PUT_RECORDS_MAX_COUNT, original_put_records_max_count)
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_build_empty_array_to_put
|
503
|
+
d = create_driver
|
504
|
+
data_list = []
|
505
|
+
result = d.instance.send(:build_records_array_to_put,data_list)
|
506
|
+
assert_equal(0, result.length, 'Should return empty array if there is no record')
|
423
507
|
end
|
424
508
|
|
425
509
|
def test_build_data_to_put
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-kinesis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Amazon Web Services
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: test-unit-rr
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,8 +62,9 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: fluentd
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: 0.10.53
|
62
70
|
- - <
|
@@ -65,8 +73,9 @@ dependencies:
|
|
65
73
|
type: :runtime
|
66
74
|
prerelease: false
|
67
75
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
68
77
|
requirements:
|
69
|
-
- - '>='
|
78
|
+
- - ! '>='
|
70
79
|
- !ruby/object:Gem::Version
|
71
80
|
version: 0.10.53
|
72
81
|
- - <
|
@@ -75,8 +84,9 @@ dependencies:
|
|
75
84
|
- !ruby/object:Gem::Dependency
|
76
85
|
name: aws-sdk-core
|
77
86
|
requirement: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
78
88
|
requirements:
|
79
|
-
- - '>='
|
89
|
+
- - ! '>='
|
80
90
|
- !ruby/object:Gem::Version
|
81
91
|
version: 2.0.12
|
82
92
|
- - <
|
@@ -85,8 +95,9 @@ dependencies:
|
|
85
95
|
type: :runtime
|
86
96
|
prerelease: false
|
87
97
|
version_requirements: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
88
99
|
requirements:
|
89
|
-
- - '>='
|
100
|
+
- - ! '>='
|
90
101
|
- !ruby/object:Gem::Version
|
91
102
|
version: 2.0.12
|
92
103
|
- - <
|
@@ -95,6 +106,7 @@ dependencies:
|
|
95
106
|
- !ruby/object:Gem::Dependency
|
96
107
|
name: multi_json
|
97
108
|
requirement: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
98
110
|
requirements:
|
99
111
|
- - ~>
|
100
112
|
- !ruby/object:Gem::Version
|
@@ -102,6 +114,7 @@ dependencies:
|
|
102
114
|
type: :runtime
|
103
115
|
prerelease: false
|
104
116
|
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
105
118
|
requirements:
|
106
119
|
- - ~>
|
107
120
|
- !ruby/object:Gem::Version
|
@@ -109,15 +122,17 @@ dependencies:
|
|
109
122
|
- !ruby/object:Gem::Dependency
|
110
123
|
name: msgpack
|
111
124
|
requirement: !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
112
126
|
requirements:
|
113
|
-
- - '>='
|
127
|
+
- - ! '>='
|
114
128
|
- !ruby/object:Gem::Version
|
115
129
|
version: 0.5.8
|
116
130
|
type: :runtime
|
117
131
|
prerelease: false
|
118
132
|
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
119
134
|
requirements:
|
120
|
-
- - '>='
|
135
|
+
- - ! '>='
|
121
136
|
- !ruby/object:Gem::Version
|
122
137
|
version: 0.5.8
|
123
138
|
description:
|
@@ -143,26 +158,27 @@ files:
|
|
143
158
|
homepage: https://github.com/awslabs/aws-fluent-plugin-kinesis
|
144
159
|
licenses:
|
145
160
|
- Apache License, Version 2.0
|
146
|
-
metadata: {}
|
147
161
|
post_install_message:
|
148
162
|
rdoc_options: []
|
149
163
|
require_paths:
|
150
164
|
- lib
|
151
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
152
167
|
requirements:
|
153
|
-
- - '>='
|
168
|
+
- - ! '>='
|
154
169
|
- !ruby/object:Gem::Version
|
155
170
|
version: 1.9.3
|
156
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
157
173
|
requirements:
|
158
|
-
- - '>='
|
174
|
+
- - ! '>='
|
159
175
|
- !ruby/object:Gem::Version
|
160
176
|
version: '0'
|
161
177
|
requirements: []
|
162
178
|
rubyforge_project:
|
163
|
-
rubygems_version:
|
179
|
+
rubygems_version: 1.8.23
|
164
180
|
signing_key:
|
165
|
-
specification_version:
|
181
|
+
specification_version: 3
|
166
182
|
summary: Fluentd output plugin that sends events to Amazon Kinesis.
|
167
183
|
test_files:
|
168
184
|
- test/helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1afe44290b2075c66e362e31b6ad9239b8b8a4f1
|
4
|
-
data.tar.gz: 8317862b2882294c24efd9d1e1d3434e37a82ba6
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: d3ed7132f9ab1022c75de1eef2732858adf4cacfeb607b4a7543e3989ce6541d14b601521062eedd966bd49f52a3f8d5812505e1fedcae6fd098c29ec863f35e
|
7
|
-
data.tar.gz: 890a373bdb0c9752026fc52120b444b7eb84dbf3abc116ea4d8d78816cb0dcf8f5f35c83ca888ab295dc251a4599e1d2f9681f7ee892c0ccf93be761409a893c
|