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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/franz/tail.rb +42 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe1f11e03a934496042b3aadcc81e40d2cf59b67
|
4
|
+
data.tar.gz: 81bbfd598e84fef1c52c9be4e3fe929d27d962c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1aeabe202b7b2de60fe7712339fd9d379a9fcff7bdc2faef9c7720bc9e0915d45d8ed07b2bf98e0e2181c64a083fe8f7ced1541e1ac464a9c1441a22d6c1e27
|
7
|
+
data.tar.gz: 7562b1f45a366d3f28c98ba4e84a81831479b2cdb0a10218a3bdebf8468ac7e4d708653b7d414cc68022713d0c0f1382ba3492be580a52f4026e8b0fa72d91b5
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.5.
|
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
|
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
|
-
#
|
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
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
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.
|
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.
|
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
|
168
|
-
read
|
183
|
+
close
|
184
|
+
read path, size
|
185
|
+
|
169
186
|
when :appended
|
170
|
-
read
|
171
|
-
|
172
|
-
|
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
|
-
|
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.
|
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
|
+
date: 2014-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|