]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/table/sst_file_writer_collectors.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / table / sst_file_writer_collectors.h
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
6 #pragma once
7 #include <string>
8 #include "db/dbformat.h"
9 #include "db/table_properties_collector.h"
10 #include "rocksdb/types.h"
11 #include "util/string_util.h"
12
13 namespace ROCKSDB_NAMESPACE {
14
15 // Table Properties that are specific to tables created by SstFileWriter.
16 struct ExternalSstFilePropertyNames {
17 // value of this property is a fixed uint32 number.
18 static const std::string kVersion;
19 // value of this property is a fixed uint64 number.
20 static const std::string kGlobalSeqno;
21 };
22
23 // PropertiesCollector used to add properties specific to tables
24 // generated by SstFileWriter
25 class SstFileWriterPropertiesCollector : public IntTblPropCollector {
26 public:
27 explicit SstFileWriterPropertiesCollector(int32_t version,
28 SequenceNumber global_seqno)
29 : version_(version), global_seqno_(global_seqno) {}
30
31 virtual Status InternalAdd(const Slice& /*key*/, const Slice& /*value*/,
32 uint64_t /*file_size*/) override {
33 // Intentionally left blank. Have no interest in collecting stats for
34 // individual key/value pairs.
35 return Status::OK();
36 }
37
38 virtual void BlockAdd(uint64_t /* blockRawBytes */,
39 uint64_t /* blockCompressedBytesFast */,
40 uint64_t /* blockCompressedBytesSlow */) override {
41 // Intentionally left blank. No interest in collecting stats for
42 // blocks.
43 return;
44 }
45
46 virtual Status Finish(UserCollectedProperties* properties) override {
47 // File version
48 std::string version_val;
49 PutFixed32(&version_val, static_cast<uint32_t>(version_));
50 properties->insert({ExternalSstFilePropertyNames::kVersion, version_val});
51
52 // Global Sequence number
53 std::string seqno_val;
54 PutFixed64(&seqno_val, static_cast<uint64_t>(global_seqno_));
55 properties->insert({ExternalSstFilePropertyNames::kGlobalSeqno, seqno_val});
56
57 return Status::OK();
58 }
59
60 virtual const char* Name() const override {
61 return "SstFileWriterPropertiesCollector";
62 }
63
64 virtual UserCollectedProperties GetReadableProperties() const override {
65 return {{ExternalSstFilePropertyNames::kVersion, ToString(version_)}};
66 }
67
68 private:
69 int32_t version_;
70 SequenceNumber global_seqno_;
71 };
72
73 class SstFileWriterPropertiesCollectorFactory
74 : public IntTblPropCollectorFactory {
75 public:
76 explicit SstFileWriterPropertiesCollectorFactory(int32_t version,
77 SequenceNumber global_seqno)
78 : version_(version), global_seqno_(global_seqno) {}
79
80 virtual IntTblPropCollector* CreateIntTblPropCollector(
81 uint32_t /*column_family_id*/) override {
82 return new SstFileWriterPropertiesCollector(version_, global_seqno_);
83 }
84
85 virtual const char* Name() const override {
86 return "SstFileWriterPropertiesCollector";
87 }
88
89 private:
90 int32_t version_;
91 SequenceNumber global_seqno_;
92 };
93
94 } // namespace ROCKSDB_NAMESPACE