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.
8 #include "utilities/transactions/optimistic_transaction_db_impl.h"
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"
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
);
28 return new OptimisticTransactionImpl(this, write_options
, txn_options
);
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
);
43 assert(handles
.size() == 1);
44 // i can delete the handle since DBImpl is always holding a reference to
45 // default column family
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
) {
60 std::vector
<ColumnFamilyDescriptor
> column_families_copy
= column_families
;
62 // Enable MemTable History if not already enabled
63 for (auto& column_family
: column_families_copy
) {
64 ColumnFamilyOptions
* options
= &column_family
.options
;
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;
72 s
= DB::Open(db_options
, dbname
, column_families_copy
, handles
, &db
);
75 *dbptr
= new OptimisticTransactionDBImpl(db
);
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
);
87 txn_impl
->Reinitialize(this, write_options
, txn_options
);
90 } // namespace rocksdb
91 #endif // ROCKSDB_LITE