]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal-vacuum: count size of all journal files
authorDavid Tardon <dtardon@redhat.com>
Wed, 22 Mar 2023 11:36:54 +0000 (12:36 +0100)
committerDavid Tardon <dtardon@redhat.com>
Thu, 23 Mar 2023 08:16:35 +0000 (09:16 +0100)
Currently, active journal files are excluded, which means that vacuuming
may not remove anything even if *MaxUse= has been exceeded.

src/libsystemd/sd-journal/journal-vacuum.c

index d62cf3eb3af020ac1b8ee6cadb90b87a66dd96ed..7395d00bd4e1e6afa2bd66f4e8d1cf9a12c49611 100644 (file)
@@ -159,6 +159,8 @@ int journal_directory_vacuum(
                 if (!S_ISREG(st.st_mode))
                         continue;
 
+                size = 512UL * (uint64_t) st.st_blocks;
+
                 q = strlen(de->d_name);
 
                 if (endswith(de->d_name, ".journal")) {
@@ -168,6 +170,7 @@ int journal_directory_vacuum(
 
                         if (q < 1 + 32 + 1 + 16 + 1 + 16 + 8) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -175,6 +178,7 @@ int journal_directory_vacuum(
                             de->d_name[q-8-16-1-16-1] != '-' ||
                             de->d_name[q-8-16-1-16-1-32-1] != '@') {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -187,11 +191,13 @@ int journal_directory_vacuum(
                         de->d_name[q-8-16-1-16-1] = 0;
                         if (sd_id128_from_string(de->d_name + q-8-16-1-16-1-32, &seqnum_id) < 0) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
                         if (sscanf(de->d_name + q-8-16-1-16, "%16llx-%16llx.journal", &seqnum, &realtime) != 2) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -207,12 +213,14 @@ int journal_directory_vacuum(
 
                         if (q < 1 + 16 + 1 + 16 + 8 + 1) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
                         if (de->d_name[q-1-8-16-1] != '-' ||
                             de->d_name[q-1-8-16-1-16-1] != '@') {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -224,6 +232,7 @@ int journal_directory_vacuum(
 
                         if (sscanf(de->d_name + q-1-8-16-1-16, "%16llx-%16llx.journal~", &realtime, &tmp) != 2) {
                                 n_active_files++;
+                                sum += size;
                                 continue;
                         }
 
@@ -234,8 +243,6 @@ int journal_directory_vacuum(
                         continue;
                 }
 
-                size = 512UL * (uint64_t) st.st_blocks;
-
                 r = journal_file_empty(dirfd(d), p);
                 if (r < 0) {
                         log_debug_errno(r, "Failed check if %s is empty, ignoring: %m", p);