* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef BOOST_SS_CONFIG_H
#define BOOST_SS_CONFIG_H
#include <cstdint>
#include <memory>
#include <string>
#include <valarray>
#include <vector>
#include "bss_types.h"
#include "compress_algo.h"
namespace ock {
namespace bss {
class Config {
public:
Config() = default;
Config(uint32_t startGroup, uint32_t endGroup, uint32_t maxParallelism)
{
Init(startGroup, endGroup, maxParallelism);
}
void Init(uint32_t startGroup, uint32_t endGroup, uint32_t maxParallelism);
inline uint32_t GetMaxParallelism() const
{
return mMaxParallelism;
}
inline void SetSliceStandardSizePerBucket(uint32_t size)
{
mSliceStandardSizePerBucket = size;
}
inline uint32_t GetSliceStandardSizePerBucket() const
{
return mSliceStandardSizePerBucket;
}
inline uint64_t GetPayloadPerBucketGroup() const
{
return NO_256 * NO_1024 * NO_1024;
}
inline uint64_t GetSliceMaxSize() const
{
return NO_16 * NO_1024 * NO_1024;
}
inline uint32_t GetLogicTableDefaultChainLen() const
{
return NO_3;
}
inline uint64_t GetTotalDBSize() const
{
return mTotalDBSize;
}
inline float GetFileStoreMemoryFraction() const
{
return mFileMemoryRatio;
}
inline void SetFileMemoryRatio(float fileMemoryRatio)
{
mFileMemoryRatio = fileMemoryRatio;
}
inline void SetEvictMinSize(uint32_t size)
{
mEvictMinSize = size;
}
inline uint32_t GetEvictMinSize() const
{
return mEvictMinSize;
}
inline uint32_t GetFileStoreNumLevels() const
{
return NO_5;
}
inline uint64_t GetFileStoreMaxBaseLevelBytes() const
{
return mMaxBaseLevelBytes;
}
inline void SetFileStoreMaxBaseLevelBytes(uint64_t size)
{
mMaxBaseLevelBytes = size;
}
inline uint64_t GetFileStoreMaxCompactionSize() const
{
return NO_25 * GetFileBaseSize();
}
inline uint64_t GetFileBaseSize() const
{
return mFileBaseSize;
}
inline uint64_t GetBlobFileSize() const
{
return mBlobFileSize;
}
inline void SetBlobFileSize(uint64_t blobFileSize)
{
mBlobFileSize = blobFileSize;
}
inline void SetFileStoreFileBaseSize(uint64_t size)
{
mFileBaseSize = size;
}
inline uint32_t GetFileStoreL0NumTrigger() const
{
return mFileStoreL0NumTrigger;
}
inline void SetFileStoreL0NumTrigger(uint32_t trigger)
{
mFileStoreL0NumTrigger = trigger;
}
inline uint32_t GetFileStoreMultiple() const
{
return mFileStoreMultiple;
}
inline void SetFileStoreMultiple(uint32_t multiple)
{
mFileStoreMultiple = multiple;
}
inline uint64_t GetFileStoreMaxGrandParentOverlapBytes() const
{
return NO_10 * GetFileBaseSize();
}
inline uint32_t GetInMemoryCompactionThreshold() const
{
return NO_10;
}
inline uint32_t GetStartGroup() const
{
return mStartGroup;
}
inline uint32_t GetEndGroup() const
{
return mEndGroup;
}
inline uint32_t GetDataBlockSize() const
{
return NO_16 * NO_1024;
}
inline uint8_t GetBlockType() const
{
return 1;
}
inline float GetHashIndexLoadRatio() const
{
float loadRatio = 0.75F;
return loadRatio;
}
inline uint8_t GetIndexBlockType() const
{
return NO_3;
}
inline uint32_t GetPartitionedIndexMaxLevel() const
{
return NO_1;
}
inline uint32_t GetPartitionedIndexBlockSize() const
{
return NO_64 * NO_1024;
}
inline uint32_t GetMaxNumberOfParallelSubtasks() const
{
return mMaxParallelism;
}
inline uint8_t GetFileFactoryType() const
{
return 1;
}
inline float GetTotalMemHighMarkRatio() const
{
return mTotalMemHighMarkRatio;
}
inline void SetTotalMemHighMarkRatio(float memoryRatio)
{
mTotalMemHighMarkRatio = memoryRatio;
}
inline uint32_t GetMemorySegmentSize() const
{
return mMemorySegmentSize;
}
inline void SetMemorySegmentSize(uint32_t segmentSize)
{
mMemorySegmentSize = segmentSize;
}
inline void SetTotalDBSize(uint64_t totalDBSize)
{
mTotalDBSize = totalDBSize;
}
inline void SetHeapAvailableSize(uint64_t overHeapSize)
{
mHeapAvailableSize = overHeapSize;
}
inline uint64_t GetHeapAvailableSize() const
{
return mHeapAvailableSize;
}
inline void SetTaskSlotFlag(uint32_t taskSlotFlag)
{
mTaskSlotFlag = taskSlotFlag;
}
inline uint32_t GetTaskSlotFlag() const
{
return mTaskSlotFlag;
}
inline void SetPeakFilterElemNum(int32_t num)
{
mPeakFilterElemNum = num;
}
inline uint32_t PeakFilterElemNum() const
{
return mPeakFilterElemNum;
}
inline void SetLocalPath(const std::string &localPath)
{
mLocalPath = localPath;
}
inline void SetBackendUID(const std::string &backendUID)
{
mBackendUID = backendUID;
}
inline std::string &GetLocalPath()
{
return mLocalPath;
}
inline std::string &GetRemotePath()
{
return mRemotePath;
}
inline std::string &GetBackendUID()
{
return mBackendUID;
}
inline int32_t GetLsmStoreCompactionSwitch() const
{
return mLsmStoreCompactionSwitch;
}
inline void SetLsmStoreCompactionSwitch(int32_t uSwitch)
{
mLsmStoreCompactionSwitch = uSwitch;
}
inline bool GetTtlFilterSwitch() const
{
return mTtlFilterSwitch;
}
inline void SetTtlFilterSwitch(bool ttlFilterSwitch)
{
mTtlFilterSwitch = ttlFilterSwitch;
}
inline bool GetCacheIndexAndFilterSwitch() const
{
return mCacheIndexAndFilterSwitch;
}
inline void SetCacheIndexAndFilterSwitch(bool cacheIndexAndFilterSwitch)
{
mCacheIndexAndFilterSwitch = cacheIndexAndFilterSwitch;
}
inline float GetCacheIndexAndFilterRatio() const
{
return mCacheIndexAndFilterRatio;
}
inline void SetCacheIndexAndFilterRatio(float cacheIndexAndFilterRatio)
{
mCacheIndexAndFilterRatio = cacheIndexAndFilterRatio;
}
inline CompressAlgo GetLsmStoreCompressionPolicy() const
{
return mLsmStoreCompressionPolicy;
}
inline void SetLsmStoreCompressionPolicy(const std::string &lsmStoreCompressionPolicy)
{
mLsmStoreCompressionPolicy = CompressAlgoUtil::CompressAlgoTransform(lsmStoreCompressionPolicy);
}
inline std::vector<CompressAlgo> GetCompressionLevelPolicy() const
{
return mCompressionLevelPolicy;
}
void SetCompressionLevelPolicy(const std::vector<std::string> &compressionLevelPolicy);
inline void SetBackupPath(const std::string &SnapshotBackupPath)
{
mBackupPath = SnapshotBackupPath;
}
inline const std::string &GetBackupPath() const
{
return mBackupPath;
}
inline void SetEnableLocalRecovery(bool enableLocalRecovery)
{
mEnableLocalRecovery = enableLocalRecovery;
}
inline bool GetEnableLocalRecovery() const
{
return mEnableLocalRecovery;
}
inline void SetIsNewJob(bool isNewJob)
{
mIsNewJob = isNewJob;
}
inline bool GetIsNewJob() const
{
return mIsNewJob;
}
inline void SetMaxBlobNumInMemCache(uint32_t maxBlobNumInMemCache)
{
mMaxBlobNumInMemCache = maxBlobNumInMemCache;
}
inline void SetTombstoneDataBlockSize(uint32_t tombstoneDataBlockSize)
{
mTombstoneDataBlockSize = tombstoneDataBlockSize;
}
inline void SetTombstoneFileSize(uint32_t tombstoneFileSize)
{
mTombstoneFileSize = tombstoneFileSize;
}
inline uint64_t GetTombstoneLevelMaxSize(uint32_t levelId) const
{
if (levelId < 1) {
return IO_SIZE_32M;
}
return IO_SIZE_32M * (uint64_t)std::pow(NO_10, levelId - 1);
}
inline uint32_t GetTombstoneCompactionGroupSize() const
{
return NO_4;
}
inline void SetEnableKVSeparate(bool IsKVSeparate)
{
mIsKVSeparate = IsKVSeparate;
}
inline bool GetEnableKVSeparate() const
{
return mIsKVSeparate;
}
inline void SetBlobValueSizeThreshold(uint32_t blobValueSizeThreshold)
{
mBlobValueSizeThreshold = blobValueSizeThreshold;
}
inline uint32_t GetBlobValueSizeThreshold() const
{
return mBlobValueSizeThreshold;
}
inline void SetBlobDefaultBlockSize(uint32_t defaultBlockSize)
{
mBlobDefaultBlockSize = defaultBlockSize;
}
inline uint32_t GetBlobDefaultBlockSize() const
{
return mBlobDefaultBlockSize;
}
inline double GetBlobFileCompactionMinDeleteRatio() const
{
return (mBlobMaxSpaceAmplificationRatio - 1.0) / mBlobMaxSpaceAmplificationRatio;
}
inline double GetBlobMaxSpaceAmplificationRatio() const
{
return mBlobMaxSpaceAmplificationRatio;
}
inline uint64_t GetBlobMinCompactionThreshold() const
{
return mBlobMinCompactionThreshold;
}
inline uint64_t GetBlobFileRetainTimeInMill() const
{
return mBlobFileRetainTimeInMill;
}
inline bool GetEnableTombstone() const
{
return mEnableTombstone;
}
uint64_t mTotalDBSize = IO_SIZE_2G;
uint32_t mMemorySegmentSize = 0;
uint64_t mHeapAvailableSize = IO_SIZE_2G;
uint32_t mTaskSlotFlag = 0;
int32_t mPeakFilterElemNum = 0;
uint32_t mStartGroup = 0;
uint32_t mEndGroup = 0;
uint32_t mMaxParallelism = 0;
uint32_t mEvictMinSize = IO_SIZE_32M;
uint32_t mSliceStandardSizePerBucket = IO_SIZE_64K;
float mTotalMemHighMarkRatio = 0.8;
float mFileMemoryRatio = 0.2;
std::string mLocalPath;
std::string mRemotePath;
std::string mBackendUID;
std::string mBackupPath;
bool mEnableLocalRecovery;
bool mIsNewJob = true;
int32_t mLsmStoreCompactionSwitch = 1;
bool mTtlFilterSwitch = false;
bool mIsKVSeparate = false;
uint32_t mBlobDefaultBlockSize = IO_SIZE_16K;
uint32_t mBlobValueSizeThreshold = 200;
bool mCacheIndexAndFilterSwitch = true;
float mCacheIndexAndFilterRatio = 0.0f;
uint64_t mFileBaseSize = IO_SIZE_64M;
uint64_t mBlobFileSize = IO_SIZE_128M;
uint64_t mMaxBaseLevelBytes = IO_SIZE_256M;
uint32_t mFileStoreMultiple = NO_10;
uint32_t mFileStoreL0NumTrigger = NO_8;
std::vector<CompressAlgo> mCompressionLevelPolicy = { CompressAlgo::NONE, CompressAlgo::NONE, CompressAlgo::LZ4 };
CompressAlgo mLsmStoreCompressionPolicy = CompressAlgo::LZ4;
uint32_t mMaxBlobNumInMemCache = TOMBSTONE_MEMTABLE_SIZE;
uint32_t mTombstoneDataBlockSize = IO_SIZE_64K;
uint32_t mTombstoneFileSize = IO_SIZE_64M;
uint32_t mTombstoneLevel0CompactionFileNum = 4;
uint64_t mBlobMinCompactionThreshold = IO_SIZE_1G;
double mBlobMaxSpaceAmplificationRatio = 3.0;
uint64_t mBlobFileRetainTimeInMill = 120000;
bool mEnableTombstone = true;
};
using ConfigRef = std::shared_ptr<Config>;
}
}
#endif