// Copyright 2025 XTX Markets Technologies Limited // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #pragma once #include #include #include #include #include #include #include #include #include "Env.hpp" #include "MsgsGen.hpp" class SharedRocksDB { public: SharedRocksDB(Logger& logger, std::shared_ptr& xmon, const std::string& path, const std::string& statisticsPath); ~SharedRocksDB(); void open(rocksdb::Options options, const std::string& path); void openTransactionDB(rocksdb::Options options); void open(rocksdb::Options options); void openForReadOnly(rocksdb::Options options); void close(); void registerCFDescriptors(const std::vector& _cfDescriptors); rocksdb::ColumnFamilyHandle* getCF(const std::string& name) const; void deleteCF(const std::string& name); rocksdb::ColumnFamilyHandle* createCF(const rocksdb::ColumnFamilyDescriptor& descriptor); rocksdb::DB* db() const; rocksdb::OptimisticTransactionDB* transactionDB() const; void rocksDBMetrics(std::unordered_map& stats); void dumpRocksDBStatistics(); TernError snapshot(const std::string& path); private: Env _env; bool _transactionDB; const std::string _path; const std::string _statisticsFilePath; std::unique_ptr _db; std::shared_ptr _dbStatistics; std::vector _cfDescriptors; mutable std::shared_mutex _stateMutex; std::unordered_map _cfs; };