fluent-plugin-hash-forward 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f74749e5f39d35519ab2ff9c7efb3e3ce762d20
4
- data.tar.gz: 3752dac28ed939a2b3f3a32cc302a73cd848a973
3
+ metadata.gz: 58c1901df40204d868036947204e3ddba0b9deb8
4
+ data.tar.gz: 49c26894fa7146c4e325421a95cb0fdd18b0c44c
5
5
  SHA512:
6
- metadata.gz: 33659670df6dabaedb7d48f589c1b3f18b992611a0360646eb844138c2136d57f2f9b6b5106714fd46d4299b0becaf05b447327c8eaa7d426072c7133f710cdd
7
- data.tar.gz: 70079997a04d14d43ef96ef84bdf1d41506e6852b8906cff1dcf27344865b1c6acf034d7ffd305e894c5f0fd0fa7c8dd7b0bdb9b60cfa634172b7aea7f690661
6
+ metadata.gz: 0ae92af4933774b82d51672c97b1a1e7f40b2f0a71bf135e18136771c050f506c3fc773fb5310a84ea0200906ca51079393dbdba5ee60db9d40f447dee76d056
7
+ data.tar.gz: d592184b580aa7adfaac3cca70ec7681b066d581d0a61336f1d5404a2fa9417e16e454b8f27573048299e9652296dff7f59770d2947a3092539e6d4321f244c0
@@ -1,3 +1,10 @@
1
+ # 0.3.5 (2014/03/24)
2
+
3
+ Fixes
4
+
5
+ * Explicitly close standby node socket on recovering in keepalive
6
+ * Explicitly close socket if an error raised even in keepalive
7
+
1
8
  # 0.3.4 (2014/03/19)
2
9
 
3
10
  Fixes
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-hash-forward"
6
- s.version = "0.3.4"
6
+ s.version = "0.3.5"
7
7
  s.authors = ["Ryosuke IWANAGA", "Naotoshi Seo"]
8
8
  s.email = ["riywo.jp@gmail.com", "sonots@gmail.com"]
9
9
  s.homepage = "https://github.com/riywo/fluent-plugin-hash-forward"
@@ -125,6 +125,9 @@ class Fluent::HashForwardOutput < Fluent::ForwardOutput
125
125
  error = nil
126
126
  nodes = nodes(tag)
127
127
 
128
+ if @keepalive and primary_available?(nodes)
129
+ sock_close(nodes.last) # close standby
130
+ end
128
131
  # below is just copy from out_forward
129
132
  nodes.each do |node|
130
133
  if node.available?
@@ -173,6 +176,10 @@ class Fluent::HashForwardOutput < Fluent::ForwardOutput
173
176
  @cache_nodes[tag] = nodes
174
177
  end
175
178
 
179
+ def primary_available?(nodes)
180
+ nodes.size > 1 && nodes.first.available?
181
+ end
182
+
176
183
  # hashing(key) mod N
177
184
  def get_index(key, size)
178
185
  str_hash(key) % size
@@ -192,21 +199,29 @@ class Fluent::HashForwardOutput < Fluent::ForwardOutput
192
199
 
193
200
  # Override for keepalive
194
201
  def send_data(node, tag, chunk)
202
+ sock = nil
195
203
  get_mutex(node).synchronize do
196
- sock = get_sock[node]
204
+ sock = get_sock[node] if @keepalive
197
205
  unless sock
198
206
  sock = reconnect(node)
207
+ cache_sock(node, sock) if @keepalive
199
208
  end
200
209
 
201
210
  begin
202
211
  sock_write(sock, tag, chunk)
203
212
  node.heartbeat(false)
213
+ log.debug "out_hash_forward: write to", :host=>node.host, :port=>node.port
204
214
  rescue Errno::EPIPE, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ETIMEDOUT => e
205
- log.warn "out_hash_forward: send_data failed #{e.class} #{e.message}, try to reconnect", :host=>node.host, :port=>node.port
206
- sock = reconnect(node)
207
- retry
215
+ log.warn "out_hash_forward: send_data failed #{e.class} #{e.message}", :host=>node.host, :port=>node.port
216
+ if @keepalive
217
+ sock.close rescue IOError
218
+ cache_sock(node, nil)
219
+ end
220
+ raise e
208
221
  ensure
209
- sock.close if sock and !@keepalive
222
+ unless @keepalive
223
+ sock.close if sock
224
+ end
210
225
  end
211
226
  end
212
227
  end
@@ -219,11 +234,6 @@ class Fluent::HashForwardOutput < Fluent::ForwardOutput
219
234
  opt = [@send_timeout.to_i, 0].pack('L!L!') # struct timeval
220
235
  sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, opt)
221
236
 
222
- if @keepalive
223
- get_sock[node] = sock
224
- get_sock_expired_at[node] = Time.now + @keepalive_time if @keepalive_time
225
- end
226
-
227
237
  sock
228
238
  end
229
239
 
@@ -264,18 +274,41 @@ class Fluent::HashForwardOutput < Fluent::ForwardOutput
264
274
  sock.close rescue IOError if sock
265
275
  @sock[thread_id][node] = nil
266
276
  @sock_expired_at[thread_id][node] = nil
277
+ log.debug "out_hash_forward: keepalive connection closed", :host=>node.host, :port=>node.port, :thread_id=>thread_id
267
278
  end
268
279
  end
269
280
  end
270
281
  end
271
282
  end
272
283
 
284
+ def sock_close(node)
285
+ get_mutex(node).synchronize do
286
+ if sock = get_sock[node]
287
+ sock.close rescue IOError
288
+ log.info "out_hash_forward: keepalive connection closed", :host=>node.host, :port=>node.port
289
+ end
290
+ get_sock[node] = nil
291
+ get_sock_expired_at[node] = nil
292
+ end
293
+ end
294
+
273
295
  def get_mutex(node)
274
296
  thread_id = Thread.current.object_id
275
297
  @mutex[thread_id] ||= {}
276
298
  @mutex[thread_id][node] ||= Mutex.new
277
299
  end
278
300
 
301
+ def cache_sock(node, sock)
302
+ if sock
303
+ get_sock[node] = sock
304
+ get_sock_expired_at[node] = Time.now + @keepalive_time if @keepalive_time
305
+ log.info "out_hash_forward: keepalive connection opened", :host=>node.host, :port=>node.port
306
+ else
307
+ get_sock[node] = nil
308
+ get_sock_expired_at[node] = nil
309
+ end
310
+ end
311
+
279
312
  def get_sock
280
313
  @sock[Thread.current.object_id] ||= {}
281
314
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-hash-forward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryosuke IWANAGA
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-19 00:00:00.000000000 Z
12
+ date: 2014-03-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd