mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-16 10:52:20 +08:00
Merge pull request #7753 from sfc-gh-jslocum/cf_op_chaos
Add Chaos to Change Feed Operations test
This commit is contained in:
commit
b1ff8b8340
@ -248,7 +248,7 @@ ACTOR Future<Void> liveReader(Database cx, Reference<FeedTestData> data, Version
|
|||||||
buffered.pop_front();
|
buffered.pop_front();
|
||||||
}
|
}
|
||||||
if (buffered.empty()) {
|
if (buffered.empty()) {
|
||||||
if (data->poppingVersion < data->pendingCheck.front().first) {
|
if (data->poppingVersion < data->pendingCheck.front().first && !data->destroying) {
|
||||||
fmt::print("DBG) {0} Buffered empty after ready for check, and data not popped! popped "
|
fmt::print("DBG) {0} Buffered empty after ready for check, and data not popped! popped "
|
||||||
"{1}, popping {2}, check {3}\n",
|
"{1}, popping {2}, check {3}\n",
|
||||||
data->key.printable(),
|
data->key.printable(),
|
||||||
@ -256,7 +256,7 @@ ACTOR Future<Void> liveReader(Database cx, Reference<FeedTestData> data, Version
|
|||||||
data->poppingVersion,
|
data->poppingVersion,
|
||||||
data->pendingCheck.front().first);
|
data->pendingCheck.front().first);
|
||||||
}
|
}
|
||||||
ASSERT(data->poppingVersion >= data->pendingCheck.front().first);
|
ASSERT(data->poppingVersion >= data->pendingCheck.front().first || data->destroying);
|
||||||
data->pendingCheck.pop_front();
|
data->pendingCheck.pop_front();
|
||||||
} else {
|
} else {
|
||||||
Version v = buffered.front().version;
|
Version v = buffered.front().version;
|
||||||
@ -694,6 +694,14 @@ struct ChangeFeedOperationsWorkload : TestWorkload {
|
|||||||
state Transaction tr(cx);
|
state Transaction tr(cx);
|
||||||
state Optional<Value> updateValue;
|
state Optional<Value> updateValue;
|
||||||
|
|
||||||
|
// FIXME: right now there is technically a bug in the change feed contract (mutations can appear in the stream
|
||||||
|
// at a higher version than the stop version) But because stopping a feed is sort of just an optimization, and
|
||||||
|
// no current user of change feeds currently relies on the stop version for correctness, it's fine to not test
|
||||||
|
// this for now
|
||||||
|
if (feedData->stopVersion.present()) {
|
||||||
|
return Void();
|
||||||
|
}
|
||||||
|
|
||||||
// if value is already not set, don't do a clear, otherwise pick either
|
// if value is already not set, don't do a clear, otherwise pick either
|
||||||
if (feedData->lastCleared || deterministicRandom()->random01() > self->clearFrequency) {
|
if (feedData->lastCleared || deterministicRandom()->random01() > self->clearFrequency) {
|
||||||
updateValue = feedData->nextValue();
|
updateValue = feedData->nextValue();
|
||||||
|
@ -143,6 +143,7 @@ if(WITH_PYTHON)
|
|||||||
add_fdb_test(TEST_FILES fast/CycleTest.toml)
|
add_fdb_test(TEST_FILES fast/CycleTest.toml)
|
||||||
add_fdb_test(TEST_FILES fast/ChangeFeeds.toml)
|
add_fdb_test(TEST_FILES fast/ChangeFeeds.toml)
|
||||||
add_fdb_test(TEST_FILES fast/ChangeFeedOperations.toml)
|
add_fdb_test(TEST_FILES fast/ChangeFeedOperations.toml)
|
||||||
|
add_fdb_test(TEST_FILES fast/ChangeFeedOperationsMove.toml)
|
||||||
add_fdb_test(TEST_FILES fast/DataLossRecovery.toml)
|
add_fdb_test(TEST_FILES fast/DataLossRecovery.toml)
|
||||||
add_fdb_test(TEST_FILES fast/EncryptionOps.toml)
|
add_fdb_test(TEST_FILES fast/EncryptionOps.toml)
|
||||||
# TODO: fix failures and renable the test
|
# TODO: fix failures and renable the test
|
||||||
|
@ -8,3 +8,28 @@ testTitle = 'ChangeFeedOperationsTest'
|
|||||||
|
|
||||||
[[test.workload]]
|
[[test.workload]]
|
||||||
testName = 'ChangeFeedOperations'
|
testName = 'ChangeFeedOperations'
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'RandomClogging'
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Rollback'
|
||||||
|
meanDelay = 30.0
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Attrition'
|
||||||
|
machinesToKill = 10
|
||||||
|
machinesToLeave = 3
|
||||||
|
reboot = true
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Attrition'
|
||||||
|
machinesToKill = 10
|
||||||
|
machinesToLeave = 3
|
||||||
|
reboot = true
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
39
tests/fast/ChangeFeedOperationsMove.toml
Normal file
39
tests/fast/ChangeFeedOperationsMove.toml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[configuration]
|
||||||
|
allowDefaultTenant = false
|
||||||
|
|
||||||
|
# TODO add failure events, and then add a version that also supports randomMoveKeys
|
||||||
|
|
||||||
|
[[test]]
|
||||||
|
testTitle = 'ChangeFeedOperationsTest'
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'ChangeFeedOperations'
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'RandomMoveKeys'
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'RandomClogging'
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Rollback'
|
||||||
|
meanDelay = 60.0
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Attrition'
|
||||||
|
machinesToKill = 10
|
||||||
|
machinesToLeave = 3
|
||||||
|
reboot = true
|
||||||
|
testDuration = 60.0
|
||||||
|
|
||||||
|
[[test.workload]]
|
||||||
|
testName = 'Attrition'
|
||||||
|
machinesToKill = 10
|
||||||
|
machinesToLeave = 3
|
||||||
|
reboot = true
|
||||||
|
testDuration = 60.0
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user