From addcecf6f4686811b63d48d51398d887c2c4bb68 Mon Sep 17 00:00:00 2001 From: msizanoen Date: Wed, 30 Aug 2023 18:53:29 +0700 Subject: [PATCH] journal: Relax boot ID and monotonic clock consistency checks The monotonic clock value consistency should only be checked if the boot ID is the same as the last journal entry, and requiring that the current boot ID be the same as the boot ID of the last entry is not necessary for ensuring deterministic bisection as we already enforce strict ordering of the real time clock value in a single journal file. This fixes an issue where a new journal file is unnecessarily created every boot, potentially wasting storage space. --- src/journal/journald-server.c | 12 ++++++------ src/libsystemd/sd-journal/journal-file.c | 21 +++++++++------------ 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 2932a190ff7..897e2abd3a2 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -871,12 +871,12 @@ static bool shall_try_append_again(JournalFile *f, int r) { log_ratelimit_info_errno(r, JOURNAL_LOG_RATELIMIT, "%s: Realtime clock jumped backwards relative to last journal entry, rotating.", f->path); return true; - case -EREMOTE: /* Boot ID different from the one of the last entry */ - log_ratelimit_info_errno(r, JOURNAL_LOG_RATELIMIT, "%s: Boot ID changed since last record, rotating.", f->path); - return true; - - case -ENOTNAM: /* Monotonic time (CLOCK_MONOTONIC) jumped backwards relative to last journal entry */ - log_ratelimit_info_errno(r, JOURNAL_LOG_RATELIMIT, "%s: Monotonic clock jumped backwards relative to last journal entry, rotating.", f->path); + case -ENOTNAM: /* Monotonic time (CLOCK_MONOTONIC) jumped backwards relative to last journal entry with the same boot ID */ + log_ratelimit_info_errno( + r, + JOURNAL_LOG_RATELIMIT, + "%s: Monotonic clock jumped backwards relative to last journal entry with the same boot ID, rotating.", + f->path); return true; case -EILSEQ: /* seqnum ID last used in the file doesn't match the one we'd passed when writing an entry to it */ diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index 1d118583c86..95cf25bff00 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -2287,18 +2287,15 @@ static int journal_file_append_entry_internal( "timestamp %" PRIu64 ", refusing entry.", ts->realtime, le64toh(f->header->tail_entry_realtime)); - if (!sd_id128_is_null(f->header->tail_entry_boot_id) && boot_id) { - - if (!sd_id128_equal(f->header->tail_entry_boot_id, *boot_id)) - return log_debug_errno(SYNTHETIC_ERRNO(EREMOTE), - "Boot ID to write is different from previous boot id, refusing entry."); - - if (ts->monotonic < le64toh(f->header->tail_entry_monotonic)) - return log_debug_errno(SYNTHETIC_ERRNO(ENOTNAM), - "Monotonic timestamp %" PRIu64 " smaller than previous monotonic " - "timestamp %" PRIu64 ", refusing entry.", - ts->monotonic, le64toh(f->header->tail_entry_monotonic)); - } + if ((!boot_id || sd_id128_equal(*boot_id, f->header->tail_entry_boot_id)) && + ts->monotonic < le64toh(f->header->tail_entry_monotonic)) + return log_debug_errno( + SYNTHETIC_ERRNO(ENOTNAM), + "Monotonic timestamp %" PRIu64 + " smaller than previous monotonic timestamp %" PRIu64 + " while having the same boot ID, refusing entry.", + ts->monotonic, + le64toh(f->header->tail_entry_monotonic)); } if (seqnum_id) { -- 2.47.3