franz 1.5.12 → 1.5.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/franz/tail.rb +42 -16
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 022d5282e7924696be82dca5a9210acbc4d55a6f
4
- data.tar.gz: 08368537b4c26ffcbe125a2b9cf018052707d3f5
3
+ metadata.gz: fe1f11e03a934496042b3aadcc81e40d2cf59b67
4
+ data.tar.gz: 81bbfd598e84fef1c52c9be4e3fe929d27d962c6
5
5
  SHA512:
6
- metadata.gz: 4fa3dcab4866a10fcf5207d688824eff8bd04fcbb4beb32551cb8be5259780924a9b214482615d7a62b20451fdefc6162b78db698cdaf8949330d47c0b9ad2fb
7
- data.tar.gz: 689b0bd557e963ec683282876c5b918c04e4db5033f4f2e26b0743a4f39e27e83b9e6308b8c99c76cdf27b5d722036a4ea715dd989ed945419a2a9baa911705e
6
+ metadata.gz: e1aeabe202b7b2de60fe7712339fd9d379a9fcff7bdc2faef9c7720bc9e0915d45d8ed07b2bf98e0e2181c64a083fe8f7ced1541e1ac464a9c1441a22d6c1e27
7
+ data.tar.gz: 7562b1f45a366d3f28c98ba4e84a81831479b2cdb0a10218a3bdebf8468ac7e4d708653b7d414cc68022713d0c0f1382ba3492be580a52f4026e8b0fa72d91b5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.12
1
+ 1.5.13
data/lib/franz/tail.rb CHANGED
@@ -30,8 +30,9 @@ module Franz
30
30
  @cursors = opts[:cursors] || Hash.new
31
31
  @logger = opts[:logger] || Logger.new(STDOUT)
32
32
 
33
+ @nil_read = Hash.new { |h,k| h[k] = false }
33
34
  @buffer = Hash.new { |h, k| h[k] = BufferedTokenizer.new("\n", @line_limit) }
34
- @stop = false
35
+ @stop = false
35
36
 
36
37
  @tail_thread = Thread.new do
37
38
  handle(watch_events.shift) until @stop
@@ -66,6 +67,7 @@ module Franz
66
67
 
67
68
  def log ; @logger end
68
69
 
70
+
69
71
  def read path, size
70
72
  log.trace \
71
73
  event: 'read',
@@ -74,19 +76,24 @@ module Franz
74
76
  @cursors[path] ||= 0
75
77
  spread = size - @cursors[path]
76
78
 
77
- # Not convinced this would ever happen...
79
+ # A negative spread size means we've probably worked ahead of ourselves.
80
+ # In such a case, we'll ignore the request, as it's likely been fulfilled.
81
+ # We only need to worry if the spread size grows larger than the block
82
+ # size--that means something other than us reading threw Franz off...
78
83
  if spread < 0
79
- log.error \
80
- event: 'negative spread',
81
- path: path,
82
- size: size,
83
- cursor: @cursors[path],
84
- spread: spread
84
+ if spread.abs > @block_size
85
+ log.warn \
86
+ event: 'large spread',
87
+ path: path,
88
+ size: size,
89
+ cursor: @cursors[path],
90
+ spread: spread
91
+ end
85
92
  return
86
93
  end
87
94
 
88
95
  if spread > @read_limit
89
- log.trace \
96
+ log.warn \
90
97
  event: 'large read',
91
98
  path: path,
92
99
  size: size,
@@ -112,13 +119,14 @@ module Franz
112
119
  # Not so sure of myself here: It's been truncated, it's been rotated,
113
120
  # or else it no longer exists. We "return" in hopes that a :truncated,
114
121
  # :rotated, :deleted event comes along soon after. If it doesn't...
115
- log.warn \
122
+ log.error \
116
123
  event: 'nil read',
117
124
  path: path,
118
125
  size: size,
119
126
  cursor: @cursors[path],
120
127
  spread: (size - @cursors[path]),
121
128
  reason: reason_for_nil_data
129
+ @nil_read[path] = true
122
130
  return
123
131
  end
124
132
 
@@ -152,29 +160,47 @@ module Franz
152
160
  end
153
161
  end
154
162
 
163
+
155
164
  def close path
156
165
  log.trace event: 'close', path: path
157
166
  tail_events.push path: path, line: buffer[path].flush
167
+ @nil_read.delete path
158
168
  @cursors[path] = 0
159
169
  end
160
170
 
171
+
161
172
  def handle event
173
+ path, size = event[:path], event[:size]
162
174
  log.trace \
163
175
  event: 'handle',
164
176
  raw: event
165
177
  case event[:name]
178
+
179
+ when :deleted
180
+ close path
181
+
166
182
  when :replaced, :truncated
167
- close event[:path]
168
- read event[:path], event[:size]
183
+ close
184
+ read path, size
185
+
169
186
  when :appended
170
- read event[:path], event[:size]
171
- when :deleted
172
- close event[:path]
187
+ # Ignore read requests after a nil read. We'll wait for the next
188
+ # event that tells us to close the file. Fingers crossed...
189
+ unless @nil_read[path]
190
+ read path, size
191
+
192
+ else # following a nil read
193
+ log.debug \
194
+ event: 'skipping read',
195
+ raw: event
196
+ end
197
+
173
198
  else
174
199
  log.fatal event: 'invalid event', raw: event
175
200
  exit ERR_INVALID_EVENT
176
201
  end
177
- return event[:path]
202
+
203
+ return path
178
204
  end
179
205
  end
180
206
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: franz
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.12
4
+ version: 1.5.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Clemmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-11 00:00:00.000000000 Z
11
+ date: 2014-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny