// 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). // // Copyright (c) 2011 The LevelDB Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of contributors. #include "rocksdb/cache.h" #include "cache/lru_cache.h" #include "rocksdb/secondary_cache.h" #include "rocksdb/utilities/customizable_util.h" #include "rocksdb/utilities/options_type.h" #include "util/string_util.h" namespace ROCKSDB_NAMESPACE { #ifndef ROCKSDB_LITE static std::unordered_map lru_cache_options_type_info = { {"capacity", {offsetof(struct LRUCacheOptions, capacity), OptionType::kSizeT, OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, {"num_shard_bits", {offsetof(struct LRUCacheOptions, num_shard_bits), OptionType::kInt, OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, {"strict_capacity_limit", {offsetof(struct LRUCacheOptions, strict_capacity_limit), OptionType::kBoolean, OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, {"high_pri_pool_ratio", {offsetof(struct LRUCacheOptions, high_pri_pool_ratio), OptionType::kDouble, OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, }; #endif // ROCKSDB_LITE Status SecondaryCache::CreateFromString( const ConfigOptions& config_options, const std::string& value, std::shared_ptr* result) { return LoadSharedObject(config_options, value, nullptr, result); } Status Cache::CreateFromString(const ConfigOptions& config_options, const std::string& value, std::shared_ptr* result) { Status status; std::shared_ptr cache; if (value.find('=') == std::string::npos) { cache = NewLRUCache(ParseSizeT(value)); } else { #ifndef ROCKSDB_LITE LRUCacheOptions cache_opts; status = OptionTypeInfo::ParseStruct(config_options, "", &lru_cache_options_type_info, "", value, &cache_opts); if (status.ok()) { cache = NewLRUCache(cache_opts); } #else (void)config_options; status = Status::NotSupported("Cannot load cache in LITE mode ", value); #endif //! ROCKSDB_LITE } if (status.ok()) { result->swap(cache); } return status; } } // namespace ROCKSDB_NAMESPACE