db_stress_compression_manager.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (c) Meta Platforms, Inc. and affiliates.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #pragma once
  6. #include "test_util/testutil.h"
  7. namespace ROCKSDB_NAMESPACE {
  8. class DbStressCustomCompressionManager : public CompressionManager {
  9. public:
  10. const char* Name() const override {
  11. return "DbStressCustomCompressionManager";
  12. }
  13. const char* CompatibilityName() const override { return "DbStressCustom1"; }
  14. bool SupportsCompressionType(CompressionType type) const override {
  15. return default_->SupportsCompressionType(type) ||
  16. type == kCustomCompressionAA || type == kCustomCompressionAB ||
  17. type == kCustomCompressionAC;
  18. }
  19. std::unique_ptr<Compressor> GetCompressor(const CompressionOptions& opts,
  20. CompressionType type) override {
  21. // db_stress never specifies a custom type, so we randomly use them anyway
  22. // when this compression manager is used.
  23. std::array<CompressionType, 4> choices = {
  24. type, kCustomCompressionAA, kCustomCompressionAB, kCustomCompressionAC};
  25. type = choices[Random::GetTLSInstance()->Uniform(4)];
  26. switch (static_cast<unsigned char>(type)) {
  27. case kCustomCompressionAA:
  28. return std::make_unique<
  29. test::CompressorCustomAlg<kCustomCompressionAA>>();
  30. case kCustomCompressionAB:
  31. return std::make_unique<
  32. test::CompressorCustomAlg<kCustomCompressionAB>>();
  33. case kCustomCompressionAC:
  34. return std::make_unique<
  35. test::CompressorCustomAlg<kCustomCompressionAC>>();
  36. // Also support built-in compression algorithms
  37. default:
  38. return GetBuiltinV2CompressionManager()->GetCompressor(opts, type);
  39. }
  40. }
  41. std::shared_ptr<Decompressor> GetDecompressor() override {
  42. return std::make_shared<test::DecompressorCustomAlg>();
  43. }
  44. std::shared_ptr<Decompressor> GetDecompressorForTypes(
  45. const CompressionType* types_begin,
  46. const CompressionType* types_end) override {
  47. auto decomp = std::make_shared<test::DecompressorCustomAlg>();
  48. decomp->SetAllowedTypes(types_begin, types_end);
  49. return decomp;
  50. }
  51. static void Register();
  52. protected:
  53. std::shared_ptr<CompressionManager> default_ =
  54. GetBuiltinV2CompressionManager();
  55. };
  56. } // namespace ROCKSDB_NAMESPACE