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