Merge pull request #1663 from poettering/journal-compress-fix
journal: fix error handling when compressing journal objects
This commit is contained in:
@@ -57,10 +57,11 @@ int compress_blob_xz(const void *src, uint64_t src_size, void *dst, size_t *dst_
|
||||
#ifdef HAVE_XZ
|
||||
static const lzma_options_lzma opt = {
|
||||
1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT,
|
||||
LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4};
|
||||
static const lzma_filter filters[2] = {
|
||||
{LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt},
|
||||
{LZMA_VLI_UNKNOWN, NULL}
|
||||
LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4
|
||||
};
|
||||
static const lzma_filter filters[] = {
|
||||
{ LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt },
|
||||
{ LZMA_VLI_UNKNOWN, NULL }
|
||||
};
|
||||
lzma_ret ret;
|
||||
size_t out_pos = 0;
|
||||
|
||||
@@ -1057,7 +1057,7 @@ static int journal_file_append_data(
|
||||
r = journal_file_find_data_object_with_hash(f, data, size, hash, &o, &p);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else if (r > 0) {
|
||||
if (r > 0) {
|
||||
|
||||
if (ret)
|
||||
*ret = o;
|
||||
@@ -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