// 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 #include #include #include "rocksdb/advanced_options.h" #include "rocksdb/options.h" #include "rocksdb/status.h" #include "rocksdb/table.h" namespace ROCKSDB_NAMESPACE { struct ColumnFamilyOptions; struct ConfigOptions; struct DBOptions; struct ImmutableCFOptions; struct ImmutableDBOptions; struct MutableDBOptions; struct MutableCFOptions; struct Options; std::vector GetSupportedCompressions(); std::vector GetSupportedDictCompressions(); std::vector GetSupportedChecksums(); inline bool IsSupportedChecksumType(ChecksumType type) { // Avoid annoying compiler warning-as-error (-Werror=type-limits) auto min = kNoChecksum; auto max = kXXH3; return type >= min && type <= max; } // Checks that the combination of DBOptions and ColumnFamilyOptions are valid Status ValidateOptions(const DBOptions& db_opts, const ColumnFamilyOptions& cf_opts); DBOptions BuildDBOptions(const ImmutableDBOptions& immutable_db_options, const MutableDBOptions& mutable_db_options); ColumnFamilyOptions BuildColumnFamilyOptions( const ColumnFamilyOptions& ioptions, const MutableCFOptions& mutable_cf_options); void UpdateColumnFamilyOptions(const ImmutableCFOptions& ioptions, ColumnFamilyOptions* cf_opts); void UpdateColumnFamilyOptions(const MutableCFOptions& moptions, ColumnFamilyOptions* cf_opts); std::unique_ptr DBOptionsAsConfigurable( const MutableDBOptions& opts); std::unique_ptr DBOptionsAsConfigurable( const DBOptions& opts, const std::unordered_map* opt_map = nullptr); std::unique_ptr CFOptionsAsConfigurable( const MutableCFOptions& opts); std::unique_ptr CFOptionsAsConfigurable( const ColumnFamilyOptions& opts, const std::unordered_map* opt_map = nullptr); Status StringToMap(const std::string& opts_str, std::unordered_map* opts_map); struct OptionsHelper { static const std::string kCFOptionsName /*= "ColumnFamilyOptions"*/; static const std::string kDBOptionsName /*= "DBOptions" */; static std::map compaction_style_to_string; static std::map compaction_pri_to_string; static std::map compaction_stop_style_to_string; static std::map temperature_to_string; static std::unordered_map checksum_type_string_map; static std::unordered_map compression_type_string_map; static std::unordered_map prepopulate_blob_cache_string_map; static std::unordered_map compaction_stop_style_string_map; static std::unordered_map encoding_type_string_map; static std::unordered_map compaction_style_string_map; static std::unordered_map compaction_pri_string_map; static std::unordered_map temperature_string_map; }; // Some aliasing static auto& compaction_style_to_string = OptionsHelper::compaction_style_to_string; static auto& compaction_pri_to_string = OptionsHelper::compaction_pri_to_string; static auto& compaction_stop_style_to_string = OptionsHelper::compaction_stop_style_to_string; static auto& temperature_to_string = OptionsHelper::temperature_to_string; static auto& checksum_type_string_map = OptionsHelper::checksum_type_string_map; static auto& compaction_stop_style_string_map = OptionsHelper::compaction_stop_style_string_map; static auto& compression_type_string_map = OptionsHelper::compression_type_string_map; static auto& encoding_type_string_map = OptionsHelper::encoding_type_string_map; static auto& compaction_style_string_map = OptionsHelper::compaction_style_string_map; static auto& compaction_pri_string_map = OptionsHelper::compaction_pri_string_map; static auto& temperature_string_map = OptionsHelper::temperature_string_map; static auto& prepopulate_blob_cache_string_map = OptionsHelper::prepopulate_blob_cache_string_map; } // namespace ROCKSDB_NAMESPACE