diff --git a/include/rocksdb/utilities/transaction.h b/include/rocksdb/utilities/transaction.h index 4127e9b2b98e3835aca4204e139f2929a45b9965..0525707582a827adb0290ccc44a589e677b3b8a4 100644 --- a/include/rocksdb/utilities/transaction.h +++ b/include/rocksdb/utilities/transaction.h @@ -258,6 +258,11 @@ class Transaction { // write to this transaction. virtual WriteBatchWithIndex* GetWriteBatch() = 0; + // Change the value of TransactionOptions.lock_timeout (in milliseconds) for + // this transaction. + // Has no effect on OptimisticTransactions. + virtual void SetLockTimeout(int64_t timeout) = 0; + protected: explicit Transaction(const TransactionDB* db) {} Transaction() {} diff --git a/utilities/transactions/transaction_base.h b/utilities/transactions/transaction_base.h index 9cd324e576031866059e060146f1c7487c1728f1..f48603d650d55052a7e083068aa935ce3b2dba95 100644 --- a/utilities/transactions/transaction_base.h +++ b/utilities/transactions/transaction_base.h @@ -146,6 +146,9 @@ class TransactionBaseImpl : public Transaction { WriteBatchWithIndex* GetWriteBatch() override; + virtual void SetLockTimeout(int64_t timeout) override { /* Do nothing */ + } + const Snapshot* GetSnapshot() const override { return snapshot_ ? snapshot_->snapshot() : nullptr; } diff --git a/utilities/transactions/transaction_impl.h b/utilities/transactions/transaction_impl.h index 2d11ac0c0a60118e70e7dfb6e46530920eb5014a..6b0901dcdbb633c556f4d6b18ed13c31addc7bfa 100644 --- a/utilities/transactions/transaction_impl.h +++ b/utilities/transactions/transaction_impl.h @@ -60,7 +60,7 @@ class TransactionImpl : public TransactionBaseImpl { // Returns the number of milliseconds a transaction can wait on acquiring a // lock or -1 if there is no timeout. int64_t GetLockTimeout() const { return lock_timeout_; } - void SetLockTimeout(int64_t timeout) { lock_timeout_ = timeout; } + void SetLockTimeout(int64_t timeout) override { lock_timeout_ = timeout; } protected: Status TryLock(ColumnFamilyHandle* column_family, const Slice& key, diff --git a/utilities/transactions/transaction_test.cc b/utilities/transactions/transaction_test.cc index e9d6a196f4af777ae72959dc9f55219fa258a4da..bb7caa95a9ec6eca2c97285321ae8ee8144f208c 100644 --- a/utilities/transactions/transaction_test.cc +++ b/utilities/transactions/transaction_test.cc @@ -1530,7 +1530,9 @@ TEST_F(TransactionTest, TimeoutTest) { delete txn1; txn_options.expiration = 6000000; // 100 minutes + txn_options.lock_timeout = 1; // 1ms txn1 = db->BeginTransaction(write_options, txn_options); + txn1->SetLockTimeout(100); TransactionOptions txn_options2; txn_options2.expiration = 10; // 10ms