write_batch_util.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright (c) Meta Platforms, Inc. and affiliates.
  2. //
  3. // This source code is licensed under both the GPLv2 (found in the
  4. // COPYING file in the root directory) and Apache 2.0 License
  5. // (found in the LICENSE.Apache file in the root directory).
  6. #pragma once
  7. #include <unordered_set>
  8. #include <vector>
  9. #include "rocksdb/slice.h"
  10. #include "rocksdb/status.h"
  11. #include "rocksdb/write_batch.h"
  12. namespace ROCKSDB_NAMESPACE {
  13. // ColumnFamilyCollector is a write batch handler which does nothing
  14. // except recording unique column family IDs
  15. class ColumnFamilyCollector : public WriteBatch::Handler {
  16. std::unordered_set<uint32_t> column_family_ids_;
  17. Status AddColumnFamilyId(uint32_t column_family_id) {
  18. column_family_ids_.insert(column_family_id);
  19. return Status::OK();
  20. }
  21. public:
  22. explicit ColumnFamilyCollector() {}
  23. ~ColumnFamilyCollector() override {}
  24. Status PutCF(uint32_t column_family_id, const Slice&, const Slice&) override {
  25. return AddColumnFamilyId(column_family_id);
  26. }
  27. Status PutEntityCF(uint32_t column_family_id, const Slice&,
  28. const Slice&) override {
  29. return AddColumnFamilyId(column_family_id);
  30. }
  31. Status TimedPutCF(uint32_t column_family_id, const Slice&, const Slice&,
  32. uint64_t) override {
  33. return AddColumnFamilyId(column_family_id);
  34. }
  35. Status DeleteCF(uint32_t column_family_id, const Slice&) override {
  36. return AddColumnFamilyId(column_family_id);
  37. }
  38. Status SingleDeleteCF(uint32_t column_family_id, const Slice&) override {
  39. return AddColumnFamilyId(column_family_id);
  40. }
  41. Status DeleteRangeCF(uint32_t column_family_id, const Slice&,
  42. const Slice&) override {
  43. return AddColumnFamilyId(column_family_id);
  44. }
  45. Status MergeCF(uint32_t column_family_id, const Slice&,
  46. const Slice&) override {
  47. return AddColumnFamilyId(column_family_id);
  48. }
  49. Status PutBlobIndexCF(uint32_t column_family_id, const Slice&,
  50. const Slice&) override {
  51. return AddColumnFamilyId(column_family_id);
  52. }
  53. Status MarkBeginPrepare(bool) override { return Status::OK(); }
  54. Status MarkEndPrepare(const Slice&) override { return Status::OK(); }
  55. Status MarkRollback(const Slice&) override { return Status::OK(); }
  56. Status MarkCommit(const Slice&) override { return Status::OK(); }
  57. Status MarkCommitWithTimestamp(const Slice&, const Slice&) override {
  58. return Status::OK();
  59. }
  60. Status MarkNoop(bool) override { return Status::OK(); }
  61. const std::unordered_set<uint32_t>& column_families() const {
  62. return column_family_ids_;
  63. }
  64. };
  65. Status CollectColumnFamilyIdsFromWriteBatch(
  66. const WriteBatch& batch, std::vector<uint32_t>* column_family_ids);
  67. } // namespace ROCKSDB_NAMESPACE