Update MySQLStyleTransactionTest to use SingleDelete (#9062)

Summary:
Pull Request resolved: https://github.com/facebook/rocksdb/pull/9062

Real MySQL-style transactions in MyRocks uses SingleDelete, which is
missing in our existint MySQLStyleTransactionTest. Ths diff by lth fills the
gap in test coverage.

Reviewed By: lth

Differential Revision: D31813015

fbshipit-source-id: 196ad761de30ae9ea1f92257058dfc265f211892
This commit is contained in:
Yanqin Jin 2021-11-07 06:40:13 -08:00 committed by Facebook GitHub Bot
parent 9e788be4b7
commit 8ef5b9ddfe

View File

@ -165,12 +165,19 @@ bool RandomTransactionInserter::DoInsert(DB* db, Transaction* txn,
// Increment key
std::string sum = ToString(int_value + incr);
if (txn != nullptr) {
s = txn->Put(key, sum);
s = txn->SingleDelete(key);
if (!get_for_update && (s.IsBusy() || s.IsTimedOut())) {
// If the initial get was not for update, then the key is not locked
// before put and put could fail due to concurrent writes.
break;
} else if (!s.ok()) {
// Since we did a GetForUpdate, SingleDelete should not fail.
fprintf(stderr, "SingleDelete returned an unexpected error: %s\n",
s.ToString().c_str());
unexpected_error = true;
}
s = txn->Put(key, sum);
if (!s.ok()) {
// Since we did a GetForUpdate, Put should not fail.
fprintf(stderr, "Put returned an unexpected error: %s\n",
s.ToString().c_str());
@ -197,6 +204,10 @@ bool RandomTransactionInserter::DoInsert(DB* db, Transaction* txn,
if (with_prepare) {
// Also try commit without prepare
s = txn->Prepare();
if (!s.ok()) {
fprintf(stderr, "Prepare returned an unexpected error: %s\n",
s.ToString().c_str());
}
assert(s.ok());
ROCKS_LOG_DEBUG(db->GetDBOptions().info_log,
"Prepare of %" PRIu64 " %s (%s)", txn->GetId(),