| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #ifndef ROCKSDB_LITE
- #include "utilities/transactions/optimistic_transaction_db_impl.h"
- #include <string>
- #include <vector>
- #include "db/db_impl/db_impl.h"
- #include "rocksdb/db.h"
- #include "rocksdb/options.h"
- #include "rocksdb/utilities/optimistic_transaction_db.h"
- #include "utilities/transactions/optimistic_transaction.h"
- namespace ROCKSDB_NAMESPACE {
- Transaction* OptimisticTransactionDBImpl::BeginTransaction(
- const WriteOptions& write_options,
- const OptimisticTransactionOptions& txn_options, Transaction* old_txn) {
- if (old_txn != nullptr) {
- ReinitializeTransaction(old_txn, write_options, txn_options);
- return old_txn;
- } else {
- return new OptimisticTransaction(this, write_options, txn_options);
- }
- }
- std::unique_lock<std::mutex> OptimisticTransactionDBImpl::LockBucket(
- size_t idx) {
- assert(idx < bucketed_locks_.size());
- return std::unique_lock<std::mutex>(*bucketed_locks_[idx]);
- }
- Status OptimisticTransactionDB::Open(const Options& options,
- const std::string& dbname,
- OptimisticTransactionDB** dbptr) {
- DBOptions db_options(options);
- ColumnFamilyOptions cf_options(options);
- std::vector<ColumnFamilyDescriptor> column_families;
- column_families.push_back(
- ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
- std::vector<ColumnFamilyHandle*> handles;
- Status s = Open(db_options, dbname, column_families, &handles, dbptr);
- if (s.ok()) {
- assert(handles.size() == 1);
- // i can delete the handle since DBImpl is always holding a reference to
- // default column family
- delete handles[0];
- }
- return s;
- }
- Status OptimisticTransactionDB::Open(
- const DBOptions& db_options, const std::string& dbname,
- const std::vector<ColumnFamilyDescriptor>& column_families,
- std::vector<ColumnFamilyHandle*>* handles,
- OptimisticTransactionDB** dbptr) {
- return OptimisticTransactionDB::Open(db_options,
- OptimisticTransactionDBOptions(), dbname,
- column_families, handles, dbptr);
- }
- Status OptimisticTransactionDB::Open(
- const DBOptions& db_options,
- const OptimisticTransactionDBOptions& occ_options,
- const std::string& dbname,
- const std::vector<ColumnFamilyDescriptor>& column_families,
- std::vector<ColumnFamilyHandle*>* handles,
- OptimisticTransactionDB** dbptr) {
- Status s;
- DB* db;
- std::vector<ColumnFamilyDescriptor> column_families_copy = column_families;
- // Enable MemTable History if not already enabled
- for (auto& column_family : column_families_copy) {
- ColumnFamilyOptions* options = &column_family.options;
- if (options->max_write_buffer_size_to_maintain == 0 &&
- options->max_write_buffer_number_to_maintain == 0) {
- // Setting to -1 will set the History size to
- // max_write_buffer_number * write_buffer_size.
- options->max_write_buffer_size_to_maintain = -1;
- }
- }
- s = DB::Open(db_options, dbname, column_families_copy, handles, &db);
- if (s.ok()) {
- *dbptr = new OptimisticTransactionDBImpl(db, occ_options);
- }
- return s;
- }
- void OptimisticTransactionDBImpl::ReinitializeTransaction(
- Transaction* txn, const WriteOptions& write_options,
- const OptimisticTransactionOptions& txn_options) {
- assert(dynamic_cast<OptimisticTransaction*>(txn) != nullptr);
- auto txn_impl = reinterpret_cast<OptimisticTransaction*>(txn);
- txn_impl->Reinitialize(this, write_options, txn_options);
- }
- } // namespace ROCKSDB_NAMESPACE
- #endif // ROCKSDB_LITE
|