Skip to content

Commit 25945d7

Browse files
committed
utilities: Add support for registering use cases
1 parent 7fdd7b9 commit 25945d7

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,7 @@ set(SOURCES
10031003
utilities/transactions/write_unprepared_txn.cc
10041004
utilities/transactions/write_unprepared_txn_db.cc
10051005
utilities/ttl/db_ttl_impl.cc
1006+
utilities/use_cases.cc
10061007
utilities/wal_filter.cc
10071008
utilities/write_batch_with_index/write_batch_with_index.cc
10081009
utilities/write_batch_with_index/write_batch_with_index_internal.cc)

utilities/use_cases.cc

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#include <memory>
2+
3+
#include "rocksdb/db_crashtest_use_case.h"
4+
#include "rocksdb/options.h"
5+
#include "rocksdb/use_case.h"
6+
#include "rocksdb/utilities/customizable_util.h"
7+
#include "rocksdb/utilities/options_type.h"
8+
9+
namespace ROCKSDB_NAMESPACE {
10+
static int RegisterBuiltinDBCrashtestUseCases(ObjectLibrary& library,
11+
const std::string& arg) {
12+
library.AddFactory<DBCrashtestUseCase>(
13+
SimpleDefaultParams::kClassName(),
14+
[](const std::string& /*uri*/,
15+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
16+
std::string* /*errmsg*/) {
17+
return new SimpleDefaultParams();
18+
});
19+
library.AddFactory<DBCrashtestUseCase>(
20+
TxnParams::kClassName(),
21+
[](const std::string& /*uri*/,
22+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
23+
std::string* /*errmsg*/) {
24+
return new TxnParams();
25+
});
26+
library.AddFactory<DBCrashtestUseCase>(
27+
BestEffortsRecoveryParams::kClassName(),
28+
[](const std::string& /*uri*/,
29+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
30+
std::string* /*errmsg*/) {
31+
return new BestEffortsRecoveryParams();
32+
});
33+
library.AddFactory<DBCrashtestUseCase>(
34+
BlobParams::kClassName(),
35+
[](const std::string& /*uri*/,
36+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
37+
std::string* /*errmsg*/) {
38+
return new BlobParams();
39+
});
40+
library.AddFactory<DBCrashtestUseCase>(
41+
TieredParams::kClassName(),
42+
[](const std::string& /*uri*/,
43+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
44+
std::string* /*errmsg*/) {
45+
return new TieredParams();
46+
});
47+
library.AddFactory<DBCrashtestUseCase>(
48+
MultiopsTxnDefaultParams::kClassName(),
49+
[](const std::string& /*uri*/,
50+
std::unique_ptr<DBCrashtestUseCase>* /*guard*/,
51+
std::string* /*errmsg*/) {
52+
return new MultiopsTxnDefaultParams();
53+
});
54+
return 1;
55+
}
56+
57+
static int RegisterBuiltinUseCases(ObjectLibrary& library,
58+
const std::string& arg) {
59+
library.AddFactory<UseCase>(
60+
DBCrashtestUseCase::kClassName(),
61+
[](const std::string& /*uri*/,
62+
std::unique_ptr<UseCase>* /*guard*/,
63+
std::string* /*errmsg*/) {
64+
return new DBCrashtestUseCase();
65+
});
66+
RegisterBuiltinDBCrashtestUseCases(library, arg);
67+
return 1;
68+
}
69+
70+
Status UseCase::CreateFromString(const ConfigOptions& cfg_opts,
71+
const std::string& value,
72+
const UseCase** result) {
73+
static std::once_flag once;
74+
std::call_once(once, [&]() {
75+
RegisterBuiltinUseCases(*(ObjectLibrary::Default().get()), "");
76+
});
77+
UseCase* use_case = const_cast<UseCase*>(*result);
78+
Status status =
79+
LoadStaticObject<UseCase>(cfg_opts, value, &use_case);
80+
if (status.ok()) {
81+
*result = const_cast<UseCase*>(use_case);
82+
}
83+
return status;
84+
}
85+
} // namespace ROCKSDB_NAMESPACE

0 commit comments

Comments
 (0)