logstash-input-file 4.1.6 → 4.1.7

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
  SHA256:
3
- metadata.gz: 52327c9fa0774f1a563698c9db6e9e1b5f6b0abebd7b80674ae4616c800a45b4
4
- data.tar.gz: cbf40e29bb2fb480cfd96edab5a2b287a0ad6c3ea18e13a0ada2a6850ed30a25
3
+ metadata.gz: 452117d6e30aa2df0ee9aa1f7c663a4bed00569489a53ba479f8b68789bb9051
4
+ data.tar.gz: 1724d57ff775ed4df8ef3821cafdb044163a8b6c246269269db4e7ef7d1bbe00
5
5
  SHA512:
6
- metadata.gz: fe35ff00a3b0063c183932d148d4eb9fe46f3e51b1db620cbdaa2db9cc479d6639830469576afde037282662cbda2ecc8c5a96f6c0bf880f4f963f191c54f9f9
7
- data.tar.gz: 227fe2d426d7493611946f17b299c2602f9f26da08b90b04f3e75402e61d088e2edaf123bd3fd4d9dc9f8a2fbc3840b432bb9f8e1629a78ce8f8db9d71664a58
6
+ metadata.gz: 555004eb3d45f7042703e1adc61b027a009baef5578ee6d3e4d22318c0a26244c47da571b68f55041851e82b305dbfcb7fd08d4888e4f85ca95cce63627b3d51
7
+ data.tar.gz: 7a4988cf0671f09eb1e37ed007adbee6aeb3f097f449e6246f04ac9e40dde80139343b0ae1f5321fd94f540b15b05e2dee676d208b0c71b944e8a9512ae985e2
@@ -1,3 +1,8 @@
1
+ ## 4.1.7
2
+ - Fixed problem in rotation handling where the target file being rotated was
3
+ subjected to the start_position setting when it must always start from the beginning.
4
+ [Issue #214](https://github.com/logstash-plugins/logstash-input-file/issues/214)
5
+
1
6
  ## 4.1.6
2
7
  - Fixed Errno::ENOENT exception in Discoverer. [Issue #204](https://github.com/logstash-plugins/logstash-input-file/issues/204)
3
8
 
@@ -15,7 +20,7 @@
15
20
  was possible to read into memory allocated but not filled with data resulting
16
21
  in ASCII NUL (0) bytes in the message field. Now, files are read up to the
17
22
  size as given by the remote filesystem client. Applies to tail and read modes.
18
-
23
+
19
24
  ## 4.1.3
20
25
  - Fixed `read` mode of regular files sincedb write is requested in each read loop
21
26
  iteration rather than waiting for the end-of-file to be reached. Note: for gz files,
@@ -56,7 +56,7 @@ module FileWatch
56
56
  end
57
57
 
58
58
  def discover_any_files(path, ongoing)
59
- fileset = Dir.glob(path).select{|f| File.file?(f) && !File.symlink?(f)}
59
+ fileset = Dir.glob(path).select{|f| File.file?(f)}
60
60
  logger.trace("discover_files", "count" => fileset.size)
61
61
  fileset.each do |file|
62
62
  pathname = Pathname.new(file)
@@ -80,6 +80,8 @@ module FileWatch module ReadMode
80
80
  end
81
81
  end
82
82
 
83
+ ## TODO add process_rotation_in_progress
84
+
83
85
  def process_active(watched_files)
84
86
  logger.trace("Active processing")
85
87
  # Handles watched_files in the active state.
@@ -168,14 +168,16 @@ module FileWatch module TailMode
168
168
  potential_sdb_value = @sincedb_collection.get(potential_key)
169
169
  logger.trace(">>> Rotation In Progress", "watched_file" => watched_file.details, "found_sdb_value" => sdb_value, "potential_key" => potential_key, "potential_sdb_value" => potential_sdb_value)
170
170
  if potential_sdb_value.nil?
171
+ logger.trace("---------- >>>> Rotation In Progress: rotating as existing file")
172
+ watched_file.rotate_as_file
173
+ trace_message = "---------- >>>> Rotation In Progress: no potential sincedb value "
171
174
  if sdb_value.nil?
172
- logger.trace("---------- >>> Rotation In Progress: rotating as initial file, no potential sincedb value AND no found sincedb value")
173
- watched_file.rotate_as_initial_file
175
+ trace_message.concat("AND no found sincedb value")
174
176
  else
175
- logger.trace("---------- >>>> Rotation In Progress: rotating as existing file, no potential sincedb value BUT found sincedb value")
176
- watched_file.rotate_as_file
177
+ trace_message.concat("BUT found sincedb value")
177
178
  sdb_value.clear_watched_file
178
179
  end
180
+ logger.trace(trace_message)
179
181
  new_sdb_value = SincedbValue.new(0)
180
182
  new_sdb_value.set_watched_file(watched_file)
181
183
  @sincedb_collection.set(potential_key, new_sdb_value)
@@ -76,12 +76,6 @@ module FileWatch
76
76
  @sdb_key_v1 = @stat.inode_struct
77
77
  end
78
78
 
79
- def rotate_as_initial_file
80
- # rotation, when no sincedb record exists for new inode - we have never seen this inode before.
81
- rotate_as_file
82
- @initial = true
83
- end
84
-
85
79
  def rotate_as_file(bytes_read = 0)
86
80
  # rotation, when a sincedb record exists for new inode, but no watched file to rotate from
87
81
  # probably caused by a deletion detected in the middle of the rename cascade
Binary file
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-file'
4
- s.version = '4.1.6'
4
+ s.version = '4.1.7'
5
5
  s.licenses = ['Apache-2.0']
6
6
  s.summary = "Streams events from files"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -28,7 +28,7 @@ module FileWatch
28
28
  let(:max) { 4095 }
29
29
  let(:stat_interval) { 0.01 }
30
30
  let(:discover_interval) { 15 }
31
- let(:start_new_files_at) { :beginning }
31
+ let(:start_new_files_at) { :end }
32
32
  let(:sincedb_path) { directory.join("tailing.sdb") }
33
33
  let(:opts) do
34
34
  {
@@ -447,5 +447,49 @@ module FileWatch
447
447
  expect(listener3.lines.size).to eq(0)
448
448
  end
449
449
  end
450
+
451
+ context "? rotation: when an active file is renamed inside the glob - issue 214" do
452
+ let(:watch_dir) { directory.join("*L.log") }
453
+ let(:file_path) { directory.join("1L.log") }
454
+ let(:second_file) { directory.join("2L.log") }
455
+ subject { described_class.new(conf) }
456
+ let(:listener1) { observer.listener_for(file1_path) }
457
+ let(:listener2) { observer.listener_for(second_file.to_path) }
458
+ let(:stat_interval) { 0.25 }
459
+ let(:discover_interval) { 1 }
460
+ let(:line4) { "Line 4 - Some other non lorem ipsum content" }
461
+ let(:actions) do
462
+ RSpec::Sequencing
463
+ .run_after(0.75, "create file") do
464
+ file_path.open("wb") { |file| file.puts(line1); file.puts(line2) }
465
+ end
466
+ .then_after(0.5, "rename") do
467
+ file_path.rename(second_file)
468
+ file_path.open("wb") { |file| file.puts("#{line3}") }
469
+ end
470
+ .then("wait for expectations to be met") do
471
+ wait(2.0).for{listener1.lines.size + listener2.lines.size}.to eq(3)
472
+ end
473
+ .then_after(0.5, "rename again") do
474
+ file_path.rename(second_file)
475
+ file_path.open("wb") { |file| file.puts("#{line4}") }
476
+ end
477
+ .then("wait for expectations to be met") do
478
+ wait(2.0).for{listener1.lines.size + listener2.lines.size}.to eq(4)
479
+ end
480
+ .then("quit") do
481
+ tailing.quit
482
+ end
483
+ end
484
+
485
+ it "content is read correctly, the renamed file is not reread from scratch" do
486
+ actions.activate_quietly
487
+ tailing.watch_this(watch_dir.to_path)
488
+ tailing.subscribe(observer)
489
+ actions.assert_no_errors
490
+ expect(listener1.lines).to eq([line1, line2, line3, line4])
491
+ expect(listener2.lines).to eq([])
492
+ end
493
+ end
450
494
  end
451
495
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-file
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.6
4
+ version: 4.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-10 00:00:00.000000000 Z
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement