Add compile time switch NO_MULTIREGION_TEST. (#11931)

* Add compile time switch NO_MULTIREGION_TEST. When set, simulation tests
will not create configurations with more than one region. Tests requiring
multiple regions are ignored.

* While the RUN_IGNORED_TESTS setting allows running tests that have been
marked as ignored, this should not apply to multiregion tests.  Multiregion
tests must be completely disabled if the NO_MULTIREGION setting is enabled.

---------

Co-authored-by: Dan Lambright <hlambright@apple.com>
This commit is contained in:
Dan Lambright 2025-02-13 14:38:41 -05:00 committed by GitHub
parent ff22876247
commit fee87e03b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 49 additions and 14 deletions

View File

@ -125,6 +125,15 @@ set(FDB_FUTURE_VERSION "7.5.0")
set(FDB_PREV_RELEASE_VERSION "7.3.41")
set(FDB_PREV2_RELEASE_VERSION "7.1.33")
set(MULTIREGION_TEST TRUE)
option(NO_MULTIREGION_TEST "Disable multiregion simulation tests" OFF)
if (NO_MULTIREGION_TEST)
set(MULTIREGION_TEST FALSE)
add_definitions(-DNO_MULTIREGION_TEST)
message(STATUS "NO_MULTIREGION_TEST is ON")
endif()
################################################################################
# Flow
################################################################################

View File

@ -1675,12 +1675,18 @@ void SimulationConfig::setSpecificConfig(const TestConfig& testConfig) {
// Sets generateFearless and number of dataCenters based on testConfig details
// The number of datacenters may be overwritten in setRegions
void SimulationConfig::setDatacenters(const TestConfig& testConfig) {
generateFearless =
testConfig.simpleConfig ? false : (testConfig.minimumRegions > 1 || deterministicRandom()->random01() < 0.5);
if (testConfig.generateFearless.present()) {
// overwrite whatever decision we made before
generateFearless = testConfig.generateFearless.get();
#ifdef NO_MULTIREGION_TEST
if (testConfig.minimumRegions > 1 || (testConfig.generateFearless.present() && testConfig.generateFearless.get())) {
throw internal_error_msg("Test requires multi-region while the flag is turned off in the build process");
}
generateFearless = false;
#else
generateFearless =
testConfig.generateFearless.present()
? testConfig.generateFearless.get()
: (!testConfig.simpleConfig && (testConfig.minimumRegions > 1 || deterministicRandom()->random01() < 0.5));
#endif
datacenters =
testConfig.simpleConfig
? 1
@ -2346,10 +2352,12 @@ void SimulationConfig::generateNormalConfig(const TestConfig& testConfig) {
setEncryptionAtRestMode(testConfig);
setStorageEngine(testConfig);
setReplicationType(testConfig);
#if (!NO_MULTIREGION_TEST)
if (!testConfig.singleRegion &&
(generateFearless || (datacenters == 2 && deterministicRandom()->random01() < 0.5))) {
setRegions(testConfig);
}
#endif
setMachineCount(testConfig);
setCoordinators(testConfig);

View File

@ -41,9 +41,21 @@ if(WITH_PYTHON)
configure_file(${PROJECT_SOURCE_DIR}/tests/CTestCustom.ctest.cmake ${PROJECT_BINARY_DIR}/CTestCustom.ctest @ONLY)
set(MULTIREGION_IGNORE_PATTERNS "")
if (NO_MULTIREGION_TEST)
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/fast/ValidateStorage\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/rare/DcLag\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/rare/ClogRemoteTLog\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/rare/FailoverWithSSLag\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/fast/KillRegionCycle\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/slow/GcGenerations\\.toml$")
list(APPEND MULTIREGION_IGNORE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/slow/DiskFailureCycle\\.toml$")
endif()
configure_testing(TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
ERROR_ON_ADDITIONAL_FILES
IGNORE_PATTERNS ".*/CMakeLists.txt" ".*/requirements.txt")
ERROR_ON_ADDITIONAL_FILES
IGNORE_PATTERNS ".*/CMakeLists.txt" ".*/requirements.txt" ${MULTIREGION_IGNORE_PATTERNS})
add_fdb_test(TEST_FILES AsyncFileCorrectness.txt UNIT IGNORE)
add_fdb_test(TEST_FILES AsyncFileMix.txt UNIT IGNORE)
@ -182,7 +194,6 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES fast/IncrementTest.toml)
add_fdb_test(TEST_FILES fast/InventoryTestAlmostReadOnly.toml)
add_fdb_test(TEST_FILES fast/InventoryTestSomeWrites.toml)
add_fdb_test(TEST_FILES fast/KillRegionCycle.toml)
add_fdb_test(TEST_FILES fast/LocalRatekeeper.toml)
add_fdb_test(TEST_FILES fast/LongStackWriteDuringRead.toml)
add_fdb_test(TEST_FILES fast/LowLatency.toml)
@ -233,8 +244,20 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES fast/WriteDuringReadClean.toml)
add_fdb_test(TEST_FILES noSim/RandomUnitTests.toml IGNORE)
if (MULTIREGION_TEST)
# ValidateStorage depends on WITH_ROCKSDB
add_fdb_test(TEST_FILES slow/DiskFailureCycle.toml)
add_fdb_test(TEST_FILES rare/FailoverWithSSLag.toml)
add_fdb_test(TEST_FILES rare/DcLag.toml)
add_fdb_test(TEST_FILES slow/GcGenerations.toml)
add_fdb_test(TEST_FILES fast/KillRegionCycle.toml)
add_fdb_test(TEST_FILES rare/ClogRemoteTLog.toml)
endif()
if(WITH_ROCKSDB)
add_fdb_test(TEST_FILES fast/ValidateStorage.toml)
if(MULTIREGION_TEST)
add_fdb_test(TEST_FILES fast/ValidateStorage.toml)
endif()
add_fdb_test(TEST_FILES noSim/KeyValueStoreRocksDBTest.toml UNIT)
add_fdb_test(TEST_FILES noSim/ShardedRocksDBTest.toml UNIT)
add_fdb_test(TEST_FILES noSim/ShardedRocksDBCheckpointTest.toml UNIT)
@ -277,7 +300,6 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES rare/BlobGranuleVerifyLargeClean.toml IGNORE)
add_fdb_test(TEST_FILES rare/CheckRelocation.toml)
add_fdb_test(TEST_FILES rare/ClogTlog.toml)
add_fdb_test(TEST_FILES rare/ClogRemoteTLog.toml)
add_fdb_test(TEST_FILES rare/ClogUnclog.toml)
add_fdb_test(TEST_FILES rare/CloggedCycleWithKills.toml)
add_fdb_test(TEST_FILES rare/ConfigDBUnitTest.toml)
@ -287,9 +309,7 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES rare/CycleWithKills.toml)
add_fdb_test(TEST_FILES rare/CycleWithDeadHall.toml)
add_fdb_test(TEST_FILES rare/DataDistributionMetrics.toml)
add_fdb_test(TEST_FILES rare/DcLag.toml)
add_fdb_test(TEST_FILES rare/ExpectStableThroughput.toml)
add_fdb_test(TEST_FILES rare/FailoverWithSSLag.toml)
add_fdb_test(TEST_FILES rare/HighContentionPrefixAllocator.toml)
add_fdb_test(TEST_FILES rare/InventoryTestHeavyWrites.toml)
add_fdb_test(TEST_FILES rare/LargeApiCorrectness.toml)
@ -466,10 +486,8 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES slow/DDBalanceAndRemove.toml)
add_fdb_test(TEST_FILES slow/DDBalanceAndRemoveStatus.toml)
add_fdb_test(TEST_FILES slow/DifferentClustersSameRV.toml)
add_fdb_test(TEST_FILES slow/DiskFailureCycle.toml)
add_fdb_test(TEST_FILES slow/ExcludeIncludeStorageServers.toml)
add_fdb_test(TEST_FILES slow/FastTriggeredWatches.toml)
add_fdb_test(TEST_FILES slow/GcGenerations.toml)
add_fdb_test(TEST_FILES slow/LongRunning.toml LONG_RUNNING)
add_fdb_test(TEST_FILES slow/LowLatencyWithFailures.toml)
add_fdb_test(TEST_FILES slow/MoveKeysClean.toml)