-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2695 from jhscheer/tail_notify
`tail` overhaul (--follow=name, etc.)
- Loading branch information
Showing
13 changed files
with
2,917 additions
and
198 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,47 @@ | ||
# Notes / ToDO | ||
<!-- spell-checker:ignore markdownlint ; (misc) backends kqueue Testsuite ksyms stdlib --> | ||
|
||
- Rudimentary tail implementation. | ||
# Notes / ToDO | ||
|
||
## Missing features | ||
|
||
### Flags with features | ||
* `--max-unchanged-stats` | ||
* check whether process p is alive at least every number of seconds (relevant for `--pid`) | ||
|
||
- [ ] `--max-unchanged-stats` : with `--follow=name`, reopen a FILE which has not changed size after N (default 5) iterations to see if it has been unlinked or renamed (this is the usual case of rotated log files). With `inotify`, this option is rarely useful. | ||
- [ ] `--retry` : keep trying to open a file even when it is or becomes inaccessible; useful when follow‐ing by name, i.e., with `--follow=name` | ||
Note: | ||
There's a stub for `--max-unchanged-stats` so GNU test-suite checks using it can run, however this flag has no functionality yet. | ||
|
||
### Others | ||
### Platform support for `--follow` and `--retry` | ||
The `--follow=descriptor`, `--follow=name` and `--retry` flags have very good support on Linux (inotify backend). | ||
They work good enough on macOS/BSD (kqueue backend) with some tests failing due to differences of how kqueue works compared to inotify. | ||
Windows support is there in theory due to ReadDirectoryChanges support by the notify-crate, however these flags are completely untested on Windows. | ||
|
||
- [ ] The current implementation doesn't follow stdin in non-unix platforms | ||
Note: | ||
The undocumented `---disable-inotify` flag is used to disable the inotify backend to test polling. | ||
However inotify is a Linux only backend and polling is now supported also for the other backends. | ||
Because of this, `disable-inotify` is now an alias to the new and more versatile flag name: `--use-polling`. | ||
|
||
## Possible optimizations | ||
|
||
- [ ] Don't read the whole file if not using `-f` and input is regular file. Read in chunks from the end going backwards, reading each individual chunk forward. | ||
* Don't read the whole file if not using `-f` and input is regular file. Read in chunks from the end going backwards, reading each individual chunk forward. | ||
* Reduce number of system calls to e.g. `fstat` | ||
* Improve resource management by adding more system calls to `inotify_rm_watch` when appropriate. | ||
|
||
# GNU test-suite results (9.1.8-e08752) | ||
|
||
The functionality for the test "gnu/tests/tail-2/follow-stdin.sh" is implemented. | ||
It fails because it is provoking closing a file descriptor with `tail -f <&-` and as part of a workaround, Rust's stdlib reopens closed FDs as `/dev/null` which means uu_tail cannot detect this. | ||
See also, e.g. the discussion at: https://github.com/uutils/coreutils/issues/2873 | ||
|
||
The functionality for the test "gnu/tests/tail-2/inotify-rotate-resources.sh" is implemented. | ||
It fails with an error because it is using `strace` to look for calls to `inotify_add_watch` and `inotify_rm_watch`, | ||
however in uu_tail these system calls are invoked from a separate thread. | ||
If the GNU test would follow threads, i.e. use `strace -f`, this issue could be resolved. | ||
|
||
There are 5 tests which are fixed but do not (always) pass the test suite if it's run inside the CI. | ||
The reason for this is probably related to load/scheduling on the CI test VM. | ||
The tests in question are: | ||
- [x] `tail-2/F-vs-rename.sh` | ||
- [x] `tail-2/follow-name.sh` | ||
- [x] `tail-2/inotify-rotate.sh` | ||
- [x] `tail-2/overlay-headers.sh` | ||
- [x] `tail-2/retry.sh` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.