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:
Raphael S. Carvalho
2015-06-15 10:19:21 -03:00
parent 4175fa92b3
commit 3bfb86f541
2 changed files with 28 additions and 1 deletions

View File

@@ -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;

View File

@@ -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;
};