summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-10-21 18:16:49 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-01-10 09:56:24 +0100
commit79809fd464a5942908d8ed790da482b27f6d84c1 (patch)
treee71275f03ba26faa6842a1f3966642f80690910a /searchlib
parent9c78dc6483c5998dcda7a34315dbf1c4504ac04f (diff)
Use a single compressor that handles all formats.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/chunks.cpp42
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/chunks.h23
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp7
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()) {