Skip to content

Commit 17d5200

Browse files
jaykoreanfacebook-github-bot
authored andcommitted
Stress/Crash Test for OptimisticTransactionDB (#11513)
Summary: Context: OptimisticTransactionDB has not been covered by db_stress (including crash test) like TransactionDB. 1. Adding the following gflag options to to test OptimisticTransactionDB - `use_optimistic_txn`: When true, open OptimisticTransactionDB to test - `occ_validation_policy`: `OccValidationPolicy::kValidateParallel = 1` by default. - `share_occ_lock_buckets`: Use shared occ locks - `occ_lock_bucket_count`: 500 by default. Number of buckets to use for shared occ lock. 2. Opening OptimisticTransactionDB and NewTxn/Commit added per `use_optimistic_txn` flag in `db_stress_test_base.cc` 3. OptimisticTransactionDB blackbox/whitebox test added in crash_test.mk Please note that the existing flag `use_txn` is being used here. When `use_txn == true` and `use_optimistic_txn == false`, we use `TransactionDB` (a.k.a. pessimistic transaction db). When both `use_txn` and `use_optimistic_txn` are true, we use `OptimisticTransactionDB`. If `use_txn == false` but `use_optimistic_txn == true` throw error with message _"You cannot set use_optimistic_txn true while use_txn is false. Please set use_txn true if you want to use OptimisticTransactionDB"_. Pull Request resolved: #11513 Test Plan: **Crash Test** Serial Validation ``` export CRASH_TEST_EXT_ARGS="--use_optimistic_txn=1 --use_txn=1 --use_put_entity_one_in=0 --occ_validation_policy=0" make crash_test -j ``` Parallel Validation (no share bucket) ``` export CRASH_TEST_EXT_ARGS="--use_optimistic_txn=1 --use_txn=1 --use_put_entity_one_in=0 --occ_validation_policy=1 --share_occ_lock_buckets=0" make crash_test -j ``` Parallel Validation (share bucket) ``` export CRASH_TEST_EXT_ARGS="--use_optimistic_txn=1 --use_txn=1 --use_put_entity_one_in=0 --occ_validation_policy=1 --share_occ_lock_buckets=1 --occ_lock_bucket_count=500" make crash_test -j ``` **Stress Test** ``` ./db_stress -use_optimistic_txn -threads=32 ``` Reviewed By: pdillinger Differential Revision: D46547387 Pulled By: jaykorean fbshipit-source-id: ca19819ca6e0281694966998014b40d95d4e5960
1 parent 1da9ac2 commit 17d5200

7 files changed

+248
-111
lines changed

crash_test.mk

+14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --
2121
blackbox_crash_test_with_multiops_wp_txn \
2222
crash_test_with_tiered_storage blackbox_crash_test_with_tiered_storage \
2323
whitebox_crash_test_with_tiered_storage \
24+
whitebox_crash_test_with_optimistic_txn \
25+
blackbox_crash_test_with_optimistic_txn \
2426

2527
crash_test: $(DB_STRESS_CMD)
2628
# Do not parallelize
@@ -37,6 +39,11 @@ crash_test_with_txn: $(DB_STRESS_CMD)
3739
$(CRASHTEST_MAKE) whitebox_crash_test_with_txn
3840
$(CRASHTEST_MAKE) blackbox_crash_test_with_txn
3941

42+
crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
43+
# Do not parallelize
44+
$(CRASHTEST_MAKE) whitebox_crash_test_with_optimistic_txn
45+
$(CRASHTEST_MAKE) blackbox_crash_test_with_optimistic_txn
46+
4047
crash_test_with_best_efforts_recovery: blackbox_crash_test_with_best_efforts_recovery
4148

4249
crash_test_with_ts: $(DB_STRESS_CMD)
@@ -80,6 +87,9 @@ blackbox_crash_test_with_multiops_wp_txn: $(DB_STRESS_CMD)
8087
blackbox_crash_test_with_tiered_storage: $(DB_STRESS_CMD)
8188
$(CRASHTEST_PY) --test_tiered_storage blackbox $(CRASH_TEST_EXT_ARGS)
8289

90+
blackbox_crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
91+
$(CRASHTEST_PY) --optimistic_txn blackbox $(CRASH_TEST_EXT_ARGS)
92+
8393
ifeq ($(CRASH_TEST_KILL_ODD),)
8494
CRASH_TEST_KILL_ODD=888887
8595
endif
@@ -105,3 +115,7 @@ whitebox_crash_test_with_ts: $(DB_STRESS_CMD)
105115
whitebox_crash_test_with_tiered_storage: $(DB_STRESS_CMD)
106116
$(CRASHTEST_PY) --test_tiered_storage whitebox --random_kill_odd \
107117
$(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
118+
119+
whitebox_crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
120+
$(CRASHTEST_PY) --optimistic_txn whitebox --random_kill_odd \
121+
$(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)

db_stress_tool/db_stress_common.h

+16-3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include "rocksdb/utilities/checkpoint.h"
5555
#include "rocksdb/utilities/db_ttl.h"
5656
#include "rocksdb/utilities/debug.h"
57+
#include "rocksdb/utilities/optimistic_transaction_db.h"
5758
#include "rocksdb/utilities/options_util.h"
5859
#include "rocksdb/utilities/transaction.h"
5960
#include "rocksdb/utilities/transaction_db.h"
@@ -194,9 +195,6 @@ DECLARE_bool(rate_limit_user_ops);
194195
DECLARE_bool(rate_limit_auto_wal_flush);
195196
DECLARE_uint64(sst_file_manager_bytes_per_sec);
196197
DECLARE_uint64(sst_file_manager_bytes_per_truncate);
197-
DECLARE_bool(use_txn);
198-
DECLARE_uint64(txn_write_policy);
199-
DECLARE_bool(unordered_write);
200198
DECLARE_int32(backup_one_in);
201199
DECLARE_uint64(backup_max_size);
202200
DECLARE_int32(checkpoint_one_in);
@@ -255,6 +253,21 @@ DECLARE_int32(continuous_verification_interval);
255253
DECLARE_int32(get_property_one_in);
256254
DECLARE_string(file_checksum_impl);
257255

256+
// Options for transaction dbs.
257+
// Use TransactionDB (a.k.a. Pessimistic Transaction DB)
258+
// OR OptimisticTransactionDB
259+
DECLARE_bool(use_txn);
260+
261+
// Options for TransactionDB (a.k.a. Pessimistic Transaction DB)
262+
DECLARE_uint64(txn_write_policy);
263+
DECLARE_bool(unordered_write);
264+
265+
// Options for OptimisticTransactionDB
266+
DECLARE_bool(use_optimistic_txn);
267+
DECLARE_uint64(occ_validation_policy);
268+
DECLARE_bool(share_occ_lock_buckets);
269+
DECLARE_uint32(occ_lock_bucket_count);
270+
258271
// Options for StackableDB-based BlobDB
259272
DECLARE_bool(use_blob_db);
260273
DECLARE_uint64(blob_db_min_blob_size);

db_stress_tool/db_stress_gflags.cc

+14-3
Original file line numberDiff line numberDiff line change
@@ -669,13 +669,24 @@ DEFINE_uint64(sst_file_manager_bytes_per_truncate, 0,
669669
"many bytes. By default whole files will be deleted.");
670670

671671
DEFINE_bool(use_txn, false,
672-
"Use TransactionDB. Currently the default write policy is "
673-
"TxnDBWritePolicy::WRITE_PREPARED");
672+
"Use TransactionDB or OptimisticTransactionDB. When "
673+
"use_optimistic_txn == false (by default), "
674+
"it's (Pessimistic) TransactionDB");
674675

675676
DEFINE_uint64(txn_write_policy, 0,
676677
"The transaction write policy. Default is "
677678
"TxnDBWritePolicy::WRITE_COMMITTED. Note that this should not be "
678-
"changed accross crashes.");
679+
"changed across crashes.");
680+
681+
DEFINE_bool(use_optimistic_txn, false, "Use OptimisticTransactionDB.");
682+
DEFINE_uint64(occ_validation_policy, 1,
683+
"Optimistic Concurrency Control Validation Policy for "
684+
"OptimisticTransactionDB");
685+
DEFINE_bool(share_occ_lock_buckets, false,
686+
"Share a pool of locks across DB instances for buckets");
687+
DEFINE_uint32(
688+
occ_lock_bucket_count, 500,
689+
"Bucket Count for shared Optimistic Concurrency Control (OCC) locks");
679690

680691
DEFINE_bool(unordered_write, false,
681692
"Turn on the unordered_write feature. This options is currently "

0 commit comments

Comments
 (0)