Skip to content

Commit 6d7720e

Browse files
committed
Move object-name methods to PackageStorage.
1 parent 38da6bb commit 6d7720e

File tree

7 files changed

+52
-46
lines changed

7 files changed

+52
-46
lines changed

app/lib/admin/backend.dart

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:clock/clock.dart';
1212
import 'package:collection/collection.dart';
1313
import 'package:convert/convert.dart';
1414
import 'package:gcloud/service_scope.dart' as ss;
15-
import 'package:gcloud/storage.dart';
1615
import 'package:logging/logging.dart';
1716
import 'package:meta/meta.dart';
1817
import 'package:pool/pool.dart';
@@ -24,19 +23,14 @@ import '../account/models.dart';
2423
import '../admin/models.dart';
2524
import '../audit/models.dart';
2625
import '../package/backend.dart'
27-
show
28-
checkPackageVersionParams,
29-
packageBackend,
30-
purgePackageCache,
31-
tarballObjectName;
26+
show checkPackageVersionParams, packageBackend, purgePackageCache;
3227
import '../package/models.dart';
3328
import '../publisher/models.dart';
3429
import '../scorecard/backend.dart';
3530
import '../service/email/email_templates.dart';
3631
import '../shared/configuration.dart';
3732
import '../shared/datastore.dart';
3833
import '../shared/exceptions.dart';
39-
import '../shared/storage.dart';
4034
import '../shared/versions.dart';
4135
import '../task/backend.dart';
4236
import 'actions/actions.dart' show AdminAction;
@@ -794,9 +788,6 @@ class AdminBackend {
794788
@visibleForTesting DateTime? before,
795789
}) async {
796790
before ??= clock.ago(days: 3 * 366).toUtc(); // extra buffer days
797-
final canonicalBucket =
798-
storageService.bucket(activeConfiguration.canonicalPackagesBucketName!);
799-
800791
// delete packages
801792
final pQuery = _db.query<Package>()
802793
..filter('moderatedAt <', before)
@@ -829,11 +820,8 @@ class AdminBackend {
829820
'Deleting moderated package version: ${version.qualifiedVersionKey}');
830821

831822
// deleting from canonical bucket
832-
final objectName = tarballObjectName(version.package, version.version!);
833-
final info = await canonicalBucket.tryInfo(objectName);
834-
if (info != null) {
835-
await canonicalBucket.delete(objectName);
836-
}
823+
await packageBackend.packageStorage
824+
.deleteArchiveFromCanonicalBucket(version.package, version.version!);
837825

838826
// deleting from datastore
839827
await withRetryTransaction(_db, (tx) async {

app/lib/package/backend.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,13 +1938,6 @@ DerivedPackageVersionEntities derivePackageVersionEntities({
19381938
return DerivedPackageVersionEntities(versionInfo, assets);
19391939
}
19401940

1941-
/// The GCS object name of a tarball object - excluding leading '/'.
1942-
String tarballObjectName(String package, String version) =>
1943-
'${tarballObjectNamePackagePrefix(package)}$version.tar.gz';
1944-
1945-
/// The GCS object prefix of a tarball object for a given [package] - excluding leading '/'.
1946-
String tarballObjectNamePackagePrefix(String package) => 'packages/$package-';
1947-
19481941
/// The GCS object name of an temporary object [guid] - excluding leading '/'.
19491942
@visibleForTesting
19501943
String tmpObjectName(String guid) => 'tmp/$guid';

app/lib/package/package_storage.dart

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ import 'package:pub_dev/shared/storage.dart';
1111

1212
final _logger = Logger('package_storage');
1313

14+
/// The GCS object name of a tarball object - excluding leading '/'.
15+
String tarballObjectName(String package, String version) =>
16+
'${_tarballObjectNamePackagePrefix(package)}$version.tar.gz';
17+
18+
/// The GCS object prefix of a tarball object for a given [package] - excluding leading '/'.
19+
String _tarballObjectNamePackagePrefix(String package) => 'packages/$package-';
20+
1421
class PackageStorage {
1522
final DatastoreDB _dbService;
1623
final Storage _storage;
@@ -32,6 +39,30 @@ class PackageStorage {
3239
this._publicBucket,
3340
);
3441

42+
/// Gets the object info of the archive file from the public bucket.
43+
Future<ObjectInfo?> getCanonicalBucketArchiveInfo(
44+
String package, String version) async {
45+
final objectName = tarballObjectName(package, version);
46+
return await _canonicalBucket.tryInfo(objectName);
47+
}
48+
49+
/// Gets the object info of the archive file from the public bucket.
50+
Future<ObjectInfo?> getPublicBucketArchiveInfo(
51+
String package, String version) async {
52+
final objectName = tarballObjectName(package, version);
53+
return await _publicBucket.tryInfo(objectName);
54+
}
55+
56+
/// Deletes the package archive file from the canonical bucket.
57+
Future<void> deleteArchiveFromCanonicalBucket(
58+
String package, String version) async {
59+
final objectName = tarballObjectName(package, version);
60+
final info = await _canonicalBucket.tryInfo(objectName);
61+
if (info != null) {
62+
await _canonicalBucket.delete(objectName);
63+
}
64+
}
65+
3566
/// Updates the public package archive:
3667
/// - copies missing archive objects from canonical to public bucket,
3768
/// - deletes leftover objects from public bucket
@@ -92,8 +123,9 @@ class PackageStorage {
92123
objectNamesInPublicBucket.add(objectName);
93124
}
94125

95-
final filterForNamePrefix =
96-
package == null ? 'packages/' : tarballObjectNamePackagePrefix(package);
126+
final filterForNamePrefix = package == null
127+
? 'packages/'
128+
: _tarballObjectNamePackagePrefix(package);
97129
await for (final entry in _publicBucket.list(prefix: filterForNamePrefix)) {
98130
// Skip non-objects.
99131
if (!entry.isObject) {

app/lib/shared/integrity.dart

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:_pub_shared/search/tags.dart';
99
import 'package:_pub_shared/utils/http.dart';
1010
import 'package:clock/clock.dart';
1111
import 'package:crypto/crypto.dart';
12-
import 'package:gcloud/storage.dart';
1312
import 'package:http/http.dart' as http;
1413
import 'package:logging/logging.dart';
1514
import 'package:pool/pool.dart';
@@ -604,10 +603,8 @@ class IntegrityChecker {
604603
Uri archiveDownloadUri, {
605604
required bool shouldBeInPublicBucket,
606605
}) async* {
607-
final canonicalInfo = await storageService
608-
.bucket(activeConfiguration.canonicalPackagesBucketName!)
609-
// ignore: invalid_use_of_visible_for_testing_member
610-
.tryInfo(tarballObjectName(pv.package, pv.version!));
606+
final canonicalInfo = await packageBackend.packageStorage
607+
.getCanonicalBucketArchiveInfo(pv.package, pv.version!);
611608
if (canonicalInfo == null) {
612609
yield 'PackageVersion "${pv.qualifiedVersionKey}" has no matching canonical archive file.';
613610
return;
@@ -631,10 +628,8 @@ class IntegrityChecker {
631628
yield 'Canonical archive for PackageVersion "${pv.qualifiedVersionKey}" differs from public bucket.';
632629
}
633630

634-
final publicInfo = await storageService
635-
.bucket(activeConfiguration.publicPackagesBucketName!)
636-
// ignore: invalid_use_of_visible_for_testing_member
637-
.tryInfo(tarballObjectName(pv.package, pv.version!));
631+
final publicInfo = await packageBackend.packageStorage
632+
.getPublicBucketArchiveInfo(pv.package, pv.version!);
638633
if (!canonicalInfo.hasSameSignatureAs(publicInfo)) {
639634
yield 'Canonical archive for PackageVersion "${pv.qualifiedVersionKey}" differs in the public bucket.';
640635
}

app/test/admin/moderate_package_test.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:_pub_shared/data/account_api.dart';
88
import 'package:_pub_shared/data/admin_api.dart';
99
import 'package:_pub_shared/data/package_api.dart';
1010
import 'package:clock/clock.dart';
11-
import 'package:gcloud/storage.dart';
1211
import 'package:http/http.dart' as http;
1312
import 'package:pub_dev/account/backend.dart';
1413
import 'package:pub_dev/admin/actions/actions.dart';
@@ -21,7 +20,6 @@ import 'package:pub_dev/scorecard/backend.dart';
2120
import 'package:pub_dev/search/backend.dart';
2221
import 'package:pub_dev/shared/configuration.dart';
2322
import 'package:pub_dev/shared/datastore.dart';
24-
import 'package:pub_dev/shared/storage.dart';
2523
import 'package:test/test.dart';
2624

2725
import '../admin/models_test.dart';
@@ -382,10 +380,9 @@ void main() {
382380
});
383381

384382
// canonical file is present
385-
final bucket = storageService
386-
.bucket(activeConfiguration.canonicalPackagesBucketName!);
387383
expect(
388-
await bucket.tryInfo(tarballObjectName('oxygen', '1.2.0')),
384+
await packageBackend.packageStorage
385+
.getCanonicalBucketArchiveInfo('oxygen', '1.2.0'),
389386
isNotNull,
390387
);
391388

@@ -400,7 +397,8 @@ void main() {
400397
isNull,
401398
);
402399
expect(
403-
await bucket.tryInfo(tarballObjectName('oxygen', '1.2.0')),
400+
await packageBackend.packageStorage
401+
.getCanonicalBucketArchiveInfo('oxygen', '1.2.0'),
404402
isNull,
405403
);
406404

app/test/admin/moderate_package_version_test.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:_pub_shared/data/account_api.dart';
88
import 'package:_pub_shared/data/admin_api.dart';
99
import 'package:_pub_shared/data/package_api.dart';
1010
import 'package:clock/clock.dart';
11-
import 'package:gcloud/storage.dart';
1211
import 'package:http/http.dart' as http;
1312
import 'package:pub_dev/admin/backend.dart';
1413
import 'package:pub_dev/admin/models.dart';
@@ -20,7 +19,6 @@ import 'package:pub_dev/search/backend.dart';
2019
import 'package:pub_dev/shared/configuration.dart';
2120
import 'package:pub_dev/shared/datastore.dart';
2221
import 'package:pub_dev/shared/exceptions.dart';
23-
import 'package:pub_dev/shared/storage.dart';
2422
import 'package:pub_dev/task/backend.dart';
2523
import 'package:test/test.dart';
2624

@@ -430,10 +428,9 @@ void main() {
430428
'cleanup deletes datastore entities and canonical archive file',
431429
fn: () async {
432430
// canonical file is present
433-
final bucket = storageService
434-
.bucket(activeConfiguration.canonicalPackagesBucketName!);
435431
expect(
436-
await bucket.tryInfo(tarballObjectName('oxygen', '1.0.0')),
432+
await packageBackend.packageStorage
433+
.getCanonicalBucketArchiveInfo('oxygen', '1.0.0'),
437434
isNotNull,
438435
);
439436

@@ -462,7 +459,8 @@ void main() {
462459

463460
// canonical file is not present
464461
expect(
465-
await bucket.tryInfo(tarballObjectName('oxygen', '1.0.0')),
462+
await packageBackend.packageStorage
463+
.getCanonicalBucketArchiveInfo('oxygen', '1.0.0'),
466464
isNull,
467465
);
468466

@@ -472,7 +470,8 @@ void main() {
472470
isNotNull,
473471
);
474472
expect(
475-
await bucket.tryInfo(tarballObjectName('oxygen', '1.2.0')),
473+
await packageBackend.packageStorage
474+
.getCanonicalBucketArchiveInfo('oxygen', '1.2.0'),
476475
isNotNull,
477476
);
478477
});

app/test/package/tarball_storage_namer_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:gcloud/storage.dart';
66
import 'package:pub_dev/package/backend.dart';
7+
import 'package:pub_dev/package/package_storage.dart';
78
import 'package:pub_dev/shared/configuration.dart';
89
import 'package:pub_dev/shared/storage.dart';
910
import 'package:test/test.dart';

0 commit comments

Comments
 (0)