Skip to content

Commit 1cff64b

Browse files
authored
Synchronization logic for exported API (#8203)
* Draft of what a full sync could look like * Updated ApiExported and added tests * More logging * stray file warning gone from tests * Fix tests * Fix logger name in exported_api.dart * Remove skip from test * Avoid caching security advisories
1 parent 51a366c commit 1cff64b

File tree

8 files changed

+669
-277
lines changed

8 files changed

+669
-277
lines changed

app/lib/package/api_export/api_exporter.dart

Lines changed: 201 additions & 177 deletions
Large diffs are not rendered by default.

app/lib/package/api_export/exported_api.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import '../../shared/storage.dart';
1919
import '../../shared/versions.dart'
2020
show runtimeVersion, runtimeVersionPattern, shouldGCVersion;
2121

22-
final _log = Logger('api_export:exported_bucket');
22+
final _log = Logger('api_export.exported_api');
2323

2424
/// Minimum age before an item can be consider garbage.
2525
///

app/lib/package/backend.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,7 @@ class PackageBackend {
12551255
emailBackend.trySendOutgoingEmail(outgoingEmail),
12561256
taskBackend.trackPackage(newVersion.package, updateDependents: true),
12571257
if (apiExporter != null)
1258-
apiExporter!
1259-
.updatePackageVersion(newVersion.package, newVersion.version!),
1258+
apiExporter!.synchronizePackage(newVersion.package),
12601259
]);
12611260
await tarballStorage.updateContentDispositionOnPublicBucket(
12621261
newVersion.package, newVersion.version!);

app/lib/service/entrypoint/analyzer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,5 @@ Future _apiExporterMain(EntryMessage message) async {
8585
message.protocolSendPort.send(ReadyMessage());
8686
await popularityStorage.start();
8787
await downloadCountsBackend.start();
88-
await apiExporter!.uploadInForeverLoop();
88+
await apiExporter!.start();
8989
}

app/lib/service/security_advisories/backend.dart

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,34 @@ class SecurityAdvisoryBackend {
3939
}
4040

4141
Future<List<SecurityAdvisoryData>> lookupSecurityAdvisories(
42-
String package,
43-
) async {
44-
return (await cache.securityAdvisories(package).get(() async {
42+
String package, {
43+
bool skipCache = false,
44+
}) async {
45+
final loadAdvisories = () async {
4546
final query = _db.query<SecurityAdvisory>()
4647
..filter('affectedPackages =', package);
4748
return query
4849
.run()
4950
.map((SecurityAdvisory adv) => SecurityAdvisoryData.fromModel(adv))
5051
.toList();
51-
}))!;
52+
};
53+
if (skipCache) {
54+
return await loadAdvisories();
55+
}
56+
57+
return (await cache.securityAdvisories(package).get(loadAdvisories))!;
5258
}
5359

5460
/// Create a [ListAdvisoriesResponse] for [package] using advisories from
5561
/// cache.
56-
Future<ListAdvisoriesResponse> listAdvisoriesResponse(String package) async {
57-
final advisories = await lookupSecurityAdvisories(package);
62+
Future<ListAdvisoriesResponse> listAdvisoriesResponse(
63+
String package, {
64+
bool skipCache = false,
65+
}) async {
66+
final advisories = await lookupSecurityAdvisories(
67+
package,
68+
skipCache: skipCache,
69+
);
5870
return ListAdvisoriesResponse(
5971
advisories: advisories.map((a) => a.advisory).toList(),
6072
advisoriesUpdated: advisories.map((a) => a.syncTime).maxOrNull,

app/lib/tool/neat_task/pub_dev_tasks.dart

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ void _setupGenericPeriodicTasks() {
119119

120120
// Exports the package name completion data to a bucket.
121121
_daily(
122-
name: 'export-package-name-completion-data-to-bucket',
122+
name: 'synchronize-exported-api',
123123
isRuntimeVersioned: true,
124-
task: () async => await apiExporter?.uploadPkgNameCompletionData(),
124+
task: () async => await apiExporter?.synchronizeExportedApi(),
125125
);
126126

127127
// Deletes moderated packages, versions, publishers and users.
@@ -167,13 +167,6 @@ void _setupGenericPeriodicTasks() {
167167
task: taskBackend.garbageCollect,
168168
);
169169

170-
// Deletes exported API data for old runtime versions
171-
_weekly(
172-
name: 'garbage-collect-api-exports',
173-
isRuntimeVersioned: true,
174-
task: () async => apiExporter?.deleteObsoleteRuntimeContent(),
175-
);
176-
177170
// Delete very old instances that have been abandoned
178171
_daily(
179172
name: 'garbage-collect-old-instances',

0 commit comments

Comments
 (0)