| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // 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).
- //
- // This file defines a collection of statistics collectors.
- #pragma once
- #include "rocksdb/table_properties.h"
- #include <memory>
- #include <string>
- #include <vector>
- namespace ROCKSDB_NAMESPACE {
- // Base class for internal table properties collector.
- class IntTblPropCollector {
- public:
- virtual ~IntTblPropCollector() {}
- virtual Status Finish(UserCollectedProperties* properties) = 0;
- virtual const char* Name() const = 0;
- // @params key the user key that is inserted into the table.
- // @params value the value that is inserted into the table.
- virtual Status InternalAdd(const Slice& key, const Slice& value,
- uint64_t file_size) = 0;
- virtual void BlockAdd(uint64_t blockRawBytes,
- uint64_t blockCompressedBytesFast,
- uint64_t blockCompressedBytesSlow) = 0;
- virtual UserCollectedProperties GetReadableProperties() const = 0;
- virtual bool NeedCompact() const { return false; }
- };
- // Factory for internal table properties collector.
- class IntTblPropCollectorFactory {
- public:
- virtual ~IntTblPropCollectorFactory() {}
- // has to be thread-safe
- virtual IntTblPropCollector* CreateIntTblPropCollector(
- uint32_t column_family_id) = 0;
- // The name of the properties collector can be used for debugging purpose.
- virtual const char* Name() const = 0;
- };
- // When rocksdb creates a new table, it will encode all "user keys" into
- // "internal keys", which contains meta information of a given entry.
- //
- // This class extracts user key from the encoded internal key when Add() is
- // invoked.
- class UserKeyTablePropertiesCollector : public IntTblPropCollector {
- public:
- // transfer of ownership
- explicit UserKeyTablePropertiesCollector(TablePropertiesCollector* collector)
- : collector_(collector) {}
- virtual ~UserKeyTablePropertiesCollector() {}
- virtual Status InternalAdd(const Slice& key, const Slice& value,
- uint64_t file_size) override;
- virtual void BlockAdd(uint64_t blockRawBytes,
- uint64_t blockCompressedBytesFast,
- uint64_t blockCompressedBytesSlow) override;
- virtual Status Finish(UserCollectedProperties* properties) override;
- virtual const char* Name() const override { return collector_->Name(); }
- UserCollectedProperties GetReadableProperties() const override;
- virtual bool NeedCompact() const override {
- return collector_->NeedCompact();
- }
- protected:
- std::unique_ptr<TablePropertiesCollector> collector_;
- };
- class UserKeyTablePropertiesCollectorFactory
- : public IntTblPropCollectorFactory {
- public:
- explicit UserKeyTablePropertiesCollectorFactory(
- std::shared_ptr<TablePropertiesCollectorFactory> user_collector_factory)
- : user_collector_factory_(user_collector_factory) {}
- virtual IntTblPropCollector* CreateIntTblPropCollector(
- uint32_t column_family_id) override {
- TablePropertiesCollectorFactory::Context context;
- context.column_family_id = column_family_id;
- return new UserKeyTablePropertiesCollector(
- user_collector_factory_->CreateTablePropertiesCollector(context));
- }
- virtual const char* Name() const override {
- return user_collector_factory_->Name();
- }
- private:
- std::shared_ptr<TablePropertiesCollectorFactory> user_collector_factory_;
- };
- } // namespace ROCKSDB_NAMESPACE
|