Added GetMergeOperands() to stress test (#9804)
Summary: db_stress does not yet cover is GetMergeOperands(), added GetMergeOperands() to db_stress. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9804 Test Plan: ```make -j32 db_stress``` ```python3 tools/db_crashtest.py blackbox --simple --interval=30 --duration=2400 --max_key=100000 --write_buffer_size=524288 --target_file_size_base=524288 --max_bytes_for_level_base=2097152 --value_size_mult=33``` Reviewed By: ajkr Differential Revision: D35387137 Pulled By: cbi42 fbshipit-source-id: 8f851ef68b5af4d824128ad55ebe564f7ad6f7e6
This commit is contained in:
parent
04623e7cd4
commit
a180c5cc3a
@ -45,8 +45,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
||||
if (thread->shared->HasVerificationFailedYet()) {
|
||||
break;
|
||||
}
|
||||
if (thread->rand.OneIn(3)) {
|
||||
// 1/3 chance use iterator to verify this range
|
||||
if (thread->rand.OneIn(4)) {
|
||||
// 1/4 chance use iterator to verify this range
|
||||
Slice prefix;
|
||||
std::string seek_key = Key(start);
|
||||
std::unique_ptr<Iterator> iter(
|
||||
@ -91,8 +91,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
||||
from_db.data(), from_db.length());
|
||||
}
|
||||
}
|
||||
} else if (thread->rand.OneIn(2)) {
|
||||
// 1/3 chance use Get to verify this range
|
||||
} else if (thread->rand.OneIn(3)) {
|
||||
// 1/4 chance use Get to verify this range
|
||||
for (auto i = start; i < end; i++) {
|
||||
if (thread->shared->HasVerificationFailedYet()) {
|
||||
break;
|
||||
@ -108,8 +108,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
||||
from_db.data(), from_db.length());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 1/3 chance use MultiGet to verify this range
|
||||
} else if (thread->rand.OneIn(2)) {
|
||||
// 1/4 chance use MultiGet to verify this range
|
||||
for (auto i = start; i < end;) {
|
||||
if (thread->shared->HasVerificationFailedYet()) {
|
||||
break;
|
||||
@ -140,6 +140,47 @@ class NonBatchedOpsStressTest : public StressTest {
|
||||
|
||||
i += batch_size;
|
||||
}
|
||||
} else {
|
||||
// 1/4 chance use GetMergeOperand to verify this range
|
||||
// Start off with small size that will be increased later if necessary
|
||||
std::vector<PinnableSlice> values(4);
|
||||
GetMergeOperandsOptions merge_operands_info;
|
||||
merge_operands_info.expected_max_number_of_operands =
|
||||
static_cast<int>(values.size());
|
||||
for (auto i = start; i < end; i++) {
|
||||
if (thread->shared->HasVerificationFailedYet()) {
|
||||
break;
|
||||
}
|
||||
std::string from_db;
|
||||
std::string keystr = Key(i);
|
||||
Slice k = keystr;
|
||||
int number_of_operands = 0;
|
||||
Status s = db_->GetMergeOperands(options, column_families_[cf], k,
|
||||
values.data(), &merge_operands_info,
|
||||
&number_of_operands);
|
||||
if (s.IsIncomplete()) {
|
||||
// Need to resize values as there are more than values.size() merge
|
||||
// operands on this key. Should only happen a few times when we
|
||||
// encounter a key that had more merge operands than any key seen so
|
||||
// far
|
||||
values.resize(number_of_operands);
|
||||
merge_operands_info.expected_max_number_of_operands =
|
||||
static_cast<int>(number_of_operands);
|
||||
s = db_->GetMergeOperands(options, column_families_[cf], k,
|
||||
values.data(), &merge_operands_info,
|
||||
&number_of_operands);
|
||||
}
|
||||
// Assumed here that GetMergeOperands always sets number_of_operand
|
||||
if (number_of_operands) {
|
||||
from_db = values[number_of_operands - 1].ToString();
|
||||
}
|
||||
VerifyValue(static_cast<int>(cf), i, options, shared, from_db, s,
|
||||
true);
|
||||
if (from_db.length()) {
|
||||
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
|
||||
from_db.data(), from_db.length());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user