From b28ff6a3c6ad25d877b63013af245de5d6c70b10 Mon Sep 17 00:00:00 2001 From: Pádraig Brady
Date: Mon, 11 May 2015 14:25:19 +0100
Subject: tail: consistently output all data for truncated files
Generally if logs are truncated, they're truncated to 0 length,
so output all existing data when our heuristic determines truncation.
Note with inotify, truncate() and write() are often determined
independently and so all data would be written if that was the case.
* src/tail.c (check_fspec): Reset file offset to 0 upon truncation.
(tail_forever): Likewise.
(recheck): Add a FIXME for the related issue where tail may lose
data due to tail discounting older log files too early.
* tests/tail-2/truncate.sh: A new test.
* tests/local.mk: Reference the new test.
* NEWS: Mention the fix.
---
tests/local.mk | 1 +
tests/tail-2/truncate.sh | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+)
create mode 100755 tests/tail-2/truncate.sh
(limited to 'tests')
diff --git a/tests/local.mk b/tests/local.mk
index 025276332..8d01064bf 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -408,6 +408,7 @@ all_tests = \
tests/tail-2/retry.sh \
tests/tail-2/symlink.sh \
tests/tail-2/tail-c.sh \
+ tests/tail-2/truncate.sh \
tests/chmod/c-option.sh \
tests/chmod/equal-x.sh \
tests/chmod/equals.sh \
diff --git a/tests/tail-2/truncate.sh b/tests/tail-2/truncate.sh
new file mode 100755
index 000000000..82720fda0
--- /dev/null
+++ b/tests/tail-2/truncate.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Ensure all logs are output upon file truncation
+
+# Copyright (C) 2015 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see