From ec761712b0d1d13ff06395fe3da43ba028cc6e5a Mon Sep 17 00:00:00 2001 From: Aleks Lozovyuk Date: Thu, 30 Apr 2026 13:51:01 +0300 Subject: [PATCH 1/2] Update rocksdb.cmake --- cmake/rocksdb.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/rocksdb.cmake b/cmake/rocksdb.cmake index a976c07f0de..737f95b8d50 100644 --- a/cmake/rocksdb.cmake +++ b/cmake/rocksdb.cmake @@ -26,8 +26,8 @@ endif() include(cmake/utils.cmake) FetchContent_DeclareGitHubWithMirror(rocksdb - facebook/rocksdb v10.10.1 - MD5=dcef50080a4a6c0c0b4b77fd04c60502 + facebook/rocksdb v11.1.1 + MD5=c82fc5e9e0ecd6649a25c8a44f7e18a5 ) FetchContent_GetProperties(jemalloc) From 9c14275df54275059869cb96c2e4d61326a8b177 Mon Sep 17 00:00:00 2001 From: PragmaTwice Date: Sat, 2 May 2026 12:50:52 +0800 Subject: [PATCH 2/2] fix(storage): support RocksDB 11 DB open APIs --- src/common/db_util.h | 79 ++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 58 deletions(-) diff --git a/src/common/db_util.h b/src/common/db_util.h index eea60d011f4..7f609807f0f 100644 --- a/src/common/db_util.h +++ b/src/common/db_util.h @@ -21,6 +21,7 @@ #pragma once #include +#include #include "fmt/ostream.h" #include "rocksdb/db.h" @@ -42,87 +43,49 @@ struct UniqueIterator : std::unique_ptr { : BaseType(ctx.storage->NewIterator(ctx, options)) {} }; -namespace details { - -template -StatusOr> WrapOutPtrToUnique(Args&&... args) { - T* ptr = nullptr; - auto s = (*F)(std::forward(args)..., &ptr); - - if (!s.ok()) { - return {C, s.ToString()}; - } - - return ptr; -} - -[[nodiscard]] inline rocksdb::Status DBOpenForReadOnly( - const rocksdb::DBOptions& db_options, const std::string& dbname, - const std::vector& column_families, - std::vector* handles, rocksdb::DB** dbptr) { - return rocksdb::DB::OpenForReadOnly(db_options, dbname, column_families, handles, dbptr); -} - -[[nodiscard]] inline rocksdb::Status DBOpenForSecondaryInstance( - const rocksdb::DBOptions& db_options, const std::string& dbname, const std::string& secondary_path, - const std::vector& column_families, - std::vector* handles, rocksdb::DB** dbptr) { - return rocksdb::DB::OpenAsSecondary(db_options, dbname, secondary_path, column_families, handles, dbptr); -} - -} // namespace details - inline StatusOr> DBOpen(const rocksdb::Options& options, const std::string& dbname) { - return details::WrapOutPtrToUnique< - rocksdb::DB, - static_cast(rocksdb::DB::Open), - Status::DBOpenErr>(options, dbname); + std::unique_ptr db; + auto s = rocksdb::DB::Open(options, dbname, &db); + if (!s.ok()) return {Status::DBOpenErr, s.ToString()}; + return std::move(db); } inline StatusOr> DBOpen( const rocksdb::DBOptions& db_options, const std::string& dbname, const std::vector& column_families, std::vector* handles) { - return details::WrapOutPtrToUnique< - rocksdb::DB, - static_cast&, - std::vector*, rocksdb::DB**)>(rocksdb::DB::Open), - Status::DBOpenErr>(db_options, dbname, column_families, handles); + std::unique_ptr db; + auto s = rocksdb::DB::Open(db_options, dbname, column_families, handles, &db); + if (!s.ok()) return {Status::DBOpenErr, s.ToString()}; + return std::move(db); } inline StatusOr> DBOpenForReadOnly( const rocksdb::DBOptions& db_options, const std::string& dbname, const std::vector& column_families, std::vector* handles) { - return details::WrapOutPtrToUnique< - rocksdb::DB, - static_cast&, - std::vector*, rocksdb::DB**)>(details::DBOpenForReadOnly), - Status::DBOpenErr>(db_options, dbname, column_families, handles); + std::unique_ptr db; + auto s = rocksdb::DB::OpenForReadOnly(db_options, dbname, column_families, handles, &db); + if (!s.ok()) return {Status::DBOpenErr, s.ToString()}; + return std::move(db); } inline StatusOr> DBOpenAsSecondaryInstance( const rocksdb::DBOptions& db_options, const std::string& dbname, const std::string& secondary_path, const std::vector& column_families, std::vector* handles) { - return details::WrapOutPtrToUnique< - rocksdb::DB, - static_cast&, - std::vector*, rocksdb::DB**)>( - details::DBOpenForSecondaryInstance), - Status::DBOpenErr>(db_options, dbname, secondary_path, column_families, handles); + std::unique_ptr db; + auto s = rocksdb::DB::OpenAsSecondary(db_options, dbname, secondary_path, column_families, handles, &db); + if (!s.ok()) return {Status::DBOpenErr, s.ToString()}; + return std::move(db); } inline StatusOr> BackupEngineOpen(rocksdb::Env* db_env, const rocksdb::BackupEngineOptions& options) { - return details::WrapOutPtrToUnique< - rocksdb::BackupEngine, - static_cast( - rocksdb::BackupEngine::Open), - Status::DBBackupErr>(db_env, options); + rocksdb::BackupEngine* backup_engine = nullptr; + auto s = rocksdb::BackupEngine::Open(options, db_env, &backup_engine); + if (!s.ok()) return {Status::DBBackupErr, s.ToString()}; + return std::unique_ptr(backup_engine); } } // namespace util