]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald: remove triplicate logging about failure to write log lines 26605/head
authorLennart Poettering <lennart@poettering.net>
Mon, 27 Feb 2023 14:48:45 +0000 (15:48 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 28 Feb 2023 08:32:42 +0000 (09:32 +0100)
Let's log exactly at one place about failed writing of log lines to
journal file: in shall_try_append_again().

Then, if we decide to suppress a retry-after-vacuum because we already
vacuumed anyway then say this explicitly as "supressed rotation",
because that's what we do here.

This removes triplicate logging about the same error, and logs exactly
once, plus optional one "suppressed rotation" message. (plus more debug
output). The triplicate logging was bad in particular because it had no
understanding of the actual error codes and just showed generic UNIX
error strings ("Not a XENIX named type file"). By relying on
shall_try_append_again() to do all logging we now get very clean error
strings for all conditions.

Fixes: #26496
src/journal/journald-server.c

index a6741ff8cc45b2181cfea1294f5d351901c225e5..23942f957506c0acc94fc0402aefdda1696e6358 100644 (file)
@@ -969,20 +969,16 @@ static void server_write_to_journal(
                 return;
         }
 
-        if (vacuumed || !shall_try_append_again(f->file, r)) {
-                log_ratelimit_error_errno(r, FAILED_TO_WRITE_ENTRY_RATELIMIT,
-                                          "Failed to write entry (%zu items, %zu bytes), ignoring: %m",
-                                          n, IOVEC_TOTAL_SIZE(iovec, n));
+        log_debug_errno(r, "Failed to write entry to %s (%zu items, %zu bytes): %m", f->file->path, n, IOVEC_TOTAL_SIZE(iovec, n));
+
+        if (!shall_try_append_again(f->file, r))
+                return;
+        if (vacuumed) {
+                log_ratelimit_warning_errno(r, JOURNAL_LOG_RATELIMIT,
+                                            "Suppressing rotation, as we already rotated immediately before write attempt. Giving up.");
                 return;
         }
 
-        if (r == -E2BIG)
-                log_debug("Journal file %s is full, rotating to a new file", f->file->path);
-        else
-                log_ratelimit_info_errno(r, FAILED_TO_WRITE_ENTRY_RATELIMIT,
-                                         "Failed to write entry to %s (%zu items, %zu bytes), rotating before retrying: %m",
-                                         f->file->path, n, IOVEC_TOTAL_SIZE(iovec, n));
-
         server_rotate(s);
         server_vacuum(s, false);