GNU bug report logs -
#8544
tail bug - starting in 7.5 "tail --follow=name" behaves like "tail --follow=name --retry"
Previous Next
Reported by: Jim Meyering <jim <at> meyering.net>
Date: Sun, 24 Apr 2011 21:24:01 UTC
Severity: normal
Done: Jim Meyering <jim <at> meyering.net>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 8544 in the body.
You can then email your comments to 8544 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
owner <at> debbugs.gnu.org, bug-coreutils <at> gnu.org
:
bug#8544
; Package
coreutils
.
(Sun, 24 Apr 2011 21:24:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Jim Meyering <jim <at> meyering.net>
:
New bug report received and forwarded. Copy sent to
bug-coreutils <at> gnu.org
.
(Sun, 24 Apr 2011 21:24:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Tim Underwood wrote:
> Going from Ubuntu 10.04 (coreutils 7.4) to Ubuntu 10.10 (coreutils 8.5) I
> noticed that "tail --follow=name" started behaving like "tail --follow=name
> --retry". It looks like the issue started in 7.5 and still exists in 8.9.
>
> To reproduce:
>
> tail --follow=name this_file_does_not_exist
>
> The expected behavior is:
>
> $ ./coreutils-7.4/src/tail --follow=name this_file_does_not_exist
> ./coreutils-7.4/src/tail: cannot open `this_file_does_not_exist' for
> reading: No such file or directory
> ./coreutils-7.4/src/tail: no files remaining
>
> The wrong behavior is:
>
> $ ./coreutils-7.5/src/tail --follow=name this_file_does_not_exist
> ./coreutils-7.5/src/tail: cannot open `this_file_does_not_exist' for
> reading: No such file or directory
> <tail waits forever for this_file_does_not_exist to become available which
> is what --retry is for>
>
> Here's the wrong behavior on 8.9:
>
> $ ./coreutils-8.9/src/tail --follow=name this_file_does_not_exist
> ./coreutils-8.9/src/tail: cannot open `this_file_does_not_exist' for
> reading: No such file or directory
> <waits forever...>
>
> My specific use case is to tail a log file until it gets deleted at which
> point tail should exit allowing my script to continue.
Thanks again.
Here's the fix I expect to use:
From 79a476abb35a69f409e2848019c8ebc24cc687cf Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> redhat.com>
Date: Sun, 24 Apr 2011 23:20:01 +0200
Subject: [PATCH] tail --follow=name no longer implies --retry
* src/tail.c (tail_forever_inotify): Just as without inotify,
tail --follow=name now terminates when the last tailed-by-name file
is unlinked or moved aside. This bug was introduced on 2009-06-15
via commit ae494d4b, "tail: use inotify if it is available".
Reported by Tim Underwood in
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22286
* NEWS (Bug fixes): Mention this.
* tests/tail-2/follow-name: Test for this.
* tests/Makefile.am (TESTS): Add it.
---
NEWS | 5 +++++
THANKS.in | 1 +
src/tail.c | 10 ++++++++++
tests/Makefile.am | 1 +
tests/tail-2/follow-name | 32 ++++++++++++++++++++++++++++++++
5 files changed, 49 insertions(+), 0 deletions(-)
create mode 100755 tests/tail-2/follow-name
diff --git a/NEWS b/NEWS
index 7bc2ef3..3307e71 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,11 @@ GNU coreutils NEWS -*- outline -*-
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Bug fixes
+
+ tail's --follow=name option no longer implies --retry on systems
+ with inotify support. [bug introduced in coreutils-7.5]
+
** Changes in behavior
cp's extent-based (FIEMAP) copying code is more reliable in the face
diff --git a/THANKS.in b/THANKS.in
index 342a52c..d1ca380 100644
--- a/THANKS.in
+++ b/THANKS.in
@@ -560,6 +560,7 @@ Tim J. Robbins tjr <at> FreeBSD.org
Tim Mooney mooney <at> dogbert.cc.ndsu.NoDak.edu
Tim Ryan Tim_Ryan <at> bnz.co.nz
Tim Smithers mouse <at> dmouse.com.au
+Tim Underwood timunderwood <at> gmail.com
Tim Waugh twaugh <at> redhat
Toby Peterson toby <at> opendarwin.org
Todd A. Jacobs tjacobs <at> codegnome.org
diff --git a/src/tail.c b/src/tail.c
index 88fbd10..e6d8164 100644
--- a/src/tail.c
+++ b/src/tail.c
@@ -1432,6 +1432,16 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
struct File_spec *fspec;
struct inotify_event *ev;
+ /* When following by name without --retry, and the last file has
+ been unlinked or renamed-away, diagnose it and return. */
+ if (follow_mode == Follow_name
+ && ! reopen_inaccessible_files
+ && hash_get_n_entries (wd_to_name) == 0)
+ {
+ error (0, 0, _("no files remaining"));
+ return false;
+ }
+
/* When watching a PID, ensure that a read from WD will not block
indefinitely. */
if (pid)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 685eb52..2f4a561 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -489,6 +489,7 @@ TESTS = \
tail-2/assert-2 \
tail-2/big-4gb \
tail-2/flush-initial \
+ tail-2/follow-name \
tail-2/follow-stdin \
tail-2/pipe-f \
tail-2/pipe-f2 \
diff --git a/tests/tail-2/follow-name b/tests/tail-2/follow-name
new file mode 100755
index 0000000..ef9434a
--- /dev/null
+++ b/tests/tail-2/follow-name
@@ -0,0 +1,32 @@
+#!/bin/sh
+# ensure that --follow=name does not imply --retry
+
+# Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+print_ver_ tail
+
+cat <<\EOF > exp || framework_failure_
+tail: cannot open `no-such' for reading: No such file or directory
+tail: no files remaining
+EOF
+
+timeout 10 tail --follow=name no-such > out 2> err
+test $? = 1 || fail=1
+
+compare err exp || fail=1
+
+Exit $fail
--
1.7.5.rc3.316.gd1ff9
Reply sent
to
Jim Meyering <jim <at> meyering.net>
:
You have taken responsibility.
(Mon, 25 Apr 2011 09:24:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Jim Meyering <jim <at> meyering.net>
:
bug acknowledged by developer.
(Mon, 25 Apr 2011 09:24:02 GMT)
Full text and
rfc822 format available.
Message #10 received at 8544-done <at> debbugs.gnu.org (full text, mbox):
Jim Meyering wrote:
> Tim Underwood wrote:
>> Going from Ubuntu 10.04 (coreutils 7.4) to Ubuntu 10.10 (coreutils 8.5) I
>> noticed that "tail --follow=name" started behaving like "tail --follow=name
>> --retry". It looks like the issue started in 7.5 and still exists in 8.9.
...
>
> Thanks again.
> Here's the fix I expect to use:
>
> Subject: [PATCH] tail --follow=name no longer implies --retry
>
> * src/tail.c (tail_forever_inotify): Just as without inotify,
> tail --follow=name now terminates when the last tailed-by-name file
> is unlinked or moved aside. This bug was introduced on 2009-06-15
> via commit ae494d4b, "tail: use inotify if it is available".
> Reported by Tim Underwood in
> http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22286
> * NEWS (Bug fixes): Mention this.
> * tests/tail-2/follow-name: Test for this.
> * tests/Makefile.am (TESTS): Add it.
I've pushed that, and am closing this issue.
Information forwarded
to
owner <at> debbugs.gnu.org, bug-coreutils <at> gnu.org
:
bug#8544
; Package
coreutils
.
(Mon, 25 Apr 2011 16:18:02 GMT)
Full text and
rfc822 format available.
Message #13 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Thanks for the quick fix Jim! I verified the bug is now fixed in the git
repository.
-Tim
On Sun, Apr 24, 2011 at 2:22 PM, Jim Meyering <jim <at> meyering.net> wrote:
> Thanks again.
> Here's the fix I expect to use:
>
> From 79a476abb35a69f409e2848019c8ebc24cc687cf Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering <at> redhat.com>
> Date: Sun, 24 Apr 2011 23:20:01 +0200
> Subject: [PATCH] tail --follow=name no longer implies --retry
>
> * src/tail.c (tail_forever_inotify): Just as without inotify,
> tail --follow=name now terminates when the last tailed-by-name file
> is unlinked or moved aside. This bug was introduced on 2009-06-15
> via commit ae494d4b, "tail: use inotify if it is available".
> Reported by Tim Underwood in
> http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22286
> * NEWS (Bug fixes): Mention this.
> * tests/tail-2/follow-name: Test for this.
> * tests/Makefile.am (TESTS): Add it.
> ---
> NEWS | 5 +++++
> THANKS.in | 1 +
> src/tail.c | 10 ++++++++++
> tests/Makefile.am | 1 +
> tests/tail-2/follow-name | 32 ++++++++++++++++++++++++++++++++
> 5 files changed, 49 insertions(+), 0 deletions(-)
> create mode 100755 tests/tail-2/follow-name
>
> diff --git a/NEWS b/NEWS
> index 7bc2ef3..3307e71 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -2,6 +2,11 @@ GNU coreutils NEWS -*-
> outline -*-
>
> * Noteworthy changes in release ?.? (????-??-??) [?]
>
> +** Bug fixes
> +
> + tail's --follow=name option no longer implies --retry on systems
> + with inotify support. [bug introduced in coreutils-7.5]
> +
> ** Changes in behavior
>
> cp's extent-based (FIEMAP) copying code is more reliable in the face
> diff --git a/THANKS.in b/THANKS.in
> index 342a52c..d1ca380 100644
> --- a/THANKS.in
> +++ b/THANKS.in
> @@ -560,6 +560,7 @@ Tim J. Robbins tjr <at> FreeBSD.org
> Tim Mooney mooney <at> dogbert.cc.ndsu.NoDak.edu
> Tim Ryan Tim_Ryan <at> bnz.co.nz
> Tim Smithers mouse <at> dmouse.com.au
> +Tim Underwood timunderwood <at> gmail.com
> Tim Waugh twaugh <at> redhat
> Toby Peterson toby <at> opendarwin.org
> Todd A. Jacobs tjacobs <at> codegnome.org
> diff --git a/src/tail.c b/src/tail.c
> index 88fbd10..e6d8164 100644
> --- a/src/tail.c
> +++ b/src/tail.c
> @@ -1432,6 +1432,16 @@ tail_forever_inotify (int wd, struct File_spec *f,
> size_t n_files,
> struct File_spec *fspec;
> struct inotify_event *ev;
>
> + /* When following by name without --retry, and the last file has
> + been unlinked or renamed-away, diagnose it and return. */
> + if (follow_mode == Follow_name
> + && ! reopen_inaccessible_files
> + && hash_get_n_entries (wd_to_name) == 0)
> + {
> + error (0, 0, _("no files remaining"));
> + return false;
> + }
> +
> /* When watching a PID, ensure that a read from WD will not block
> indefinitely. */
> if (pid)
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 685eb52..2f4a561 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -489,6 +489,7 @@ TESTS = \
> tail-2/assert-2 \
> tail-2/big-4gb \
> tail-2/flush-initial \
> + tail-2/follow-name \
> tail-2/follow-stdin \
> tail-2/pipe-f \
> tail-2/pipe-f2 \
> diff --git a/tests/tail-2/follow-name b/tests/tail-2/follow-name
> new file mode 100755
> index 0000000..ef9434a
> --- /dev/null
> +++ b/tests/tail-2/follow-name
> @@ -0,0 +1,32 @@
> +#!/bin/sh
> +# ensure that --follow=name does not imply --retry
> +
> +# Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
> +
> +. "${srcdir=.}/init.sh"; path_prepend_ ../src
> +print_ver_ tail
> +
> +cat <<\EOF > exp || framework_failure_
> +tail: cannot open `no-such' for reading: No such file or directory
> +tail: no files remaining
> +EOF
> +
> +timeout 10 tail --follow=name no-such > out 2> err
> +test $? = 1 || fail=1
> +
> +compare err exp || fail=1
> +
> +Exit $fail
> --
> 1.7.5.rc3.316.gd1ff9
>
[Message part 2 (text/html, inline)]
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Tue, 24 May 2011 11:24:03 GMT)
Full text and
rfc822 format available.
This bug report was last modified 12 years and 334 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.