mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-25 02:50:33 +00:00
sstables: add compress_max_size to compression
used to return maximum size which compressor may output. Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com> Reviewed-by: Nadav Har'El <nyh@cloudius-systems.com>
This commit is contained in:
@@ -36,12 +36,15 @@ void compression::update(uint64_t compressed_file_length) {
|
||||
void compression::set_compressor(compressor c) {
|
||||
if (c == compressor::lz4) {
|
||||
_compress = compress_lz4;
|
||||
_compress_max_size = compress_max_size_lz4;
|
||||
name.value = "LZ4Compressor";
|
||||
} else if (c == compressor::snappy) {
|
||||
_compress = compress_snappy;
|
||||
_compress_max_size = compress_max_size_snappy;
|
||||
name.value = "SnappyCompressor";
|
||||
} else if (c == compressor::deflate) {
|
||||
_compress = compress_deflate;
|
||||
_compress_max_size = compress_max_size_deflate;
|
||||
name.value = "DeflateCompressor";
|
||||
} else {
|
||||
throw std::runtime_error("unsupported compressor type");
|
||||
@@ -152,6 +155,20 @@ size_t compress_snappy(const char* input, size_t input_len,
|
||||
fail(unimplemented::cause::COMPRESSION);
|
||||
}
|
||||
|
||||
size_t compress_max_size_lz4(size_t input_len) {
|
||||
return LZ4_COMPRESSBOUND(input_len) + 4;
|
||||
}
|
||||
|
||||
size_t compress_max_size_deflate(size_t input_len) {
|
||||
// FIXME: implement.
|
||||
fail(unimplemented::cause::COMPRESSION);
|
||||
}
|
||||
|
||||
size_t compress_max_size_snappy(size_t input_len) {
|
||||
// FIXME: implement.
|
||||
fail(unimplemented::cause::COMPRESSION);
|
||||
}
|
||||
|
||||
class compressed_file_data_source_impl : public data_source_impl {
|
||||
lw_shared_ptr<file> _file;
|
||||
sstables::compression* _compression_metadata;
|
||||
|
||||
@@ -59,6 +59,12 @@ compress_func compress_lz4;
|
||||
compress_func compress_snappy;
|
||||
compress_func compress_deflate;
|
||||
|
||||
typedef size_t compress_max_size_func(size_t input_len);
|
||||
|
||||
compress_max_size_func compress_max_size_lz4;
|
||||
compress_max_size_func compress_max_size_snappy;
|
||||
compress_max_size_func compress_max_size_deflate;
|
||||
|
||||
inline uint32_t init_checksum_adler32() {
|
||||
return adler32(0, Z_NULL, 0);
|
||||
}
|
||||
@@ -95,6 +101,8 @@ private:
|
||||
// Variables determined from the above deserialized values, held for convenience:
|
||||
uncompress_func *_uncompress = nullptr;
|
||||
compress_func *_compress = nullptr;
|
||||
// Return maximum length of data that compressor may output.
|
||||
compress_max_size_func *_compress_max_size = nullptr;
|
||||
// Variables *not* found in the "Compression Info" file (added by update()):
|
||||
uint64_t _compressed_file_length;
|
||||
public:
|
||||
@@ -140,7 +148,9 @@ public:
|
||||
}
|
||||
return _compress(input, input_len, output, output_len);
|
||||
}
|
||||
|
||||
size_t compress_max_size(size_t input_len) const {
|
||||
return _compress_max_size(input_len);
|
||||
}
|
||||
friend class sstable;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user