journal: stop using JournalFile.mmap everywhere

Preparatory commit; before JournalFile can stop hanging onto its
copy of MMapCache, all these users need to find another way.

Most of the time these callers already have the MMapCache onhand,
so it's no big deal for them to just supply it.

journal_file_rotate() in particular needed to change, and it
seemed wise to not use the mmap_cache_fd_cache() accessor on
f->cache_fd, instead requiring the caller supply the cache to
use.  This was done with an eye towards a potential future where
the journal_file_archive() isolates the cache_fd to a private
cache, which the newly rotated-to file wouldn't be allowed to
use.  It's no biggie for the existing callers to just provide the
appropriate surviving cache.

Basically the mmap_cache_fd_cache() accessor was added just for
journal-verify.c's (ab)use of the mmap-cache.  Which, if the
ugly singleton MMapCache assumption ever goes away, can be
cleaned up to simply use a separate MMapCache for those search
arrays.
This commit is contained in:
Vito Caputo
2021-12-07 13:00:25 -08:00
parent 176bf8b827
commit 8b4fbbb0a1
7 changed files with 16 additions and 12 deletions
+4 -4
View File
@@ -3,8 +3,8 @@
#include "alloc-util.h"
#include "journal-remote.h"
static int do_rotate(JournaldFile **f, bool compress, bool seal) {
int r = journald_file_rotate(f, compress, UINT64_MAX, seal, NULL);
static int do_rotate(JournaldFile **f, MMapCache *m, bool compress, bool seal) {
int r = journald_file_rotate(f, m, compress, UINT64_MAX, seal, NULL);
if (r < 0) {
if (*f)
log_error_errno(r, "Failed to rotate %s: %m", (*f)->file->path);
@@ -71,7 +71,7 @@ int writer_write(Writer *w,
if (journal_file_rotate_suggested(w->journal->file, 0, LOG_DEBUG)) {
log_info("%s: Journal header limits reached or header out-of-date, rotating",
w->journal->file->path);
r = do_rotate(&w->journal, compress, seal);
r = do_rotate(&w->journal, w->mmap, compress, seal);
if (r < 0)
return r;
}
@@ -87,7 +87,7 @@ int writer_write(Writer *w,
return r;
log_debug_errno(r, "%s: Write failed, rotating: %m", w->journal->file->path);
r = do_rotate(&w->journal, compress, seal);
r = do_rotate(&w->journal, w->mmap, compress, seal);
if (r < 0)
return r;
else
+2 -1
View File
@@ -403,6 +403,7 @@ JournaldFile* journald_file_initiate_close(JournaldFile *f, Set *deferred_closes
int journald_file_rotate(
JournaldFile **f,
MMapCache *mmap_cache,
bool compress,
uint64_t compress_threshold_bytes,
bool seal,
@@ -428,7 +429,7 @@ int journald_file_rotate(
compress_threshold_bytes,
seal,
NULL, /* metrics */
(*f)->file->mmap,
mmap_cache,
deferred_closes,
*f, /* template */
&new_file);
+1 -1
View File
@@ -40,4 +40,4 @@ int journald_file_open_reliably(
JournaldFile **ret);
JournaldFile* journald_file_initiate_close(JournaldFile *f, Set *deferred_closes);
int journald_file_rotate(JournaldFile **f, bool compress, uint64_t compress_threshold_bytes, bool seal, Set *deferred_closes);
int journald_file_rotate(JournaldFile **f, MMapCache *mmap_cache, bool compress, uint64_t compress_threshold_bytes, bool seal, Set *deferred_closes);
+1 -1
View File
@@ -465,7 +465,7 @@ static int do_rotate(
if (!*f)
return -EINVAL;
r = journald_file_rotate(f, s->compress.enabled, s->compress.threshold_bytes, seal, s->deferred_closes);
r = journald_file_rotate(f, s->mmap, s->compress.enabled, s->compress.threshold_bytes, seal, s->deferred_closes);
if (r < 0) {
if (*f)
return log_error_errno(r, "Failed to rotate %s: %m", (*f)->file->path);
+2 -2
View File
@@ -98,8 +98,8 @@ static void test_non_empty(void) {
assert_se(journal_file_move_to_entry_by_seqnum(f->file, 10, DIRECTION_DOWN, &o, NULL) == 0);
journald_file_rotate(&f, true, UINT64_MAX, true, NULL);
journald_file_rotate(&f, true, UINT64_MAX, true, NULL);
journald_file_rotate(&f, NULL, true, UINT64_MAX, true, NULL);
journald_file_rotate(&f, NULL, true, UINT64_MAX, true, NULL);
(void) journald_file_close(f);
+1
View File
@@ -232,6 +232,7 @@ void journal_file_dump(JournalFile *f);
void journal_file_print_header(JournalFile *f);
int journal_file_archive(JournalFile *f, char **ret_previous_path);
JournalFile* journal_initiate_close(JournalFile *f, Set *deferred_closes);
int journal_file_dispose(int dir_fd, const char *fname);
+5 -3
View File
@@ -885,6 +885,7 @@ int journal_file_verify(
unsigned i;
bool found_last = false;
const char *tmp_dir = NULL;
MMapCache *m;
#if HAVE_GCRYPT
uint64_t last_tag = 0;
@@ -929,19 +930,20 @@ int journal_file_verify(
goto fail;
}
cache_data_fd = mmap_cache_add_fd(f->mmap, data_fd, PROT_READ|PROT_WRITE);
m = mmap_cache_fd_cache(f->cache_fd);
cache_data_fd = mmap_cache_add_fd(m, data_fd, PROT_READ|PROT_WRITE);
if (!cache_data_fd) {
r = log_oom();
goto fail;
}
cache_entry_fd = mmap_cache_add_fd(f->mmap, entry_fd, PROT_READ|PROT_WRITE);
cache_entry_fd = mmap_cache_add_fd(m, entry_fd, PROT_READ|PROT_WRITE);
if (!cache_entry_fd) {
r = log_oom();
goto fail;
}
cache_entry_array_fd = mmap_cache_add_fd(f->mmap, entry_array_fd, PROT_READ|PROT_WRITE);
cache_entry_array_fd = mmap_cache_add_fd(m, entry_array_fd, PROT_READ|PROT_WRITE);
if (!cache_entry_array_fd) {
r = log_oom();
goto fail;