franz 1.5.12 → 1.5.13

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.
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