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.
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user