| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // 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.
- //
- // Compression context cache allows to cache compression/uncompression contexts
- // This helps with Random Read latencies and reduces CPU utilization
- // Caching is implemented using CoreLocal facility. Compression/Uncompression
- // instances are cached on a per core basis using CoreLocalArray. A borrowed
- // instance is atomically replaced with a sentinel value for the time of being
- // used. If it turns out that another thread is already makes use of the
- // instance we still create one on the heap which is later is destroyed.
- #pragma once
- #include <stdint.h>
- #include "rocksdb/rocksdb_namespace.h"
- namespace ROCKSDB_NAMESPACE {
- class ZSTDUncompressCachedData;
- class CompressionContextCache {
- public:
- // Singleton
- static CompressionContextCache* Instance();
- static void InitSingleton();
- CompressionContextCache(const CompressionContextCache&) = delete;
- CompressionContextCache& operator=(const CompressionContextCache&) = delete;
- ZSTDUncompressCachedData GetCachedZSTDUncompressData();
- void ReturnCachedZSTDUncompressData(int64_t idx);
- private:
- // Singleton
- CompressionContextCache();
- ~CompressionContextCache();
- class Rep;
- Rep* rep_;
- };
- } // namespace ROCKSDB_NAMESPACE
|