diff --git a/utilities/transactions/transaction_test.cc b/utilities/transactions/transaction_test.cc index ac91b0c90..ce538a690 100644 --- a/utilities/transactions/transaction_test.cc +++ b/utilities/transactions/transaction_test.cc @@ -176,7 +176,16 @@ TEST_P(TransactionTest, WaitingTxn) { Status s; txn_options.lock_timeout = 1; - db->Put(write_options, Slice("foo"), Slice("bar")); + s = db->Put(write_options, Slice("foo"), Slice("bar")); + ASSERT_OK(s); + + /* create second cf */ + ColumnFamilyHandle* cfa; + ColumnFamilyOptions cf_options; + s = db->CreateColumnFamily(cf_options, "CFA", &cfa); + ASSERT_OK(s); + s = db->Put(write_options, cfa, Slice("foo"), Slice("bar")); + ASSERT_OK(s); Transaction* txn1 = db->BeginTransaction(write_options, txn_options); Transaction* txn2 = db->BeginTransaction(write_options, txn_options); @@ -194,22 +203,35 @@ TEST_P(TransactionTest, WaitingTxn) { ASSERT_EQ(cf_id, 0); }); + // lock key in default cf s = txn1->GetForUpdate(read_options, "foo", &value); ASSERT_OK(s); ASSERT_EQ(value, "bar"); + // lock key in cfa + s = txn1->GetForUpdate(read_options, cfa, "foo", &value); + ASSERT_OK(s); + ASSERT_EQ(value, "bar"); + auto lock_data = db->GetLockStatusData(); - // Locked keys exist in one column family. - ASSERT_EQ(lock_data.size(), 1); + // Locked keys exist in both column family. + ASSERT_EQ(lock_data.size(), 2); + + auto cf_iterator = lock_data.begin(); // Column family is 0 (default). - const auto& cf = *lock_data.cbegin(); - ASSERT_EQ(cf.first, 0); + ASSERT_EQ(cf_iterator->first, 0); + // The locked key is "foo" and is locked by txn1 + ASSERT_EQ(cf_iterator->second.key, "foo"); + ASSERT_EQ(cf_iterator->second.id, txn1->GetID()); + + cf_iterator++; + // Column family is 1 (cfa). + ASSERT_EQ(cf_iterator->first, 1); // The locked key is "foo" and is locked by txn1 - const auto& key = cf.second; - ASSERT_EQ(key.key, "foo"); - ASSERT_EQ(key.id, txn1->GetID()); + ASSERT_EQ(cf_iterator->second.key, "foo"); + ASSERT_EQ(cf_iterator->second.id, txn1->GetID()); rocksdb::SyncPoint::GetInstance()->EnableProcessing(); @@ -220,6 +242,7 @@ TEST_P(TransactionTest, WaitingTxn) { rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->ClearAllCallBacks(); + delete cfa; delete txn1; delete txn2; }