Summary: * Make new format_version=7 a supported setting. * Fix a bug in compressed_secondary_cache.cc that is newly exercised by custom compression types and showing up in crash test with tiered secondary cache * Small change to handling of disabled compression in fv=7: use empty compression manager compatibility name. * Get rid of GetDefaultBuiltinCompressionManager() in public API because it could cause unexpected+unsafe schema change on a user's CompressionManager if built upon the default built-in manager and we add a new built-in schema. Now must be referenced by explicit compression schema version in the public API. (That notion was already exposed in compressed secondary cache API, for better or worse.) * Improve some error messages for compression misconfiguration * Improve testing with ObjectLibrary and CompressionManagers * Improve testing of compression_name table property in BlockBasedTableTest.BlockBasedTableProperties2 * Improve some comments Pull Request resolved: https://github.com/facebook/rocksdb/pull/13713 Test Plan: existing and updated tests. Notably, the crash test has already been running with (unpublished) format_version=7 Reviewed By: mszeszko-meta, hx235 Differential Revision: D77035482 Pulled By: pdillinger fbshipit-source-id: 95278de8734a79706a22361bff2184b1edb230ca
65 lines
2.4 KiB
C++
65 lines
2.4 KiB
C++
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#pragma once
|
|
|
|
#include "test_util/testutil.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
|
|
class DbStressCustomCompressionManager : public CompressionManager {
|
|
public:
|
|
const char* Name() const override {
|
|
return "DbStressCustomCompressionManager";
|
|
}
|
|
const char* CompatibilityName() const override { return "DbStressCustom1"; }
|
|
|
|
bool SupportsCompressionType(CompressionType type) const override {
|
|
return default_->SupportsCompressionType(type) ||
|
|
type == kCustomCompressionAA || type == kCustomCompressionAB ||
|
|
type == kCustomCompressionAC;
|
|
}
|
|
|
|
std::unique_ptr<Compressor> GetCompressor(const CompressionOptions& opts,
|
|
CompressionType type) override {
|
|
// db_stress never specifies a custom type, so we randomly use them anyway
|
|
// when this compression manager is used.
|
|
std::array<CompressionType, 4> choices = {
|
|
type, kCustomCompressionAA, kCustomCompressionAB, kCustomCompressionAC};
|
|
type = choices[Random::GetTLSInstance()->Uniform(4)];
|
|
switch (static_cast<unsigned char>(type)) {
|
|
case kCustomCompressionAA:
|
|
return std::make_unique<
|
|
test::CompressorCustomAlg<kCustomCompressionAA>>();
|
|
case kCustomCompressionAB:
|
|
return std::make_unique<
|
|
test::CompressorCustomAlg<kCustomCompressionAB>>();
|
|
case kCustomCompressionAC:
|
|
return std::make_unique<
|
|
test::CompressorCustomAlg<kCustomCompressionAC>>();
|
|
// Also support built-in compression algorithms
|
|
default:
|
|
return GetBuiltinV2CompressionManager()->GetCompressor(opts, type);
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<Decompressor> GetDecompressor() override {
|
|
return std::make_shared<test::DecompressorCustomAlg>();
|
|
}
|
|
|
|
std::shared_ptr<Decompressor> GetDecompressorForTypes(
|
|
const CompressionType* types_begin,
|
|
const CompressionType* types_end) override {
|
|
auto decomp = std::make_shared<test::DecompressorCustomAlg>();
|
|
decomp->SetAllowedTypes(types_begin, types_end);
|
|
return decomp;
|
|
}
|
|
|
|
protected:
|
|
std::shared_ptr<CompressionManager> default_ =
|
|
GetBuiltinV2CompressionManager();
|
|
};
|
|
|
|
} // namespace ROCKSDB_NAMESPACE
|