[Release-7.4] Cherrypick Mitigate rocksdb external timeout in AtomicBackupToDBCorrectness test (#12193)

This commit is contained in:
Zhe Wang 2025-06-17 11:49:12 -07:00 committed by GitHub
parent dc8fd22cb5
commit 99923077f6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 35 additions and 10 deletions

View File

@ -559,7 +559,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi
init( ROCKSDB_SINGLEKEY_DELETES_MAX, 200 ); // Max rocksdb::delete calls in a transaction
init( ROCKSDB_ENABLE_CLEAR_RANGE_EAGER_READS, false );
init( ROCKSDB_FORCE_DELETERANGE_FOR_CLEARRANGE, false );
init( ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT, 0 ); if( isSimulated ) ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT = deterministicRandom()->randomInt(1000, 10000); // Default: 0 (disabled).
init( ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT, 0 ); if( isSimulated ) ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT = deterministicRandom()->randomInt(200, 500); // Default: 0 (disabled).
// ROCKSDB_STATS_LEVEL=1 indicates rocksdb::StatsLevel::kExceptHistogramOrTimers
// Refer StatsLevel: https://github.com/facebook/rocksdb/blob/main/include/rocksdb/statistics.h#L594
init( ROCKSDB_STATS_LEVEL, 1 );
@ -627,7 +627,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi
init( SHARDED_ROCKSDB_VALIDATE_MAPPING_RATIO, 0.01 ); if (isSimulated) SHARDED_ROCKSDB_VALIDATE_MAPPING_RATIO = deterministicRandom()->random01();
init( SHARD_METADATA_SCAN_BYTES_LIMIT, 10485760 ); // 10MB
init( ROCKSDB_MAX_MANIFEST_FILE_SIZE, 100 << 20 ); if (isSimulated) ROCKSDB_MAX_MANIFEST_FILE_SIZE = 500 << 20; // 500MB in simulation
init( SHARDED_ROCKSDB_MEMTABLE_MAX_RANGE_DELETIONS, 500 ); if (isSimulated) SHARDED_ROCKSDB_MEMTABLE_MAX_RANGE_DELETIONS = 50;
init( SHARDED_ROCKSDB_MEMTABLE_MAX_RANGE_DELETIONS, 500 ); if (isSimulated) SHARDED_ROCKSDB_MEMTABLE_MAX_RANGE_DELETIONS = 5;
init( SHARDED_ROCKSDB_AVERAGE_FILE_SIZE, 8 << 20 ); // 8MB
init( SHARDED_ROCKSDB_COMPACTION_PERIOD, isSimulated? 3600 : 2592000 ); // 30d
init( SHARDED_ROCKSDB_COMPACTION_ACTOR_DELAY, 3600 ); // 1h

View File

@ -599,7 +599,9 @@ struct StorageServerDisk {
Version newStorageVersion,
int64_t& bytesLeft,
UnlimitedCommitBytes unlimitedCommitBytes,
int64_t& clearRangesLeft);
int64_t& clearRangesLeft,
const UID& ssId,
bool verbose = false);
void makeVersionDurable(Version version);
void makeAccumulativeChecksumDurable(const AccumulativeChecksumState& acsState);
void clearAccumulativeChecksumState(const AccumulativeChecksumState& acsState);
@ -12902,7 +12904,8 @@ ACTOR Future<Void> updateStorage(StorageServer* data) {
state Version newOldestVersion = data->storageVersion();
state Version desiredVersion = data->desiredOldestVersion.get();
state int64_t bytesLeft = SERVER_KNOBS->STORAGE_COMMIT_BYTES;
state int64_t clearRangesLeft = data->storage.getKeyValueStoreType() == KeyValueStoreType::SSD_ROCKSDB_V1
state int64_t clearRangesLeft = (data->storage.getKeyValueStoreType() == KeyValueStoreType::SSD_ROCKSDB_V1 ||
data->storage.getKeyValueStoreType() == KeyValueStoreType::SSD_SHARDED_ROCKSDB)
? (SERVER_KNOBS->ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT > 0
? SERVER_KNOBS->ROCKSDB_CLEARRANGES_LIMIT_PER_COMMIT
: INT_MAX)
@ -12981,12 +12984,22 @@ ACTOR Future<Void> updateStorage(StorageServer* data) {
}
}
// When unlimitedCommitBytes is set to true, clearRangesLeft will be ignored.
// Make sure unlimitedCommitBytes is set to True only when storage engine is sharded rocksdb.
ASSERT(data->shardAware || unlimitedCommitBytes == UnlimitedCommitBytes::False);
// Write mutations to storage until we reach the desiredVersion or have written too much (bytesleft)
// or until we reach clearRanges limit, in case of rocksdb.
state double beforeStorageUpdates = now();
loop {
state bool done = data->storage.makeVersionMutationsDurable(
newOldestVersion, desiredVersion, bytesLeft, unlimitedCommitBytes, clearRangesLeft);
state bool done = data->storage.makeVersionMutationsDurable(newOldestVersion,
desiredVersion,
bytesLeft,
unlimitedCommitBytes,
clearRangesLeft,
data->thisServerID,
data->storage.getKeyValueStoreType() ==
KeyValueStoreType::SSD_ROCKSDB_V1);
if (data->tenantMap.getLatestVersion() < newOldestVersion) {
data->tenantMap.createNewVersion(newOldestVersion);
}
@ -13574,10 +13587,21 @@ bool StorageServerDisk::makeVersionMutationsDurable(Version& prevStorageVersion,
Version newStorageVersion,
int64_t& bytesLeft,
UnlimitedCommitBytes unlimitedCommitBytes,
int64_t& clearRangesLeft) {
if ((!unlimitedCommitBytes && bytesLeft <= 0) || clearRangesLeft <= 0)
int64_t& clearRangesLeft,
const UID& ssId,
bool verbose) {
if (!unlimitedCommitBytes && (bytesLeft <= 0 || clearRangesLeft <= 0))
return true;
if (clearRangesLeft <= 0 && verbose) {
TraceEvent(SevInfo, "MakeVersionMutationsDurableClearRangesLeftZero", ssId)
.suppressFor(5.0)
.detail("PrevStorageVersion", prevStorageVersion)
.detail("NewStorageVersion", newStorageVersion)
.detail("BytesLeft", bytesLeft)
.detail("ClearRangesLeft", clearRangesLeft)
.detail("UnlimitedCommitBytes", unlimitedCommitBytes);
}
// Apply mutations from the mutationLog
auto u = data->getMutationLog().upper_bound(prevStorageVersion);
if (u != data->getMutationLog().end() && u->first <= newStorageVersion) {

View File

@ -10,8 +10,8 @@ simBackupAgents = 'BackupToDB'
[[test.workload]]
testName = 'AtomicOps'
nodeCount = 30000
transactionsPerSecond = 2500.0
nodeCount = 10000
transactionsPerSecond = 750.0
testDuration = 30.0
[[test.workload]]

View File

@ -20,6 +20,7 @@ shard_encode_location_metadata = true
# min_byte_sampling_probability = 0.99
# rocksdb_read_range_reuse_iterators = false
dd_physical_shard_move_probability = 1.0
sharded_rocksdb_memtable_max_range_deletions = 50
[[test]]
testTitle = 'PhysicalShardMove'