fluent-plugin-kinesis-firehose 0.1.1 → 0.1.2.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac09d1fd780d1623ec87b31f2af2d780f91a307d
4
- data.tar.gz: a420cfd20a9b7a3f531a88f48d58ff6e579a110f
3
+ metadata.gz: b5a52689533a4ac87d41ce025a97f9caca093dbc
4
+ data.tar.gz: 9d2bfd0b85ed883067979a1de7b014290f265f56
5
5
  SHA512:
6
- metadata.gz: f1fc0ab30520e7d4efd0c1799350ecc576215c79d6b120db00537301ea946297b72ec2587b8382bdfdd21dd1f18248d7df150d0df66683f0491df145e9996240
7
- data.tar.gz: 7003b63c6188b0b27554a398d82e4e881e03203511c101456af347ae89ddbb49f120cbba404a3acf09fa4b5a4dbd3dc87ca233cbbbac1b221bf35d5473cb1149
6
+ metadata.gz: 142208dbeccfad34374d724762f01a53ef3743e9204038b9fdb8932831db63adde4e9c8e3e03c44e90d23287f2ae1776ae8a4f472f66c88982da4279d0d28400
7
+ data.tar.gz: 53da4b07a323773d3ae87eebbe62992ec664430205864ff247524d9d9fcdb3f4cc27ba8a3036c4193e819943df19e84176447d21c8d2cf4e80b61bb1f07dc7dc
data/README.md CHANGED
@@ -5,6 +5,11 @@ Fluentd output plugin for Amazon Kinesis Firehose.
5
5
  [![Gem Version](https://badge.fury.io/rb/fluent-plugin-kinesis-firehose.svg)](http://badge.fury.io/rb/fluent-plugin-kinesis-firehose)
6
6
  [![Build Status](https://travis-ci.org/winebarrel/fluent-plugin-kinesis-firehose.svg)](https://travis-ci.org/winebarrel/fluent-plugin-kinesis-firehose)
7
7
 
8
+ ## ChangeLog
9
+
10
+ * `>= 0.1.2`
11
+ * Add `retries_on_putrecordbatch` option ([PR#2](https://github.com/winebarrel/fluent-plugin-kinesis-firehose/pull/3))
12
+
8
13
  ## Installation
9
14
 
10
15
  Add this line to your application's Gemfile:
@@ -35,6 +40,7 @@ Or install it yourself as:
35
40
  #aws_sec_key ...
36
41
  region us-east-1
37
42
  #endpoint ...
43
+ #retries_on_putrecordbatch 3
38
44
 
39
45
  #data_key data (default: nil)
40
46
 
@@ -14,16 +14,17 @@ class Fluent::KinesisFirehoseOutput < Fluent::BufferedOutput
14
14
  define_method('log') { $log }
15
15
  end
16
16
 
17
- config_param :profile, :string, :default => nil
18
- config_param :credentials_path, :string, :default => nil
19
- config_param :aws_key_id, :string, :default => nil, :secret => true
20
- config_param :aws_sec_key, :string, :default => nil, :secret => true
21
- config_param :region, :string, :default => nil
22
- config_param :endpoint, :string, :default => nil
23
- config_param :http_proxy, :string, :default => nil
24
- config_param :delivery_stream_name, :string
25
- config_param :data_key, :string, :default => nil
26
- config_param :append_new_line, :bool, :default => true
17
+ config_param :profile, :string, :default => nil
18
+ config_param :credentials_path, :string, :default => nil
19
+ config_param :aws_key_id, :string, :default => nil, :secret => true
20
+ config_param :aws_sec_key, :string, :default => nil, :secret => true
21
+ config_param :region, :string, :default => nil
22
+ config_param :endpoint, :string, :default => nil
23
+ config_param :http_proxy, :string, :default => nil
24
+ config_param :delivery_stream_name, :string
25
+ config_param :data_key, :string, :default => nil
26
+ config_param :append_new_line, :bool, :default => true
27
+ config_param :retries_on_putrecordbatch, :integer, :default => 3
27
28
 
28
29
  def initialize
29
30
  super
@@ -33,6 +34,7 @@ class Fluent::KinesisFirehoseOutput < Fluent::BufferedOutput
33
34
 
34
35
  def configure(conf)
35
36
  super
37
+ @sleep_duration = Array.new(@retries_on_putrecordbatch) {|n| ((2 ** n) * scaling_factor) }
36
38
  end
37
39
 
38
40
  def format(tag, time, record)
@@ -54,6 +56,9 @@ class Fluent::KinesisFirehoseOutput < Fluent::BufferedOutput
54
56
  }.each_slice(PUT_RECORDS_MAX_COUNT) {|data_list|
55
57
  put_records(data_list)
56
58
  }
59
+ rescue => e
60
+ log.error e.message
61
+ log.error_backtrace e.backtrace
57
62
  end
58
63
 
59
64
  private
@@ -86,19 +91,54 @@ class Fluent::KinesisFirehoseOutput < Fluent::BufferedOutput
86
91
  false
87
92
  end
88
93
  }.each {|chunk|
89
- put_record_batch(chunk)
94
+ put_record_batch_with_retry(chunk)
90
95
  }
91
96
  end
92
97
 
93
- def put_record_batch(data_list)
98
+ def put_record_batch_with_retry(data_list, retry_count=0)
94
99
  records = data_list.map do |data|
95
100
  {:data => data}
96
101
  end
97
102
 
98
- client.put_record_batch(
103
+ response = client.put_record_batch(
99
104
  :delivery_stream_name => @delivery_stream_name,
100
105
  :records => records
101
106
  )
107
+
108
+ if response[:failed_put_count] && response[:failed_put_count] > 0
109
+ failed_records = collect_failed_records(data_list, response)
110
+
111
+ if retry_count < @retries_on_putrecordbatch
112
+ sleep @sleep_duration[retry_count]
113
+ retry_count += 1
114
+ log.warn 'Retrying to put records. Retry count: %d' % retry_count
115
+ put_record_batch_with_retry(failed_records.map{|record| record[:data] }, retry_count)
116
+ else
117
+ failed_records.each {|record|
118
+ log.error 'Could not put record, Error: %s/%s, Record: %s' % [
119
+ record[:error_code],
120
+ record[:error_message],
121
+ record[:data]
122
+ ]
123
+ }
124
+ end
125
+ end
126
+ end
127
+
128
+ def collect_failed_records(data_list, response)
129
+ failed_records = []
130
+
131
+ response[:request_responses].each_with_index do |record, index|
132
+ if record[:error_code]
133
+ failed_records.push(
134
+ data: data_list[index],
135
+ error_code: record[:error_code],
136
+ error_message: record[:error_message]
137
+ )
138
+ end
139
+ end
140
+
141
+ failed_records
102
142
  end
103
143
 
104
144
  def client
@@ -127,4 +167,8 @@ class Fluent::KinesisFirehoseOutput < Fluent::BufferedOutput
127
167
 
128
168
  @client = Aws::Firehose::Client.new(options)
129
169
  end
170
+
171
+ def scaling_factor
172
+ 0.5 + rand * 0.1
173
+ end
130
174
  end
@@ -1,3 +1,3 @@
1
1
  module FluentPluginKinesisFirehose
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2.beta'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kinesis-firehose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -142,12 +142,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - '>='
145
+ - - '>'
146
146
  - !ruby/object:Gem::Version
147
- version: '0'
147
+ version: 1.3.1
148
148
  requirements: []
149
149
  rubyforge_project:
150
- rubygems_version: 2.0.14.1
150
+ rubygems_version: 2.4.8
151
151
  signing_key:
152
152
  specification_version: 4
153
153
  summary: Fluentd output plugin for Amazon Kinesis Firehose.