Enable unordered_write in stress tests (#6164)
Summary: With WritePrepared transactions configured with two_write_queues, unordered_write will offer the same guarantees as vanilla rocksdb and thus can be enabled in stress tests. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6164 Test Plan: ``` make -j32 crash_test_with_txn Differential Revision: D18991899 Pulled By: maysamyabandeh fbshipit-source-id: eece5e96b4169b67d7931e5c0afca88540a113e1
This commit is contained in:
parent
583c6953d8
commit
fec7302a9d
@ -162,6 +162,7 @@ DECLARE_uint64(rate_limiter_bytes_per_sec);
|
|||||||
DECLARE_bool(rate_limit_bg_reads);
|
DECLARE_bool(rate_limit_bg_reads);
|
||||||
DECLARE_bool(use_txn);
|
DECLARE_bool(use_txn);
|
||||||
DECLARE_uint64(txn_write_policy);
|
DECLARE_uint64(txn_write_policy);
|
||||||
|
DECLARE_bool(unordered_write);
|
||||||
DECLARE_int32(backup_one_in);
|
DECLARE_int32(backup_one_in);
|
||||||
DECLARE_int32(checkpoint_one_in);
|
DECLARE_int32(checkpoint_one_in);
|
||||||
DECLARE_int32(ingest_external_file_one_in);
|
DECLARE_int32(ingest_external_file_one_in);
|
||||||
|
@ -376,6 +376,11 @@ DEFINE_uint64(txn_write_policy, 0,
|
|||||||
"TxnDBWritePolicy::WRITE_COMMITTED. Note that this should not be "
|
"TxnDBWritePolicy::WRITE_COMMITTED. Note that this should not be "
|
||||||
"changed accross crashes.");
|
"changed accross crashes.");
|
||||||
|
|
||||||
|
DEFINE_bool(unordered_write, false,
|
||||||
|
"Turn on the unordered_write feature. This options is currently "
|
||||||
|
"tested only in combination with use_txn=true and "
|
||||||
|
"txn_write_policy=TxnDBWritePolicy::WRITE_PREPARED.");
|
||||||
|
|
||||||
DEFINE_int32(backup_one_in, 0,
|
DEFINE_int32(backup_one_in, 0,
|
||||||
"If non-zero, then CreateNewBackup() will be called once for "
|
"If non-zero, then CreateNewBackup() will be called once for "
|
||||||
"every N operations on average. 0 indicates CreateNewBackup() "
|
"every N operations on average. 0 indicates CreateNewBackup() "
|
||||||
|
@ -1674,6 +1674,12 @@ void StressTest::Open() {
|
|||||||
assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
|
assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
|
||||||
txn_db_options.write_policy =
|
txn_db_options.write_policy =
|
||||||
static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
|
static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
|
||||||
|
if (FLAGS_unordered_write) {
|
||||||
|
assert(txn_db_options.write_policy == TxnDBWritePolicy::WRITE_PREPARED);
|
||||||
|
options_.unordered_write = true;
|
||||||
|
options_.two_write_queues = true;
|
||||||
|
txn_db_options.skip_concurrency_control = true;
|
||||||
|
}
|
||||||
s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
|
s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
|
||||||
cf_descriptors, &column_families_, &txn_db_);
|
cf_descriptors, &column_families_, &txn_db_);
|
||||||
db_ = txn_db_;
|
db_ = txn_db_;
|
||||||
@ -1773,6 +1779,10 @@ void StressTest::Reopen(ThreadState* thread) {
|
|||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
if (thread->rand.OneIn(2)) {
|
if (thread->rand.OneIn(2)) {
|
||||||
Status s = db_->Close();
|
Status s = db_->Close();
|
||||||
|
if (!s.ok()) {
|
||||||
|
fprintf(stderr, "Non-ok close status: %s\n", s.ToString().c_str());
|
||||||
|
fflush(stderr);
|
||||||
|
}
|
||||||
assert(s.ok());
|
assert(s.ok());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -161,6 +161,7 @@ txn_params = {
|
|||||||
"use_txn" : 1,
|
"use_txn" : 1,
|
||||||
# Avoid lambda to set it once for the entire test
|
# Avoid lambda to set it once for the entire test
|
||||||
"txn_write_policy": random.randint(0, 2),
|
"txn_write_policy": random.randint(0, 2),
|
||||||
|
"unordered_write": random.randint(0, 1),
|
||||||
"disable_wal": 0,
|
"disable_wal": 0,
|
||||||
# OpenReadOnly after checkpoint is not currnetly compatible with WritePrepared txns
|
# OpenReadOnly after checkpoint is not currnetly compatible with WritePrepared txns
|
||||||
"checkpoint_one_in": 0,
|
"checkpoint_one_in": 0,
|
||||||
@ -185,6 +186,10 @@ def finalize_and_sanitize(src_params):
|
|||||||
dest_params.get("use_txn") == 1:
|
dest_params.get("use_txn") == 1:
|
||||||
dest_params["delpercent"] += dest_params["delrangepercent"]
|
dest_params["delpercent"] += dest_params["delrangepercent"]
|
||||||
dest_params["delrangepercent"] = 0
|
dest_params["delrangepercent"] = 0
|
||||||
|
# Only under WritePrepared txns, unordered_write would provide the same guarnatees as vanilla rocksdb
|
||||||
|
if dest_params.get("unordered_write", 0) == 1:
|
||||||
|
dest_params["txn_write_policy"] = 1
|
||||||
|
dest_params["allow_concurrent_memtable_write"] = 1
|
||||||
if dest_params.get("disable_wal", 0) == 1:
|
if dest_params.get("disable_wal", 0) == 1:
|
||||||
dest_params["atomic_flush"] = 1
|
dest_params["atomic_flush"] = 1
|
||||||
if dest_params.get("open_files", 1) != -1:
|
if dest_params.get("open_files", 1) != -1:
|
||||||
|
Loading…
Reference in New Issue
Block a user