diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-21 18:16:49 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-01-10 09:56:24 +0100 |
commit | 79809fd464a5942908d8ed790da482b27f6d84c1 (patch) | |
tree | e71275f03ba26faa6842a1f3966642f80690910a /searchlib | |
parent | 9c78dc6483c5998dcda7a34315dbf1c4504ac04f (diff) |
Use a single compressor that handles all formats.
Diffstat (limited to 'searchlib')
3 files changed, 37 insertions, 35 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/chunks.cpp b/searchlib/src/vespa/searchlib/transactionlog/chunks.cpp index 03c04f5c867..8ca5cd915fa 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/chunks.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/chunks.cpp @@ -41,8 +41,7 @@ void CCITTCRC32None::onEncode(nbostream &os) const { size_t start = os.wp(); assert(getEntries().size() == 1); serializeEntries(os); - int32_t crc = Encoding::calcCrc(Encoding::Crc::ccitt_crc32, os.c_str()+start, os.size() - start); - os << crc; + os << int32_t(Encoding::calcCrc(Encoding::Crc::ccitt_crc32, os.c_str()+start, os.size() - start)); } void CCITTCRC32None::onDecode(nbostream &is) { @@ -56,8 +55,7 @@ void XXH64None::onEncode(nbostream &os) const { size_t start = os.wp(); assert(getEntries().size() == 1); serializeEntries(os); - int32_t crc = Encoding::calcCrc(Encoding::Crc::xxh64, os.c_str()+start, os.size() - start); - os << crc; + os << int32_t(Encoding::calcCrc(Encoding::Crc::xxh64, os.c_str()+start, os.size() - start)); } void XXH64None::onDecode(nbostream &is) { @@ -68,35 +66,43 @@ void XXH64None::onDecode(nbostream &is) { } void -XXH64Compressed::decompress(nbostream & is, vespalib::compression::CompressionConfig::Type type) { +XXH64Compressed::decompress(nbostream & is) { uint32_t uncompressedLen; is >> uncompressedLen; vespalib::DataBuffer uncompressed; ConstBufferRef compressed(is.peek(), is.size()-sizeof(uint32_t)*2); - ::decompress(type, uncompressedLen, compressed, uncompressed, false); + ::decompress(_type, uncompressedLen, compressed, uncompressed, false); nbostream data(uncompressed.getData(), uncompressed.getDataLen()); deserializeEntries(data); is.adjustReadPos(is.size()); } -void XXH64LZ4::onEncode(IChunk::nbostream &os) const { - (void) os; +XXH64Compressed::XXH64Compressed(CompressionConfig::Type type) + : _type(type), + _level(9) +{ } +void +XXH64Compressed::compress(nbostream & os, Encoding::Crc crc) const { + nbostream org; + serializeEntries(org); + DataBuffer compressed; + CompressionConfig cfg(_type, _level, 110); + ConstBufferRef uncompressed(org.c_str(), org.size()); + CompressionConfig::Type actual = ::compress(cfg, uncompressed, compressed, false); + assert(actual == _type); + size_t start = os.wp(); + os.write(compressed.getData(), compressed.getDataLen()); + os << int32_t(Encoding::calcCrc(crc, os.c_str()+start, os.size() - start)); } -void XXH64LZ4::onDecode(IChunk::nbostream &is) { - verifyCrc(is, Encoding::Crc::xxh64); - decompress(is, CompressionConfig::LZ4); -} - -void XXH64ZSTD::onEncode(IChunk::nbostream &os) const { - (void) os; - +void XXH64Compressed::onEncode(IChunk::nbostream &os) const { + compress(os, Encoding::Crc::xxh64); } -void XXH64ZSTD::onDecode(IChunk::nbostream &is) { +void XXH64Compressed::onDecode(IChunk::nbostream &is) { verifyCrc(is, Encoding::Crc::xxh64); - decompress(is, CompressionConfig::ZSTD); + decompress(is); } } diff --git a/searchlib/src/vespa/searchlib/transactionlog/chunks.h b/searchlib/src/vespa/searchlib/transactionlog/chunks.h index ceafe9428da..89c9e720c73 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/chunks.h +++ b/searchlib/src/vespa/searchlib/transactionlog/chunks.h @@ -2,8 +2,8 @@ #pragma once -#include <vespa/vespalib/util/compressionconfig.h> #include "ichunk.h" +#include <vespa/vespalib/util/compressionconfig.h> namespace search::transactionlog { @@ -23,22 +23,17 @@ public: class XXH64Compressed : public IChunk { public: - void setLevel(uint8_t level) { _compressionLevel = level; } -protected: - void decompress(nbostream & os, vespalib::compression::CompressionConfig::Type type); -private: - uint8_t _compressionLevel; -}; -class XXH64LZ4 : public XXH64Compressed { -protected: - void onEncode(nbostream &os) const override; - void onDecode(nbostream &is) override; -}; - -class XXH64ZSTD : public XXH64Compressed { + using CompressionConfig = vespalib::compression::CompressionConfig; + XXH64Compressed(CompressionConfig::Type); + void setLevel(uint8_t level) { _level = level; } protected: + void decompress(nbostream & os); + void compress(nbostream & os, Encoding::Crc crc) const; void onEncode(nbostream &os) const override; void onDecode(nbostream &is) override; +private: + CompressionConfig::Type _type; + uint8_t _level; }; } diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp index 1f32041a68d..f867aa97070 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp @@ -10,6 +10,7 @@ using std::runtime_error; using std::make_unique; using vespalib::make_string; using vespalib::nbostream_longlivedbuf; +using vespalib::compression::CompressionConfig; namespace search::transactionlog { @@ -72,11 +73,11 @@ IChunk::create(Encoding encoding) { case Encoding::Compression::none: return make_unique<XXH64None>(); case Encoding::Compression::lz4: - return make_unique<XXH64LZ4>(); + return make_unique<XXH64Compressed>(CompressionConfig::LZ4); case Encoding::Compression::zstd: - return make_unique<XXH64ZSTD>(); + return make_unique<XXH64Compressed>(CompressionConfig::ZSTD); default: - return make_unique<XXH64LZ4>(); + return make_unique<XXH64Compressed>(CompressionConfig::LZ4); } case Encoding::Crc::ccitt_crc32: switch (encoding.getCompression()) { |