Răsfoiți Sursa

Добавлено пересоздание поисковой БД при обнаружении повреждений

Book Pauk 2 ani în urmă
părinte
comite
21ec7df1e7
1 a modificat fișierele cu 19 adăugiri și 9 ștergeri
  1. 19 9
      server/core/WebWorker.js

+ 19 - 9
server/core/WebWorker.js

@@ -132,7 +132,7 @@ class WebWorker {
         }
         }
     }
     }
 
 
-    async loadOrCreateDb(recreate = false) {
+    async loadOrCreateDb(recreate = false, iteration = 0) {
         this.setMyState(ssDbLoading);
         this.setMyState(ssDbLoading);
 
 
         try {
         try {
@@ -187,14 +187,24 @@ class WebWorker {
                 },
                 },
             });
             });
 
 
-            //открываем таблицы
-            await db.openAll({exclude: ['author_id', 'series_id', 'title_id', 'book']});
-
-            const bookCacheSize = 500;
-            await db.open({
-                table: 'book',
-                cacheSize: (config.lowMemoryMode || config.dbCacheSize > bookCacheSize ? config.dbCacheSize : bookCacheSize)
-            });
+            try {
+                //открываем таблицы
+                await db.openAll({exclude: ['author_id', 'series_id', 'title_id', 'book']});
+
+                const bookCacheSize = 500;
+                await db.open({
+                    table: 'book',
+                    cacheSize: (config.lowMemoryMode || config.dbCacheSize > bookCacheSize ? config.dbCacheSize : bookCacheSize)
+                });
+            } catch(e) {
+                log(LM_ERR, `Database error: ${e.message}`);
+                if (iteration < 1) {
+                    log('Recreating DB');
+                    await this.loadOrCreateDb(true, iteration + 1);
+                } else
+                    throw e;
+                return;
+            }
 
 
             //поисковый движок
             //поисковый движок
             this.dbSearcher = new DbSearcher(config, db);
             this.dbSearcher = new DbSearcher(config, db);