Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions app/lib/package/api_export/exported_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ final class ExportedApi {
// Only delete the item if it's older than _minGarbageAge
// This avoids any races where we delete files we've just created
// TODO: Conditionally deletion API from package:gcloud would be better!
await _bucket.tryDeleteWithRetry(item.name);
await _bucket.deleteWithRetry(item.name);
}
});

Expand All @@ -137,7 +137,7 @@ final class ExportedApi {
item.updated.isBefore(gcFilesBefore)) {
// Only delete the item if it's older than _minGarbageAge
// This avoids any races where we delete files we've just created
await _bucket.tryDeleteWithRetry(item.name);
await _bucket.deleteWithRetry(item.name);
}
});
}
Expand Down Expand Up @@ -184,7 +184,7 @@ final class ExportedApi {
await _listBucket(
prefix: entry.name,
delimiter: '',
(entry) async => await _bucket.tryDeleteWithRetry(entry.name),
(entry) async => await _bucket.deleteWithRetry(entry.name),
);
}
}));
Expand Down Expand Up @@ -336,7 +336,7 @@ final class ExportedPackage {
item.updated.isBefore(clock.agoBy(_minGarbageAge))) {
// Only delete if the item if it's older than _minGarbageAge
// This avoids any races where we delete files we've just created
await _owner._bucket.tryDeleteWithRetry(item.name);
await _owner._bucket.deleteWithRetry(item.name);
}
});

Expand Down Expand Up @@ -380,7 +380,7 @@ final class ExportedPackage {
if (info.updated.isBefore(clock.agoBy(_minGarbageAge))) {
// Only delete if the item if it's older than _minGarbageAge
// This avoids any races where we delete files we've just created
await _owner._bucket.tryDeleteWithRetry(item.name);
await _owner._bucket.deleteWithRetry(item.name);
}
}
// Ignore cases where tryInfo fails, assuming the object has been
Expand All @@ -399,7 +399,7 @@ final class ExportedPackage {
await _owner._listBucket(
prefix: prefix + '/api/archives/$_package-',
delimiter: '',
(item) async => await _owner._bucket.tryDeleteWithRetry(item.name),
(item) async => await _owner._bucket.deleteWithRetry(item.name),
);
}),
]);
Expand Down Expand Up @@ -442,7 +442,7 @@ sealed class ExportedObject {
Future<void> delete() async {
await Future.wait(_owner._prefixes.map((prefix) async {
await _owner._pool.withResource(() async {
await _owner._bucket.tryDeleteWithRetry(prefix + _objectName);
await _owner._bucket.deleteWithRetry(prefix + _objectName);
});
}));
}
Expand Down
17 changes: 7 additions & 10 deletions app/lib/shared/storage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,20 +103,17 @@ extension BucketExt on Bucket {
}

/// Delete an object with default retry.
///
/// Ignores 404 responses, as it may happen if the first request completes
/// on the server while unsuccessful on the client.
Future<void> deleteWithRetry(String name) async {
return await _retry(() => delete(name));
}

/// Deletes [name] if it exists, ignores 404 otherwise.
Future<bool> tryDeleteWithRetry(String name) async {
return await _retry(
() async {
try {
await delete(name);
return true;
} on DetailedApiRequestError catch (e) {
if (e.status == 404) {
return false;
return;
}
rethrow;
}
Expand Down Expand Up @@ -338,8 +335,8 @@ Future<int> deleteBucketFolderRecursively(
final pool = Pool(concurrency ?? 1);
for (final entry in page!.items) {
final f = pool.withResource(() async {
final deleted = await bucket.tryDeleteWithRetry(entry.name);
if (deleted) count++;
await bucket.deleteWithRetry(entry.name);
count++;
});
futures.add(f);
}
Expand Down Expand Up @@ -477,7 +474,7 @@ class VersionedJsonStorage {
final age = clock.now().difference(info.updated);
if (minAgeThreshold == null || age > minAgeThreshold) {
deleted++;
await _bucket.tryDeleteWithRetry(entry.name);
await _bucket.deleteWithRetry(entry.name);
}
}
});
Expand Down