// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #pragma once #include #include "rocksdb/types.h" #include "util/string_util.h" namespace rocksdb { // Table Properties that are specific to tables created by SstFileWriter. struct ExternalSstFilePropertyNames { // value of this property is a fixed uint32 number. static const std::string kVersion; // value of this property is a fixed uint64 number. static const std::string kGlobalSeqno; }; // PropertiesCollector used to add properties specific to tables // generated by SstFileWriter class SstFileWriterPropertiesCollector : public IntTblPropCollector { public: explicit SstFileWriterPropertiesCollector(int32_t version, SequenceNumber global_seqno) : version_(version), global_seqno_(global_seqno) {} virtual Status InternalAdd(const Slice& key, const Slice& value, uint64_t file_size) override { // Intentionally left blank. Have no interest in collecting stats for // individual key/value pairs. return Status::OK(); } virtual Status Finish(UserCollectedProperties* properties) override { // File version std::string version_val; PutFixed32(&version_val, static_cast(version_)); properties->insert({ExternalSstFilePropertyNames::kVersion, version_val}); // Global Sequence number std::string seqno_val; PutFixed64(&seqno_val, static_cast(global_seqno_)); properties->insert({ExternalSstFilePropertyNames::kGlobalSeqno, seqno_val}); return Status::OK(); } virtual const char* Name() const override { return "SstFileWriterPropertiesCollector"; } virtual UserCollectedProperties GetReadableProperties() const override { return {{ExternalSstFilePropertyNames::kVersion, ToString(version_)}}; } private: int32_t version_; SequenceNumber global_seqno_; }; class SstFileWriterPropertiesCollectorFactory : public IntTblPropCollectorFactory { public: explicit SstFileWriterPropertiesCollectorFactory(int32_t version, SequenceNumber global_seqno) : version_(version), global_seqno_(global_seqno) {} virtual IntTblPropCollector* CreateIntTblPropCollector( uint32_t column_family_id) override { return new SstFileWriterPropertiesCollector(version_, global_seqno_); } virtual const char* Name() const override { return "SstFileWriterPropertiesCollector"; } private: int32_t version_; SequenceNumber global_seqno_; }; } // namespace rocksdb