From 2bc614633ebe3c0de7581c8fde661fc1d1ff3401 Mon Sep 17 00:00:00 2001 From: Jed Fox <git@jedfox.com> Date: Tue, 21 Feb 2023 13:27:28 -0500 Subject: [PATCH] Log more debugging information for an invalid-schema sync error (#671) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Provide more debugging information when throwing an invalid-schema sync error * Don’t log the errors directly * Update dynamic cell warning to be clearer * rebuild --- .../loot-core/src/client/shared-listeners.js | 3 +++ .../src/server/spreadsheet/spreadsheet.js | 2 +- packages/loot-core/src/server/sync/index.js | 17 ++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/loot-core/src/client/shared-listeners.js b/packages/loot-core/src/client/shared-listeners.js index 766189bb7..55b393a13 100644 --- a/packages/loot-core/src/client/shared-listeners.js +++ b/packages/loot-core/src/client/shared-listeners.js @@ -227,6 +227,7 @@ export function listenForSyncEvent(actions, store) { } break; case 'invalid-schema': + console.trace('invalid-schema', meta); notif = { title: 'Update required', message: @@ -236,6 +237,7 @@ export function listenForSyncEvent(actions, store) { }; break; case 'apply-failure': + console.trace('apply-failure', meta); notif = { message: `We couldn't apply that change to the database. Please report this as a bug by [opening a Github issue](${githubIssueLink}).`, }; @@ -245,6 +247,7 @@ export function listenForSyncEvent(actions, store) { // Show nothing break; default: + console.trace('unkown error', info); notif = { message: `We had problems syncing your changes. Please report this as a bug by [opening a Github issue](${githubIssueLink}).`, }; diff --git a/packages/loot-core/src/server/spreadsheet/spreadsheet.js b/packages/loot-core/src/server/spreadsheet/spreadsheet.js index eda4175be..6873d1b9a 100644 --- a/packages/loot-core/src/server/spreadsheet/spreadsheet.js +++ b/packages/loot-core/src/server/spreadsheet/spreadsheet.js @@ -133,7 +133,7 @@ export default class Spreadsheet { if (result instanceof Promise) { console.warn( - 'dynamic cell returned a promise! this is discouraged because errors are not handled properly', + `dynamic cell ${name} returned a promise! this is discouraged because errors are not handled properly`, ); } } else if (node.sql) { diff --git a/packages/loot-core/src/server/sync/index.js b/packages/loot-core/src/server/sync/index.js index 5805ece55..5343a23dd 100644 --- a/packages/loot-core/src/server/sync/index.js +++ b/packages/loot-core/src/server/sync/index.js @@ -75,8 +75,8 @@ function apply(msg, prev) { if (dataset === 'prefs') { // Do nothing, it doesn't exist in the db } else { + let query; try { - let query; if (prev) { query = { sql: db.cache(`UPDATE ${dataset} SET ${column} = ? WHERE id = ?`), @@ -90,9 +90,11 @@ function apply(msg, prev) { } db.runQuery(query.sql, query.params); - } catch (e) { - //console.log(e); - throw new SyncError('invalid-schema'); + } catch (error) { + throw new SyncError('invalid-schema', { + error: { message: error.message, stack: error.stack }, + query, + }); } } } @@ -128,8 +130,8 @@ async function fetchAll(table, ids) { try { let rows = await db.runQuery(sql, partIds, true); results = results.concat(rows); - } catch (e) { - throw new SyncError('invalid-schema'); + } catch (error) { + throw new SyncError('invalid-schema', { error, sql, params: partIds }); } } @@ -415,9 +417,10 @@ async function _sendMessages(messages) { app.events.emit('sync', { type: 'error', subtype: 'apply-failure', + meta: e.meta, }); } else { - app.events.emit('sync', { type: 'error' }); + app.events.emit('sync', { type: 'error', meta: e.meta }); } } -- GitLab