blob_file_builder.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 <cinttypes>
  7. #include <functional>
  8. #include <memory>
  9. #include <string>
  10. #include <vector>
  11. #include "rocksdb/advanced_options.h"
  12. #include "rocksdb/compression_type.h"
  13. #include "rocksdb/env.h"
  14. #include "rocksdb/options.h"
  15. #include "rocksdb/rocksdb_namespace.h"
  16. #include "rocksdb/types.h"
  17. namespace ROCKSDB_NAMESPACE {
  18. class VersionSet;
  19. class FileSystem;
  20. class SystemClock;
  21. struct ImmutableOptions;
  22. struct MutableCFOptions;
  23. struct FileOptions;
  24. class BlobFileAddition;
  25. class Status;
  26. class Slice;
  27. class BlobLogWriter;
  28. class IOTracer;
  29. class BlobFileCompletionCallback;
  30. class BlobFileBuilder {
  31. public:
  32. BlobFileBuilder(VersionSet* versions, FileSystem* fs,
  33. const ImmutableOptions* immutable_options,
  34. const MutableCFOptions* mutable_cf_options,
  35. const FileOptions* file_options,
  36. const WriteOptions* write_options, std::string db_id,
  37. std::string db_session_id, int job_id,
  38. uint32_t column_family_id,
  39. const std::string& column_family_name,
  40. Env::WriteLifeTimeHint write_hint,
  41. const std::shared_ptr<IOTracer>& io_tracer,
  42. BlobFileCompletionCallback* blob_callback,
  43. BlobFileCreationReason creation_reason,
  44. std::vector<std::string>* blob_file_paths,
  45. std::vector<BlobFileAddition>* blob_file_additions);
  46. BlobFileBuilder(std::function<uint64_t()> file_number_generator,
  47. FileSystem* fs, const ImmutableOptions* immutable_options,
  48. const MutableCFOptions* mutable_cf_options,
  49. const FileOptions* file_options,
  50. const WriteOptions* write_options, std::string db_id,
  51. std::string db_session_id, int job_id,
  52. uint32_t column_family_id,
  53. const std::string& column_family_name,
  54. Env::WriteLifeTimeHint write_hint,
  55. const std::shared_ptr<IOTracer>& io_tracer,
  56. BlobFileCompletionCallback* blob_callback,
  57. BlobFileCreationReason creation_reason,
  58. std::vector<std::string>* blob_file_paths,
  59. std::vector<BlobFileAddition>* blob_file_additions);
  60. BlobFileBuilder(const BlobFileBuilder&) = delete;
  61. BlobFileBuilder& operator=(const BlobFileBuilder&) = delete;
  62. ~BlobFileBuilder();
  63. Status Add(const Slice& key, const Slice& value, std::string* blob_index);
  64. Status Finish();
  65. void Abandon(const Status& s);
  66. private:
  67. bool IsBlobFileOpen() const;
  68. Status OpenBlobFileIfNeeded();
  69. Status CompressBlobIfNeeded(Slice* blob, std::string* compressed_blob) const;
  70. Status WriteBlobToFile(const Slice& key, const Slice& blob,
  71. uint64_t* blob_file_number, uint64_t* blob_offset);
  72. Status CloseBlobFile();
  73. Status CloseBlobFileIfNeeded();
  74. Status PutBlobIntoCacheIfNeeded(const Slice& blob, uint64_t blob_file_number,
  75. uint64_t blob_offset) const;
  76. std::function<uint64_t()> file_number_generator_;
  77. FileSystem* fs_;
  78. const ImmutableOptions* immutable_options_;
  79. uint64_t min_blob_size_;
  80. uint64_t blob_file_size_;
  81. CompressionType blob_compression_type_;
  82. PrepopulateBlobCache prepopulate_blob_cache_;
  83. const FileOptions* file_options_;
  84. const WriteOptions* write_options_;
  85. const std::string db_id_;
  86. const std::string db_session_id_;
  87. int job_id_;
  88. uint32_t column_family_id_;
  89. std::string column_family_name_;
  90. Env::WriteLifeTimeHint write_hint_;
  91. std::shared_ptr<IOTracer> io_tracer_;
  92. BlobFileCompletionCallback* blob_callback_;
  93. BlobFileCreationReason creation_reason_;
  94. std::vector<std::string>* blob_file_paths_;
  95. std::vector<BlobFileAddition>* blob_file_additions_;
  96. std::unique_ptr<BlobLogWriter> writer_;
  97. uint64_t blob_count_;
  98. uint64_t blob_bytes_;
  99. };
  100. } // namespace ROCKSDB_NAMESPACE