journal: fix error handling when compressing journal objects
Let's make sure we handle compression errors properly, and don't misunderstand an error for success. Also, let's actually compress things if lz4 is enabled. Fixes #1662.
This commit is contained in:
@@ -1076,23 +1076,24 @@ static int journal_file_append_data(
|
||||
o->data.hash = htole64(hash);
|
||||
|
||||
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
|
||||
if (f->compress_xz &&
|
||||
size >= COMPRESSION_SIZE_THRESHOLD) {
|
||||
if (JOURNAL_FILE_COMPRESS(f) && size >= COMPRESSION_SIZE_THRESHOLD) {
|
||||
size_t rsize = 0;
|
||||
|
||||
compression = compress_blob(data, size, o->data.payload, &rsize);
|
||||
|
||||
if (compression) {
|
||||
if (compression >= 0) {
|
||||
o->object.size = htole64(offsetof(Object, data.payload) + rsize);
|
||||
o->object.flags |= compression;
|
||||
|
||||
log_debug("Compressed data object %"PRIu64" -> %zu using %s",
|
||||
size, rsize, object_compressed_to_string(compression));
|
||||
}
|
||||
} else
|
||||
/* Compression didn't work, we don't really care why, let's continue without compression */
|
||||
compression = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!compression && size > 0)
|
||||
if (compression == 0 && size > 0)
|
||||
memcpy(o->data.payload, data, size);
|
||||
|
||||
r = journal_file_link_data(f, o, p, hash);
|
||||
|
||||
@@ -235,3 +235,8 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
|
||||
|
||||
int journal_file_map_data_hash_table(JournalFile *f);
|
||||
int journal_file_map_field_hash_table(JournalFile *f);
|
||||
|
||||
static inline bool JOURNAL_FILE_COMPRESS(JournalFile *f) {
|
||||
assert(f);
|
||||
return f->compress_xz || f->compress_lz4;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user