]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journalctl: fix --follow with non-matching filter 27519/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 28 May 2023 05:28:32 +0000 (14:28 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 28 May 2023 14:53:58 +0000 (23:53 +0900)
When there is no matching entry stored in journal, then initial call of
`sd_journal_previous()` following `sd_journal_seek_tail()` returns
zero, and does not move the read pointer.
In the main loop, on every journal event, we call `sd_journal_next()`,
even though the current location is tail, and it takes no effect.

In such a case, we need to call `sd_journal_previous()` instead of
`sd_journal_next()`.

src/journal/journalctl.c
test/units/testsuite-04.sh

index 8944c95e64ff093f1ceabe17183a5eb64050044c..4f9c1f4780c95430fa5c6f6dee52580d66858d22 100644 (file)
@@ -2146,10 +2146,7 @@ static int show(Context *c) {
                 size_t highlight[2] = {};
 
                 if (c->need_seek) {
-                        if (!arg_reverse)
-                                r = sd_journal_next(j);
-                        else
-                                r = sd_journal_previous(j);
+                        r = sd_journal_step_one(j, !arg_reverse);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to iterate through journal: %m");
                         if (r == 0)
index 5280cf8cb1af145710b8bb78b7a6ab844d5fcf25..4af619941bc22e30290035d4ca3437634a74ce29 100755 (executable)
@@ -164,13 +164,6 @@ set -o pipefail
 # https://github.com/systemd/systemd/issues/26746
 rm -f /tmp/issue-26746-log /tmp/issue-26746-cursor
 ID=$(systemd-id128 new)
-
-# FIXME:
-# After the commit 7a4ee861615101ddd2f95056cf30e69e41da86ce,
-# journalctl --follow does not work if no matching entry stored in the journal.
-# To workaround the issue, we need to add an entry before calling journalctl below.
-systemd-cat -t "$ID" /bin/sh -c 'echo aaa'
-
 journalctl -t "$ID" --follow --cursor-file=/tmp/issue-26746-cursor | tee /tmp/issue-26746-log &
 systemd-cat -t "$ID" /bin/sh -c 'echo hogehoge'
 # shellcheck disable=SC2016