summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--searchlib/src/tests/transactionlog/chunks_test.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/ichunk.h3
3 files changed, 21 insertions, 7 deletions
diff --git a/searchlib/src/tests/transactionlog/chunks_test.cpp b/searchlib/src/tests/transactionlog/chunks_test.cpp
index fa5fe3c1006..8605fa2b4d6 100644
--- a/searchlib/src/tests/transactionlog/chunks_test.cpp
+++ b/searchlib/src/tests/transactionlog/chunks_test.cpp
@@ -14,7 +14,7 @@ using vespalib::compression::CompressionConfig;
constexpr const char * TEXT = "abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz";
void
-verifySerializationAndDeserialization(IChunk & org, size_t numEntries) {
+verifySerializationAndDeserialization(IChunk & org, size_t numEntries, Encoding expected) {
for (size_t i(0); i < numEntries; i++) {
const char *start = TEXT + (i%20);
Packet::Entry entry(i, i%8, ConstBufferRef(start, strlen(start)));
@@ -23,6 +23,7 @@ verifySerializationAndDeserialization(IChunk & org, size_t numEntries) {
nbostream os;
Encoding encoding = org.encode(os);
+ EXPECT_EQUAL(expected, encoding);
auto deserialized = IChunk::create(encoding.getRaw());
deserialized->decode(os);
EXPECT_TRUE(os.empty());
@@ -31,36 +32,41 @@ verifySerializationAndDeserialization(IChunk & org, size_t numEntries) {
TEST("test serialization and deserialization of current default uncompressed xxh64") {
XXH64NoneChunk chunk;
- verifySerializationAndDeserialization(chunk, 1);
+ verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none));
}
TEST("test serialization and deserialization of legacy uncompressed ccittcrc32") {
CCITTCRC32NoneChunk chunk;
- verifySerializationAndDeserialization(chunk, 1);
+ verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::ccitt_crc32, Encoding::Compression::none));
}
TEST("test serialization and deserialization of future multientry xxh64 lz4 compression") {
for (size_t level(1); level < 9; level++) {
XXH64CompressedChunk chunk(CompressionConfig::Type::LZ4, level);
- verifySerializationAndDeserialization(chunk, 100);
+ verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::lz4));
}
}
TEST("test serialization and deserialization of future multientry xxh64 zstd compression") {
for (size_t level(1); level < 9; level++) {
XXH64CompressedChunk chunk(CompressionConfig::Type::ZSTD, level);
- verifySerializationAndDeserialization(chunk, 100);
+ verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::zstd));
}
}
TEST("test serialization and deserialization of future multientry xxh64 no compression") {
XXH64CompressedChunk chunk(CompressionConfig::Type::NONE_MULTI, 1);
- verifySerializationAndDeserialization(chunk, 100);
+ verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi));
}
TEST("test serialization and deserialization of uncompressable lz4") {
XXH64CompressedChunk chunk(CompressionConfig::Type::LZ4, 1);
- verifySerializationAndDeserialization(chunk, 1);
+ verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi));
+}
+
+TEST("test serialization and deserialization of uncompressable zstd") {
+ XXH64CompressedChunk chunk(CompressionConfig::Type::ZSTD, 1);
+ verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi));
}
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp
index f03bdbe3f52..9a57980638d 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp
@@ -6,6 +6,7 @@
#include <vespa/vespalib/util/exceptions.h>
#include <xxhash.h>
#include <cassert>
+#include <ostream>
using std::make_unique;
using vespalib::make_string_short::fmt;
@@ -110,4 +111,8 @@ Encoding::calcCrc(Crc version, const void * buf, size_t sz)
}
}
+std::ostream &
+operator << (std::ostream & os, Encoding e) {
+ return os << "crc=" << e.getCrc() << " compression=" << e.getCompression();
+}
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h
index 5e44815cb1b..aa2a2085aab 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h
@@ -28,10 +28,13 @@ public:
Compression getCompression() const { return Compression((_raw >> 4) & 0xf); }
static int32_t calcCrc(Crc version, const void * buf, size_t sz);
uint8_t getRaw() const { return _raw; }
+ bool operator == (Encoding rhs) const { return _raw == rhs._raw; }
private:
uint8_t _raw;
};
+std::ostream & operator << (std::ostream & os, Encoding e);
+
/**
* Interface for different chunk formats.
* Format specifies both crc type, and compression type.