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).
8 #include "db/dbformat.h"
9 #include "db/table_properties_collector.h"
10 #include "rocksdb/types.h"
11 #include "util/string_util.h"
13 namespace ROCKSDB_NAMESPACE
{
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
;
23 // PropertiesCollector used to add properties specific to tables
24 // generated by SstFileWriter
25 class SstFileWriterPropertiesCollector
: public IntTblPropCollector
{
27 explicit SstFileWriterPropertiesCollector(int32_t version
,
28 SequenceNumber global_seqno
)
29 : version_(version
), global_seqno_(global_seqno
) {}
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.
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
46 virtual Status
Finish(UserCollectedProperties
* properties
) override
{
48 std::string version_val
;
49 PutFixed32(&version_val
, static_cast<uint32_t>(version_
));
50 properties
->insert({ExternalSstFilePropertyNames::kVersion
, version_val
});
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
});
60 virtual const char* Name() const override
{
61 return "SstFileWriterPropertiesCollector";
64 virtual UserCollectedProperties
GetReadableProperties() const override
{
65 return {{ExternalSstFilePropertyNames::kVersion
, ToString(version_
)}};
70 SequenceNumber global_seqno_
;
73 class SstFileWriterPropertiesCollectorFactory
74 : public IntTblPropCollectorFactory
{
76 explicit SstFileWriterPropertiesCollectorFactory(int32_t version
,
77 SequenceNumber global_seqno
)
78 : version_(version
), global_seqno_(global_seqno
) {}
80 virtual IntTblPropCollector
* CreateIntTblPropCollector(
81 uint32_t /*column_family_id*/) override
{
82 return new SstFileWriterPropertiesCollector(version_
, global_seqno_
);
85 virtual const char* Name() const override
{
86 return "SstFileWriterPropertiesCollector";
91 SequenceNumber global_seqno_
;
94 } // namespace ROCKSDB_NAMESPACE