WritePrepared Txn: split SeqAdvanceConcurrentTest
Summary: The tsan flavor of SeqAdvanceConcurrentTest times out in our test infra. The patch splits it into 10 tests. On my vm before: [ OK ] WritePreparedTransactionTest/WritePreparedTransactionTest.SeqAdvanceConcurrentTest/0 (5194 ms) after: [ OK ] OneWriteQueue/SeqAdvanceConcurrentTest.SeqAdvanceConcurrentTest/0 (1906 ms) Closes https://github.com/facebook/rocksdb/pull/3799 Differential Revision: D7854515 Pulled By: maysamyabandeh fbshipit-source-id: 4fbac42a1f974326cbc237f8cb9d6232d379c431
This commit is contained in:
parent
6cab3184f5
commit
5bed8a0065
@ -540,6 +540,25 @@ class SnapshotConcurrentAccessTest
|
|||||||
size_t split_cnt_;
|
size_t split_cnt_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SeqAdvanceConcurrentTest
|
||||||
|
: public WritePreparedTransactionTestBase,
|
||||||
|
virtual public ::testing::WithParamInterface<
|
||||||
|
std::tuple<bool, bool, TxnDBWritePolicy, size_t, size_t>> {
|
||||||
|
public:
|
||||||
|
SeqAdvanceConcurrentTest()
|
||||||
|
: WritePreparedTransactionTestBase(std::get<0>(GetParam()),
|
||||||
|
std::get<1>(GetParam()),
|
||||||
|
std::get<2>(GetParam())),
|
||||||
|
split_id_(std::get<3>(GetParam())),
|
||||||
|
split_cnt_(std::get<4>(GetParam())){};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// A test is split into split_cnt_ tests, each identified with split_id_ where
|
||||||
|
// 0 <= split_id_ < split_cnt_
|
||||||
|
size_t split_id_;
|
||||||
|
size_t split_cnt_;
|
||||||
|
};
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(
|
INSTANTIATE_TEST_CASE_P(
|
||||||
WritePreparedTransactionTest, WritePreparedTransactionTest,
|
WritePreparedTransactionTest, WritePreparedTransactionTest,
|
||||||
::testing::Values(std::make_tuple(false, false, WRITE_PREPARED),
|
::testing::Values(std::make_tuple(false, false, WRITE_PREPARED),
|
||||||
@ -591,6 +610,32 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
std::make_tuple(false, false, WRITE_PREPARED, 18, 20),
|
std::make_tuple(false, false, WRITE_PREPARED, 18, 20),
|
||||||
std::make_tuple(false, false, WRITE_PREPARED, 19, 20)));
|
std::make_tuple(false, false, WRITE_PREPARED, 19, 20)));
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(
|
||||||
|
TwoWriteQueues, SeqAdvanceConcurrentTest,
|
||||||
|
::testing::Values(std::make_tuple(false, true, WRITE_PREPARED, 0, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 1, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 2, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 3, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 4, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 5, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 6, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 7, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 8, 10),
|
||||||
|
std::make_tuple(false, true, WRITE_PREPARED, 9, 10)));
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(
|
||||||
|
OneWriteQueue, SeqAdvanceConcurrentTest,
|
||||||
|
::testing::Values(std::make_tuple(false, false, WRITE_PREPARED, 0, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 1, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 2, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 3, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 4, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 5, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 6, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 7, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 8, 10),
|
||||||
|
std::make_tuple(false, false, WRITE_PREPARED, 9, 10)));
|
||||||
|
|
||||||
TEST_P(WritePreparedTransactionTest, CommitMapTest) {
|
TEST_P(WritePreparedTransactionTest, CommitMapTest) {
|
||||||
WritePreparedTxnDB* wp_db = dynamic_cast<WritePreparedTxnDB*>(db);
|
WritePreparedTxnDB* wp_db = dynamic_cast<WritePreparedTxnDB*>(db);
|
||||||
assert(wp_db);
|
assert(wp_db);
|
||||||
@ -972,7 +1017,7 @@ TEST_P(WritePreparedTransactionTest, AdvanceMaxEvictedSeqWithDuplicatesTest) {
|
|||||||
delete txn0;
|
delete txn0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(WritePreparedTransactionTest, SeqAdvanceConcurrentTest) {
|
TEST_P(SeqAdvanceConcurrentTest, SeqAdvanceConcurrentTest) {
|
||||||
// Given the sequential run of txns, with this timeout we should never see a
|
// Given the sequential run of txns, with this timeout we should never see a
|
||||||
// deadlock nor a timeout unless we have a key conflict, which should be
|
// deadlock nor a timeout unless we have a key conflict, which should be
|
||||||
// almost infeasible.
|
// almost infeasible.
|
||||||
@ -999,6 +1044,7 @@ TEST_P(WritePreparedTransactionTest, SeqAdvanceConcurrentTest) {
|
|||||||
const size_t max_n = static_cast<size_t>(std::pow(type_cnt, txn_cnt));
|
const size_t max_n = static_cast<size_t>(std::pow(type_cnt, txn_cnt));
|
||||||
printf("Number of cases being tested is %" ROCKSDB_PRIszt "\n", max_n);
|
printf("Number of cases being tested is %" ROCKSDB_PRIszt "\n", max_n);
|
||||||
for (size_t n = 0; n < max_n; n++, ReOpen()) {
|
for (size_t n = 0; n < max_n; n++, ReOpen()) {
|
||||||
|
if (n % split_cnt_ != split_id_) continue;
|
||||||
if (n % 1000 == 0) {
|
if (n % 1000 == 0) {
|
||||||
printf("Tested %" ROCKSDB_PRIszt " cases so far\n", n);
|
printf("Tested %" ROCKSDB_PRIszt " cases so far\n", n);
|
||||||
}
|
}
|
||||||
@ -1037,9 +1083,8 @@ TEST_P(WritePreparedTransactionTest, SeqAdvanceConcurrentTest) {
|
|||||||
|
|
||||||
rocksdb::SyncPoint::GetInstance()->EnableProcessing();
|
rocksdb::SyncPoint::GetInstance()->EnableProcessing();
|
||||||
for (size_t bi = 0; bi < txn_cnt; bi++) {
|
for (size_t bi = 0; bi < txn_cnt; bi++) {
|
||||||
size_t d =
|
// get the bi-th digit in number system based on type_cnt
|
||||||
(n % base[bi + 1]) /
|
size_t d = (n % base[bi + 1]) / base[bi];
|
||||||
base[bi]; // get the bi-th digit in number system based on type_cnt
|
|
||||||
switch (d) {
|
switch (d) {
|
||||||
case 0:
|
case 0:
|
||||||
threads.emplace_back(txn_t0, bi);
|
threads.emplace_back(txn_t0, bi);
|
||||||
@ -1062,8 +1107,8 @@ TEST_P(WritePreparedTransactionTest, SeqAdvanceConcurrentTest) {
|
|||||||
// wait to be linked
|
// wait to be linked
|
||||||
while (linked.load() <= bi) {
|
while (linked.load() <= bi) {
|
||||||
}
|
}
|
||||||
if (bi + 1 ==
|
// after a queue of size first_group_size
|
||||||
first_group_size) { // after a queue of size first_group_size
|
if (bi + 1 == first_group_size) {
|
||||||
while (!batch_formed) {
|
while (!batch_formed) {
|
||||||
}
|
}
|
||||||
// to make it more deterministic, wait until the commits are linked
|
// to make it more deterministic, wait until the commits are linked
|
||||||
|
Loading…
x
Reference in New Issue
Block a user