mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-10-03 23:38:39 +00:00
journald: do not calculate free space too early
Since the system journal wasn't open yet, available_space() returned 0. Before: systemd-journal[22170]: Allowing system journal files to grow to 4.0G. systemd-journal[22170]: Journal size currently limited to 0B due to SystemKeepFree. After: systemd-journal[22178]: Allowing system journal files to grow to 4.0G. systemd-journal[22178]: Journal size currently limited to 3.0G due to SystemKeepFree. Also, when failing to write a message, show how much space was needed: "Failed to write entry (26 items, 260123456 bytes) despite vacuuming, ignoring: ...".
This commit is contained in:
@@ -465,7 +465,12 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
||||
}
|
||||
|
||||
if (vacuumed || !shall_try_append_again(f, r)) {
|
||||
log_error("Failed to write entry, ignoring: %s", strerror(-r));
|
||||
size_t size = 0;
|
||||
unsigned i;
|
||||
for (i = 0; i < n; i++)
|
||||
size += iovec[i].iov_len;
|
||||
|
||||
log_error("Failed to write entry (%d items, %zu bytes), ignoring: %s", n, size, strerror(-r));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -478,8 +483,14 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
||||
|
||||
log_debug("Retrying write.");
|
||||
r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
|
||||
if (r < 0)
|
||||
log_error("Failed to write entry, ignoring: %s", strerror(-r));
|
||||
if (r < 0) {
|
||||
size_t size = 0;
|
||||
unsigned i;
|
||||
for (i = 0; i < n; i++)
|
||||
size += iovec[i].iov_len;
|
||||
|
||||
log_error("Failed to write entry (%d items, %zu bytes) despite vacuuming, ignoring: %s", n, size, strerror(-r));
|
||||
}
|
||||
}
|
||||
|
||||
static void dispatch_message_real(
|
||||
@@ -767,9 +778,6 @@ static int system_journal_open(Server *s) {
|
||||
char *fn;
|
||||
sd_id128_t machine;
|
||||
char ids[33];
|
||||
uint64_t avail;
|
||||
|
||||
avail = available_space(s);
|
||||
|
||||
r = sd_id128_get_machine(&machine);
|
||||
if (r < 0)
|
||||
@@ -790,27 +798,23 @@ static int system_journal_open(Server *s) {
|
||||
if (s->storage == STORAGE_PERSISTENT)
|
||||
(void) mkdir("/var/log/journal/", 0755);
|
||||
|
||||
fn = strappend("/var/log/journal/", ids);
|
||||
if (!fn)
|
||||
return -ENOMEM;
|
||||
|
||||
fn = strappenda("/var/log/journal/", ids);
|
||||
(void) mkdir(fn, 0755);
|
||||
free(fn);
|
||||
|
||||
fn = strjoin("/var/log/journal/", ids, "/system.journal", NULL);
|
||||
if (!fn)
|
||||
return -ENOMEM;
|
||||
|
||||
fn = strappenda(fn, "/system.journal");
|
||||
r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &s->system_journal);
|
||||
free(fn);
|
||||
|
||||
if (r >= 0) {
|
||||
char fb[FORMAT_BYTES_MAX];
|
||||
uint64_t avail;
|
||||
|
||||
server_fix_perms(s, s->system_journal, 0);
|
||||
|
||||
server_driver_message(s, SD_ID128_NULL, "Allowing system journal files to grow to %s.",
|
||||
format_bytes(fb, sizeof(fb), s->system_metrics.max_use));
|
||||
|
||||
avail = available_space(s);
|
||||
|
||||
if (s->system_metrics.max_use > avail)
|
||||
server_driver_message(s, SD_ID128_NULL, "Journal size currently limited to %s due to SystemKeepFree.",
|
||||
format_bytes(fb, sizeof(fb), avail));
|
||||
@@ -864,11 +868,14 @@ static int system_journal_open(Server *s) {
|
||||
|
||||
if (s->runtime_journal) {
|
||||
char fb[FORMAT_BYTES_MAX];
|
||||
uint64_t avail;
|
||||
|
||||
server_fix_perms(s, s->runtime_journal, 0);
|
||||
server_driver_message(s, SD_ID128_NULL, "Allowing runtime journal files to grow to %s.",
|
||||
format_bytes(fb, sizeof(fb), s->runtime_metrics.max_use));
|
||||
|
||||
avail = available_space(s);
|
||||
|
||||
if (s->system_metrics.max_use > avail)
|
||||
server_driver_message(s, SD_ID128_NULL, "Journal size currently limited to %s due to RuntimeKeepFree.",
|
||||
format_bytes(fb, sizeof(fb), avail));
|
||||
|
||||
Reference in New Issue
Block a user