mirror of
https://github.com/systemd/systemd.git
synced 2024-10-31 16:21:26 +03:00
journalctl: Periodically call sd_journal_process in journalctl
If `journalctl` take a long time to process messages, and during that time journal file rotation occurs, a `journalctl` client will keep those rotated files open until it calls `sd_journal_process()`, which typically happens as a result of calling `sd_journal_wait()` below in the "following" case. By periodically calling `sd_journal_process()` during the processing loop we shrink the window of time a client instance has open file descriptors for rotated (deleted) journal files. (Lennart: slightly reworked version, that dropped some of the commenting which was solved otherwise)
This commit is contained in:
parent
10c4d6405f
commit
ec316d199a
@ -81,6 +81,8 @@
|
||||
|
||||
#define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
|
||||
|
||||
#define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */
|
||||
|
||||
#if HAVE_PCRE2
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(pcre2_match_data*, pcre2_match_data_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(pcre2_code*, pcre2_code_free);
|
||||
@ -2639,6 +2641,20 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
|
||||
n_shown++;
|
||||
|
||||
/* If journalctl take a long time to process messages, and during that time journal file
|
||||
* rotation occurs, a journalctl client will keep those rotated files open until it calls
|
||||
* sd_journal_process(), which typically happens as a result of calling sd_journal_wait() below
|
||||
* in the "following" case. By periodically calling sd_journal_process() during the processing
|
||||
* loop we shrink the window of time a client instance has open file descriptors for rotated
|
||||
* (deleted) journal files. */
|
||||
if ((n_shown % PROCESS_INOTIFY_INTERVAL) == 0) {
|
||||
r = sd_journal_process(j);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to process inotify events: %m");
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!arg_follow) {
|
||||
|
Loading…
Reference in New Issue
Block a user