forked from continuwuation/rocksdb
Summary: while debugging stress test failure, I noticed that sst_dump and ldb do not work if custom db_stress compression manager is used. This PR adds support for it. ``` ./sst_dump --command=raw --show_properties --file=/tmp/rocksdb_crashtest_whitebox4ny5mass/000589.sst options.env is 0x7f2b1f4b9000 Process /tmp/rocksdb_crashtest_whitebox4ny5mass/000589.sst Sst file format: block-based /tmp/rocksdb_crashtest_whitebox4ny5mass/000589.sst: Not implemented: Could not load CompressionManager: DbStressCustom1 /tmp/rocksdb_crashtest_whitebox4ny5mass/000589.sst is not a valid SST file ./ldb idump --db=/tmp/rocksdb_crashtest_whiteboxy_emah11 --ignore_unknown_options --hex >> /tmp/i_dump Failed: Not implemented: Could not load CompressionManager: DbStressCustom1 ``` Pull Request resolved: https://github.com/facebook/rocksdb/pull/13827 Test Plan: manually tested that ldb and sst_dump work with DbStressCustomCompressionManager after this PR Reviewed By: pdillinger Differential Revision: D79461175 Pulled By: cbi42 fbshipit-source-id: c8c092b10b4fde3a295b00751057749e8f0cf095
28 lines
1.2 KiB
C++
28 lines
1.2 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).
|
|
#include "db_stress_compression_manager.h"
|
|
|
|
#include "rocksdb/utilities/object_registry.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
void DbStressCustomCompressionManager::Register() {
|
|
// We must register any compression managers with a custom
|
|
// CompatibilityName() so that if it was used in a past invocation but not
|
|
// the current invocation, we can still read the SST files requiring it.
|
|
static std::once_flag loaded;
|
|
std::call_once(loaded, [&]() {
|
|
TEST_AllowUnsupportedFormatVersion() = true;
|
|
auto& library = *ObjectLibrary::Default();
|
|
library.AddFactory<CompressionManager>(
|
|
DbStressCustomCompressionManager().CompatibilityName(),
|
|
[](const std::string& /*uri*/,
|
|
std::unique_ptr<CompressionManager>* guard,
|
|
std::string* /*errmsg*/) {
|
|
*guard = std::make_unique<DbStressCustomCompressionManager>();
|
|
return guard->get();
|
|
});
|
|
});
|
|
}
|
|
} // namespace ROCKSDB_NAMESPACE
|