]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / rocksdb / utilities / transactions / optimistic_transaction_db_impl.cc
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under the BSD-style license found in the
3 // LICENSE file in the root directory of this source tree. An additional grant
4 // of patent rights can be found in the PATENTS file in the same directory.
5
6 #ifndef ROCKSDB_LITE
7
8 #include "utilities/transactions/optimistic_transaction_db_impl.h"
9
10 #include <string>
11 #include <vector>
12
13 #include "db/db_impl.h"
14 #include "rocksdb/db.h"
15 #include "rocksdb/options.h"
16 #include "rocksdb/utilities/optimistic_transaction_db.h"
17 #include "utilities/transactions/optimistic_transaction_impl.h"
18
19 namespace rocksdb {
20
21 Transaction* OptimisticTransactionDBImpl::BeginTransaction(
22 const WriteOptions& write_options,
23 const OptimisticTransactionOptions& txn_options, Transaction* old_txn) {
24 if (old_txn != nullptr) {
25 ReinitializeTransaction(old_txn, write_options, txn_options);
26 return old_txn;
27 } else {
28 return new OptimisticTransactionImpl(this, write_options, txn_options);
29 }
30 }
31
32 Status OptimisticTransactionDB::Open(const Options& options,
33 const std::string& dbname,
34 OptimisticTransactionDB** dbptr) {
35 DBOptions db_options(options);
36 ColumnFamilyOptions cf_options(options);
37 std::vector<ColumnFamilyDescriptor> column_families;
38 column_families.push_back(
39 ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
40 std::vector<ColumnFamilyHandle*> handles;
41 Status s = Open(db_options, dbname, column_families, &handles, dbptr);
42 if (s.ok()) {
43 assert(handles.size() == 1);
44 // i can delete the handle since DBImpl is always holding a reference to
45 // default column family
46 delete handles[0];
47 }
48
49 return s;
50 }
51
52 Status OptimisticTransactionDB::Open(
53 const DBOptions& db_options, const std::string& dbname,
54 const std::vector<ColumnFamilyDescriptor>& column_families,
55 std::vector<ColumnFamilyHandle*>* handles,
56 OptimisticTransactionDB** dbptr) {
57 Status s;
58 DB* db;
59
60 std::vector<ColumnFamilyDescriptor> column_families_copy = column_families;
61
62 // Enable MemTable History if not already enabled
63 for (auto& column_family : column_families_copy) {
64 ColumnFamilyOptions* options = &column_family.options;
65
66 if (options->max_write_buffer_number_to_maintain == 0) {
67 // Setting to -1 will set the History size to max_write_buffer_number.
68 options->max_write_buffer_number_to_maintain = -1;
69 }
70 }
71
72 s = DB::Open(db_options, dbname, column_families_copy, handles, &db);
73
74 if (s.ok()) {
75 *dbptr = new OptimisticTransactionDBImpl(db);
76 }
77
78 return s;
79 }
80
81 void OptimisticTransactionDBImpl::ReinitializeTransaction(
82 Transaction* txn, const WriteOptions& write_options,
83 const OptimisticTransactionOptions& txn_options) {
84 assert(dynamic_cast<OptimisticTransactionImpl*>(txn) != nullptr);
85 auto txn_impl = reinterpret_cast<OptimisticTransactionImpl*>(txn);
86
87 txn_impl->Reinitialize(this, write_options, txn_options);
88 }
89
90 } // namespace rocksdb
91 #endif // ROCKSDB_LITE