LP#1768947 Ignore corrupt offline DB user/berick/lp1768947-ignore-offline-db-errors
authorBill Erickson <berickxx@gmail.com>
Thu, 7 Jun 2018 17:00:10 +0000 (13:00 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 7 Jun 2018 17:00:11 +0000 (13:00 -0400)
Instead of dying on page load when the offline DB fails to connect (e.g.
due to a duplicate key), log the error and allow the startup sequence to
complete.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/web/js/ui/default/staff/services/env.js
Open-ILS/web/js/ui/default/staff/services/lovefield.js
Open-ILS/web/js/ui/default/staff/services/org.js

index 1406a19..2c81e30 100644 (file)
@@ -135,9 +135,14 @@ function($q,  $window , $injector , egAuth,  egPCRUD,  egIDL) {
                 egLovefield = $injector.get('egLovefield');
             }
             //console.debug('About to cache a list of ' + class_ + ' objects...');
-            egLovefield.isCacheGood(class_).then(function(good) {
-                if (!good) egLovefield.setListInOfflineCache(class_, blob.list);
-            });
+            egLovefield.isCacheGood(class_).then(
+                function(good) {
+                    if (!good) egLovefield.setListInOfflineCache(class_, blob.list);
+                },
+                function() {
+                    console.error('offline DB needs to be reset');
+                }
+            );
         }
 
         angular.forEach(list, function(item) {blob.map[item[pkey]()] = item});
index d0cd9c1..f50d51b 100644 (file)
@@ -76,6 +76,7 @@ angular.module('egCoreMod')
                     // a connection will never succeed.
                     service.cannotConnect = true;
                     console.error('Cannot connect to offline DB: ' + err);
+                    deferred.reject();
                 }
             );
         } catch (e) {
@@ -83,6 +84,7 @@ angular.module('egCoreMod')
             // attempt is already in progress; this can happen with PhantomJS
             console.error('Cannot connect to offline DB: ' + e);
             service.cannotConnect = true;
+            deferred.reject();
         }
 
         service.connectPromise = deferred.promise;
index 93efc44..48bc00e 100644 (file)
@@ -153,11 +153,17 @@ function($q,  egEnv,  egAuth,  egNet , $injector) {
                 if (here) service.cachedSettings[key] = settings[key];
             });
 
-            return egLovefield.setSettingsCache(settings).then(function() {
-                // resolve with cached settings if 'here', since 'settings'
-                // will only contain settings we had to retrieve
-                deferred.resolve(here ? service.cachedSettings : settings);
-            });
+            return egLovefield.setSettingsCache(settings).then(
+                function() {
+                    // resolve with cached settings if 'here', since 'settings'
+                    // will only contain settings we had to retrieve
+                    deferred.resolve(here ? service.cachedSettings : settings);
+                },
+                function() {
+                    console.error('offline db is not OK. ignoring');
+                    deferred.resolve(here ? service.cachedSettings : settings);
+                }
+            );
         });
         return deferred.promise;
     }