diff --git a/mnemo_cards_backend/lib/main.dart b/mnemo_cards_backend/lib/main.dart index dde5ad7..6180cd0 100644 --- a/mnemo_cards_backend/lib/main.dart +++ b/mnemo_cards_backend/lib/main.dart @@ -26,6 +26,30 @@ late Isar isar; late final String WORK_DIR; + +Future _initIsar( + String dir, + bool debugMode, +) async { + var attempt = 0; + while (attempt < 5) { + print('Attempt $attempt to initialize Isar'); + try { + return isar = await IsarConnector().connect( + dir: dir, + name: 'db', + inspector: debugMode, + ); + } catch (e, s) { + print('Error initializing Isar: $e'); + log('Error initializing Isar: $e', error: e, stackTrace: s); + } + await Future.delayed(Duration(seconds: attempt * 10)); + attempt++; + } + throw Exception('Failed to initialize Isar'); +} + void main() async { // WidgetsFlutterBinding.ensureInitialized(); // final dir = (await getApplicationDocumentsDirectory()).path; @@ -61,13 +85,9 @@ void main() async { // await Isar.initializeIsarCore(download: true); final debugMode = Platform.environment['DEBUG'] == 'true' || Platform.environment['DEBUG'] == '1'; - - isar = await IsarConnector().connect( - dir: dir, - name: 'db', - inspector: debugMode, - ); - getIt.registerSingleton(isar); + + _initIsar(dir, debugMode).then((isar) async { + getIt.registerSingleton(isar); configureDependencies(); await getIt().initV2(); @@ -85,9 +105,15 @@ void main() async { TasksSeederTask(), ]).init(); + }); ProcessSignal.sigterm.watch().listen((signal) async { - await isar.close(); + try { + await isar.close(); + } catch (e, s) { + log('Error closing Isar: $e', error: e, stackTrace: s); + print('Error closing Isar: $e'); + } exit(0); }); }