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);
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();
rocksdb::SyncPoint::GetInstance()->DisableProcessing();
rocksdb::SyncPoint::GetInstance()->ClearAllCallBacks();
+ delete cfa;
delete txn1;
delete txn2;
}