Skip to content

Commit 537363a

Browse files
authored
Verify more storage calls that they are inside a retry block. (#8416)
1 parent 878d0f2 commit 537363a

File tree

5 files changed

+32
-20
lines changed

5 files changed

+32
-20
lines changed

app/lib/fake/backend/fake_download_counts.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,20 @@ import 'dart:io';
77
import 'package:gcloud/storage.dart';
88
import 'package:pub_dev/service/download_counts/computations.dart';
99
import 'package:pub_dev/shared/configuration.dart';
10+
import 'package:pub_dev/shared/storage.dart';
1011
import 'package:pub_dev/shared/utils.dart';
1112

1213
Future<void> generateFakeDownloadCounts(
1314
String downloadCountsFileName, String dataFilePath) async {
1415
final file = File(dataFilePath).readAsBytesSync();
1516
await storageService
1617
.bucket(activeConfiguration.downloadCountsBucketName!)
17-
.writeBytes(downloadCountsFileName, file);
18+
.writeBytesWithRetry(downloadCountsFileName, file);
1819
}
1920

2021
Future<void> generateFake30DaysTotals(Map<String, int> totals) async {
2122
await storageService
2223
.bucket(activeConfiguration.reportsBucketName!)
23-
.writeBytes(
24+
.writeBytesWithRetry(
2425
downloadCounts30DaysTotalsFileName, jsonUtf8Encoder.convert(totals));
2526
}

app/lib/fake/backend/fake_topics.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import 'package:gcloud/storage.dart';
66

77
import '../../service/topics/count_topics.dart';
88
import '../../shared/configuration.dart';
9+
import '../../shared/storage.dart';
910
import '../../shared/utils.dart';
1011

1112
Future<void> generateFakeTopicValues() async {
1213
await storageService
1314
.bucket(activeConfiguration.reportsBucketName!)
14-
.writeBytes(topicsJsonFileName,
15+
.writeBytesWithRetry(topicsJsonFileName,
1516
jsonUtf8Encoder.convert({'ffi': 7, 'ui': 5, 'network': 6}));
1617
}

app/lib/package/tarball_storage.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class TarballStorage {
147147
required String package,
148148
required String version,
149149
}) async {
150-
await _storage.copyObject(
150+
await _storage.copyObjectWithRetry(
151151
sourceAbsoluteObjectName,
152152
_canonicalBucket.absoluteObjectName(tarballObjectName(package, version)),
153153
);
@@ -157,7 +157,7 @@ class TarballStorage {
157157
Future<void> copyArchiveFromCanonicalToPublicBucket(
158158
String package, String version) async {
159159
final objectName = tarballObjectName(package, version);
160-
await _storage.copyObject(
160+
await _storage.copyObjectWithRetry(
161161
_canonicalBucket.absoluteObjectName(objectName),
162162
_publicBucket.absoluteObjectName(objectName),
163163
);
@@ -186,7 +186,7 @@ class TarballStorage {
186186
final objectName = tarballObjectName(package, version);
187187
final info = await _canonicalBucket.tryInfo(objectName);
188188
if (info != null) {
189-
await _canonicalBucket.delete(objectName);
189+
await _canonicalBucket.deleteWithRetry(objectName);
190190
}
191191
}
192192

@@ -232,11 +232,11 @@ class TarballStorage {
232232
_logger
233233
.warning('Updating missing object in public bucket: $objectName');
234234
try {
235-
await _storage.copyObject(
235+
await _storage.copyObjectWithRetry(
236236
_canonicalBucket.absoluteObjectName(objectName),
237237
_publicBucket.absoluteObjectName(objectName),
238238
);
239-
final newInfo = await _publicBucket.info(objectName);
239+
final newInfo = await _publicBucket.infoWithRetry(objectName);
240240
await updateContentDispositionToAttachment(newInfo, _publicBucket);
241241
updatedCount++;
242242
} on Exception catch (e, st) {
@@ -307,7 +307,7 @@ class TarballStorage {
307307

308308
for (final objectName in deleteObjects) {
309309
_logger.shout('Deleting object from public bucket: "$objectName".');
310-
await _publicBucket.delete(objectName);
310+
await _publicBucket.deleteWithRetry(objectName);
311311
}
312312

313313
return PublicBucketUpdateStat(

app/lib/shared/storage.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,27 @@ extension BucketExt on Bucket {
201201
),
202202
);
203203
}
204+
205+
/// Create an new object in the bucket with specified content with the default retry.
206+
Future<ObjectInfo> writeBytesWithRetry(
207+
String name,
208+
List<int> bytes, {
209+
ObjectMetadata? metadata,
210+
Acl? acl,
211+
PredefinedAcl? predefinedAcl,
212+
String? contentType,
213+
}) async {
214+
return await _retry(
215+
() async => await writeBytes(
216+
name,
217+
bytes,
218+
metadata: metadata,
219+
acl: acl,
220+
predefinedAcl: predefinedAcl,
221+
contentType: contentType,
222+
),
223+
);
224+
}
204225
}
205226

206227
extension PageExt<T> on Page<T> {

pkg/fake_gcloud/lib/retry_enforcer_storage.dart

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,20 @@ class RetryEnforcerStorage implements Storage {
5959
Future<bool> bucketExists(String bucketName) async {
6060
return await _verifyRetry(
6161
() => _storage.bucketExists(bucketName),
62-
ignore: true,
6362
);
6463
}
6564

6665
@override
6766
Future<BucketInfo> bucketInfo(String bucketName) async {
6867
return await _verifyRetry(
6968
() async => await _storage.bucketInfo(bucketName),
70-
ignore: true,
7169
);
7270
}
7371

7472
@override
7573
Future copyObject(String src, String dest, {ObjectMetadata? metadata}) async {
7674
return await _verifyRetry(
7775
() => _storage.copyObject(src, dest, metadata: metadata),
78-
ignore: true,
7976
);
8077
}
8178

@@ -91,15 +88,13 @@ class RetryEnforcerStorage implements Storage {
9188
predefinedAcl: predefinedAcl,
9289
acl: acl,
9390
),
94-
ignore: true,
9591
);
9692
}
9793

9894
@override
9995
Future deleteBucket(String bucketName) async {
10096
return await _verifyRetry(
10197
() => _storage.deleteBucket(bucketName),
102-
ignore: true,
10398
);
10499
}
105100

@@ -112,7 +107,6 @@ class RetryEnforcerStorage implements Storage {
112107
Future<Page<String>> pageBucketNames({int pageSize = 50}) async {
113108
return await _verifyRetry(
114109
() => _storage.pageBucketNames(pageSize: pageSize),
115-
ignore: true,
116110
);
117111
}
118112
}
@@ -134,15 +128,13 @@ class _RetryEnforcerBucket implements Bucket {
134128
Future delete(String name) async {
135129
return await _verifyRetry(
136130
() async => await _bucket.delete(name),
137-
ignore: true,
138131
);
139132
}
140133

141134
@override
142135
Future<ObjectInfo> info(String name) async {
143136
return await _verifyRetry(
144137
() async => await _bucket.info(name),
145-
ignore: true,
146138
);
147139
}
148140

@@ -167,7 +159,6 @@ class _RetryEnforcerBucket implements Bucket {
167159
delimiter: delimiter,
168160
pageSize: pageSize,
169161
)),
170-
ignore: true,
171162
);
172163
}
173164

@@ -222,7 +213,6 @@ class _RetryEnforcerBucket implements Bucket {
222213
predefinedAcl: predefinedAcl,
223214
contentType: contentType,
224215
),
225-
ignore: true,
226216
);
227217
}
228218
}
@@ -241,7 +231,6 @@ class _RetryEnforcerPage<T> implements Page<T> {
241231
Future<Page<T>> next({int pageSize = 50}) async {
242232
return await _verifyRetry(
243233
() async => _RetryEnforcerPage(await _page.next(pageSize: pageSize)),
244-
ignore: true,
245234
);
246235
}
247236
}

0 commit comments

Comments
 (0)