flush_block_policy_impl.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  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 "rocksdb/flush_block_policy.h"
  7. namespace ROCKSDB_NAMESPACE {
  8. // FlushBlockEveryKeyPolicy currently used only in tests.
  9. class FlushBlockEveryKeyPolicy : public FlushBlockPolicy {
  10. public:
  11. bool Update(const Slice& /*key*/, const Slice& /*value*/) override {
  12. if (!start_) {
  13. start_ = true;
  14. return false;
  15. }
  16. return true;
  17. }
  18. private:
  19. bool start_ = false;
  20. };
  21. class FlushBlockEveryKeyPolicyFactory : public FlushBlockPolicyFactory {
  22. public:
  23. explicit FlushBlockEveryKeyPolicyFactory() {}
  24. static const char* kClassName() { return "FlushBlockEveryKeyPolicyFactory"; }
  25. const char* Name() const override { return kClassName(); }
  26. FlushBlockPolicy* NewFlushBlockPolicy(
  27. const BlockBasedTableOptions& /*table_options*/,
  28. const BlockBuilder& /*data_block_builder*/) const override {
  29. return new FlushBlockEveryKeyPolicy;
  30. }
  31. };
  32. // For internal use, policy that is stateless after creation, meaning it can
  33. // be safely re-targeted to another block builder.
  34. class RetargetableFlushBlockPolicy : public FlushBlockPolicy {
  35. public:
  36. explicit RetargetableFlushBlockPolicy(const BlockBuilder& data_block_builder)
  37. : data_block_builder_(&data_block_builder) {}
  38. void Retarget(const BlockBuilder& data_block_builder) {
  39. data_block_builder_ = &data_block_builder;
  40. }
  41. protected:
  42. const BlockBuilder* data_block_builder_;
  43. };
  44. std::unique_ptr<RetargetableFlushBlockPolicy> NewFlushBlockBySizePolicy(
  45. const uint64_t size, const int deviation,
  46. const BlockBuilder& data_block_builder);
  47. } // namespace ROCKSDB_NAMESPACE