Skip to content

Commit 9c8c528

Browse files
fix: cleanup logger DB in isolates (#20730)
Co-authored-by: shenlong-tanwen <[email protected]>
1 parent 68b6171 commit 9c8c528

File tree

6 files changed

+25
-28
lines changed

6 files changed

+25
-28
lines changed

mobile/integration_test/test_utils/general_helper.dart

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
44
import 'package:flutter_test/flutter_test.dart';
55
import 'package:hooks_riverpod/hooks_riverpod.dart';
66
import 'package:immich_mobile/entities/store.entity.dart';
7+
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
78
import 'package:immich_mobile/main.dart' as app;
89
import 'package:immich_mobile/providers/db.provider.dart';
910
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
@@ -40,16 +41,14 @@ class ImmichTestHelper {
4041
await EasyLocalization.ensureInitialized();
4142
// Clear all data from Isar (reuse existing instance if available)
4243
final db = await Bootstrap.initIsar();
43-
await Bootstrap.initDomain(db);
44+
final logDb = DriftLogger();
45+
await Bootstrap.initDomain(db, logDb);
4446
await Store.clear();
4547
await db.writeTxn(() => db.clear());
4648
// Load main Widget
4749
await tester.pumpWidget(
4850
ProviderScope(
49-
overrides: [
50-
dbProvider.overrideWithValue(db),
51-
isarProvider.overrideWithValue(db),
52-
],
51+
overrides: [dbProvider.overrideWithValue(db), isarProvider.overrideWithValue(db)],
5352
child: const app.MainWidget(),
5453
),
5554
);
@@ -59,18 +58,11 @@ class ImmichTestHelper {
5958
}
6059

6160
@isTest
62-
void immichWidgetTest(
63-
String description,
64-
Future<void> Function(WidgetTester, ImmichTestHelper) test,
65-
) {
66-
testWidgets(
67-
description,
68-
(widgetTester) async {
69-
await ImmichTestHelper.loadApp(widgetTester);
70-
await test(widgetTester, ImmichTestHelper(widgetTester));
71-
},
72-
semanticsEnabled: false,
73-
);
61+
void immichWidgetTest(String description, Future<void> Function(WidgetTester, ImmichTestHelper) test) {
62+
testWidgets(description, (widgetTester) async {
63+
await ImmichTestHelper.loadApp(widgetTester);
64+
await test(widgetTester, ImmichTestHelper(widgetTester));
65+
}, semanticsEnabled: false);
7466
}
7567

7668
Future<void> pumpUntilFound(
@@ -79,8 +71,7 @@ Future<void> pumpUntilFound(
7971
Duration timeout = const Duration(seconds: 120),
8072
}) async {
8173
bool found = false;
82-
final timer =
83-
Timer(timeout, () => throw TimeoutException("Pump until has timed out"));
74+
final timer = Timer(timeout, () => throw TimeoutException("Pump until has timed out"));
8475
while (found != true) {
8576
await tester.pump();
8677
found = tester.any(finder);

mobile/lib/main.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:immich_mobile/constants/constants.dart';
1414
import 'package:immich_mobile/constants/locales.dart';
1515
import 'package:immich_mobile/extensions/build_context_extensions.dart';
1616
import 'package:immich_mobile/generated/codegen_loader.g.dart';
17+
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
1718
import 'package:immich_mobile/providers/app_life_cycle.provider.dart';
1819
import 'package:immich_mobile/providers/asset_viewer/share_intent_upload.provider.dart';
1920
import 'package:immich_mobile/providers/db.provider.dart';
@@ -41,7 +42,8 @@ import 'package:worker_manager/worker_manager.dart';
4142
void main() async {
4243
ImmichWidgetsBinding();
4344
final db = await Bootstrap.initIsar();
44-
await Bootstrap.initDomain(db);
45+
final logDb = DriftLogger();
46+
await Bootstrap.initDomain(db, logDb);
4547
await initApp();
4648
// Warm-up isolate pool for worker manager
4749
await workerManager.init(dynamicSpawning: true);

mobile/lib/services/background.service.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
1414
import 'package:immich_mobile/domain/models/store.model.dart';
1515
import 'package:immich_mobile/entities/backup_album.entity.dart';
1616
import 'package:immich_mobile/entities/store.entity.dart';
17+
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
1718
import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
1819
import 'package:immich_mobile/models/backup/current_upload_asset.model.dart';
1920
import 'package:immich_mobile/models/backup/error_upload_asset.model.dart';
@@ -331,7 +332,8 @@ class BackgroundService {
331332

332333
Future<bool> _onAssetsChanged() async {
333334
final db = await Bootstrap.initIsar();
334-
await Bootstrap.initDomain(db);
335+
final logDb = DriftLogger();
336+
await Bootstrap.initDomain(db, logDb);
335337

336338
final ref = ProviderContainer(overrides: [dbProvider.overrideWithValue(db), isarProvider.overrideWithValue(db)]);
337339

mobile/lib/services/backup_verification.service.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:immich_mobile/domain/services/user.service.dart';
1111
import 'package:immich_mobile/entities/asset.entity.dart';
1212
import 'package:immich_mobile/entities/store.entity.dart';
1313
import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart';
14+
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
1415
import 'package:immich_mobile/infrastructure/utils/exif.converter.dart';
1516
import 'package:immich_mobile/providers/infrastructure/exif.provider.dart';
1617
import 'package:immich_mobile/providers/infrastructure/user.provider.dart';
@@ -116,7 +117,8 @@ class BackupVerificationService {
116117
final List<Asset> result = [];
117118
BackgroundIsolateBinaryMessenger.ensureInitialized(tuple.rootIsolateToken);
118119
final db = await Bootstrap.initIsar();
119-
await Bootstrap.initDomain(db);
120+
final logDb = DriftLogger();
121+
await Bootstrap.initDomain(db, logDb);
120122
await tuple.fileMediaRepository.enableBackgroundAccess();
121123
final ApiService apiService = ApiService();
122124
apiService.setEndpoint(tuple.endpoint);

mobile/lib/utils/bootstrap.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,11 @@ abstract final class Bootstrap {
4747
);
4848
}
4949

50-
static Future<void> initDomain(Isar db, {bool shouldBufferLogs = true}) async {
51-
// load drift dbs
52-
final loggerDb = DriftLogger();
53-
50+
static Future<void> initDomain(Isar db, DriftLogger logDb, {bool shouldBufferLogs = true}) async {
5451
await StoreService.init(storeRepository: IsarStoreRepository(db));
5552

5653
await LogService.init(
57-
logRepository: LogRepository(loggerDb),
54+
logRepository: LogRepository(logDb),
5855
storeRepository: IsarStoreRepository(db),
5956
shouldBuffer: shouldBufferLogs,
6057
);

mobile/lib/utils/isolate.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
55
import 'package:flutter/services.dart';
66
import 'package:hooks_riverpod/hooks_riverpod.dart';
77
import 'package:immich_mobile/domain/services/log.service.dart';
8+
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
89
import 'package:immich_mobile/providers/db.provider.dart';
910
import 'package:immich_mobile/providers/infrastructure/cancel.provider.dart';
1011
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
@@ -35,7 +36,8 @@ Cancelable<T?> runInIsolateGentle<T>({
3536
DartPluginRegistrant.ensureInitialized();
3637

3738
final db = await Bootstrap.initIsar();
38-
await Bootstrap.initDomain(db, shouldBufferLogs: false);
39+
final logDb = DriftLogger();
40+
await Bootstrap.initDomain(db, logDb, shouldBufferLogs: false);
3941
final ref = ProviderContainer(
4042
overrides: [
4143
// TODO: Remove once isar is removed
@@ -57,6 +59,7 @@ Cancelable<T?> runInIsolateGentle<T>({
5759
} finally {
5860
try {
5961
await LogService.I.flush();
62+
await logDb.close();
6063
await ref.read(driftProvider).close();
6164

6265
// Close Isar safely

0 commit comments

Comments
 (0)