Skip to content

Commit 4b4ce23

Browse files
chore(deps): bump rocksdb to v11.1.1 (#3468)
Bump rocksdb to v11.1.1 (see: https://github.com/facebook/rocksdb/releases/tag/v11.1.1) **This PR need to merge** #3431 **Key changes** - Fix a bug in round-robin compaction that missed selecting input files that are needed to guarantee data correctness and cause crashing in debug builds or silent data corruption in release builds for Get() - Fix a memory accounting leak in IODispatcher - Add a new option open_files_async - Added BlockBasedTableOptions::kAuto index block search type that automatically selects between binary and interpolation search on a per-index-block basis - Add memtable_batch_lookup_optimization option to use batch lookup optimization for memtable MultiGet - Added new mutable DB option verify_manifest_content_on_close (default: false) - --------- Co-authored-by: PragmaTwice <twice@apache.org> Co-authored-by: Twice <twice.mliu@gmail.com>
1 parent 7a34b98 commit 4b4ce23

2 files changed

Lines changed: 23 additions & 60 deletions

File tree

cmake/rocksdb.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ endif()
2626
include(cmake/utils.cmake)
2727

2828
FetchContent_DeclareGitHubWithMirror(rocksdb
29-
facebook/rocksdb v10.10.1
30-
MD5=dcef50080a4a6c0c0b4b77fd04c60502
29+
facebook/rocksdb v11.1.1
30+
MD5=c82fc5e9e0ecd6649a25c8a44f7e18a5
3131
)
3232

3333
FetchContent_GetProperties(jemalloc)

src/common/db_util.h

Lines changed: 21 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#pragma once
2222

2323
#include <memory>
24+
#include <utility>
2425

2526
#include "fmt/ostream.h"
2627
#include "rocksdb/db.h"
@@ -42,87 +43,49 @@ struct UniqueIterator : std::unique_ptr<rocksdb::Iterator> {
4243
: BaseType(ctx.storage->NewIterator(ctx, options)) {}
4344
};
4445

45-
namespace details {
46-
47-
template <typename T, auto* F, Status::Code C = Status::NotOK, typename... Args>
48-
StatusOr<std::unique_ptr<T>> WrapOutPtrToUnique(Args&&... args) {
49-
T* ptr = nullptr;
50-
auto s = (*F)(std::forward<Args>(args)..., &ptr);
51-
52-
if (!s.ok()) {
53-
return {C, s.ToString()};
54-
}
55-
56-
return ptr;
57-
}
58-
59-
[[nodiscard]] inline rocksdb::Status DBOpenForReadOnly(
60-
const rocksdb::DBOptions& db_options, const std::string& dbname,
61-
const std::vector<rocksdb::ColumnFamilyDescriptor>& column_families,
62-
std::vector<rocksdb::ColumnFamilyHandle*>* handles, rocksdb::DB** dbptr) {
63-
return rocksdb::DB::OpenForReadOnly(db_options, dbname, column_families, handles, dbptr);
64-
}
65-
66-
[[nodiscard]] inline rocksdb::Status DBOpenForSecondaryInstance(
67-
const rocksdb::DBOptions& db_options, const std::string& dbname, const std::string& secondary_path,
68-
const std::vector<rocksdb::ColumnFamilyDescriptor>& column_families,
69-
std::vector<rocksdb::ColumnFamilyHandle*>* handles, rocksdb::DB** dbptr) {
70-
return rocksdb::DB::OpenAsSecondary(db_options, dbname, secondary_path, column_families, handles, dbptr);
71-
}
72-
73-
} // namespace details
74-
7546
inline StatusOr<std::unique_ptr<rocksdb::DB>> DBOpen(const rocksdb::Options& options, const std::string& dbname) {
76-
return details::WrapOutPtrToUnique<
77-
rocksdb::DB,
78-
static_cast<rocksdb::Status (*)(const rocksdb::Options&, const std::string&, rocksdb::DB**)>(rocksdb::DB::Open),
79-
Status::DBOpenErr>(options, dbname);
47+
std::unique_ptr<rocksdb::DB> db;
48+
auto s = rocksdb::DB::Open(options, dbname, &db);
49+
if (!s.ok()) return {Status::DBOpenErr, s.ToString()};
50+
return std::move(db);
8051
}
8152

8253
inline StatusOr<std::unique_ptr<rocksdb::DB>> DBOpen(
8354
const rocksdb::DBOptions& db_options, const std::string& dbname,
8455
const std::vector<rocksdb::ColumnFamilyDescriptor>& column_families,
8556
std::vector<rocksdb::ColumnFamilyHandle*>* handles) {
86-
return details::WrapOutPtrToUnique<
87-
rocksdb::DB,
88-
static_cast<rocksdb::Status (*)(const rocksdb::DBOptions&, const std::string&,
89-
const std::vector<rocksdb::ColumnFamilyDescriptor>&,
90-
std::vector<rocksdb::ColumnFamilyHandle*>*, rocksdb::DB**)>(rocksdb::DB::Open),
91-
Status::DBOpenErr>(db_options, dbname, column_families, handles);
57+
std::unique_ptr<rocksdb::DB> db;
58+
auto s = rocksdb::DB::Open(db_options, dbname, column_families, handles, &db);
59+
if (!s.ok()) return {Status::DBOpenErr, s.ToString()};
60+
return std::move(db);
9261
}
9362

9463
inline StatusOr<std::unique_ptr<rocksdb::DB>> DBOpenForReadOnly(
9564
const rocksdb::DBOptions& db_options, const std::string& dbname,
9665
const std::vector<rocksdb::ColumnFamilyDescriptor>& column_families,
9766
std::vector<rocksdb::ColumnFamilyHandle*>* handles) {
98-
return details::WrapOutPtrToUnique<
99-
rocksdb::DB,
100-
static_cast<rocksdb::Status (*)(
101-
const rocksdb::DBOptions&, const std::string&, const std::vector<rocksdb::ColumnFamilyDescriptor>&,
102-
std::vector<rocksdb::ColumnFamilyHandle*>*, rocksdb::DB**)>(details::DBOpenForReadOnly),
103-
Status::DBOpenErr>(db_options, dbname, column_families, handles);
67+
std::unique_ptr<rocksdb::DB> db;
68+
auto s = rocksdb::DB::OpenForReadOnly(db_options, dbname, column_families, handles, &db);
69+
if (!s.ok()) return {Status::DBOpenErr, s.ToString()};
70+
return std::move(db);
10471
}
10572

10673
inline StatusOr<std::unique_ptr<rocksdb::DB>> DBOpenAsSecondaryInstance(
10774
const rocksdb::DBOptions& db_options, const std::string& dbname, const std::string& secondary_path,
10875
const std::vector<rocksdb::ColumnFamilyDescriptor>& column_families,
10976
std::vector<rocksdb::ColumnFamilyHandle*>* handles) {
110-
return details::WrapOutPtrToUnique<
111-
rocksdb::DB,
112-
static_cast<rocksdb::Status (*)(const rocksdb::DBOptions&, const std::string&, const std::string&,
113-
const std::vector<rocksdb::ColumnFamilyDescriptor>&,
114-
std::vector<rocksdb::ColumnFamilyHandle*>*, rocksdb::DB**)>(
115-
details::DBOpenForSecondaryInstance),
116-
Status::DBOpenErr>(db_options, dbname, secondary_path, column_families, handles);
77+
std::unique_ptr<rocksdb::DB> db;
78+
auto s = rocksdb::DB::OpenAsSecondary(db_options, dbname, secondary_path, column_families, handles, &db);
79+
if (!s.ok()) return {Status::DBOpenErr, s.ToString()};
80+
return std::move(db);
11781
}
11882

11983
inline StatusOr<std::unique_ptr<rocksdb::BackupEngine>> BackupEngineOpen(rocksdb::Env* db_env,
12084
const rocksdb::BackupEngineOptions& options) {
121-
return details::WrapOutPtrToUnique<
122-
rocksdb::BackupEngine,
123-
static_cast<rocksdb::IOStatus (*)(rocksdb::Env*, const rocksdb::BackupEngineOptions&, rocksdb::BackupEngine**)>(
124-
rocksdb::BackupEngine::Open),
125-
Status::DBBackupErr>(db_env, options);
85+
rocksdb::BackupEngine* backup_engine = nullptr;
86+
auto s = rocksdb::BackupEngine::Open(options, db_env, &backup_engine);
87+
if (!s.ok()) return {Status::DBBackupErr, s.ToString()};
88+
return std::unique_ptr<rocksdb::BackupEngine>(backup_engine);
12689
}
12790

12891
} // namespace util

0 commit comments

Comments
 (0)