added sync mutex to ping messages

This commit is contained in:
zadam 2019-10-22 21:59:51 +02:00
parent 3de124748d
commit ec7c0f0723
5 changed files with 27 additions and 22 deletions

30
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "trilium", "name": "trilium",
"version": "0.36.0-beta", "version": "0.36.1-beta",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -4968,9 +4968,9 @@
} }
}, },
"file-type": { "file-type": {
"version": "12.3.0", "version": "12.3.1",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-12.3.0.tgz", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.3.1.tgz",
"integrity": "sha512-4E4Esq9KLwjYCY32E7qSmd0h7LefcniZHX+XcdJ4Wfx1uGJX7QCigiqw/U0yT7WOslm28yhxl87DJ0wHYv0RAA==" "integrity": "sha512-FXxY5h6vSYMjrRal4YqbtfuoKD/oE0AMjJ7E5Hm+BdaQECcFVD03B41RAWYJ7wyuLr/wRnCtFo7y37l+nh+TAA=="
}, },
"filename-regex": { "filename-regex": {
"version": "2.0.1", "version": "2.0.1",
@ -6003,9 +6003,9 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
}, },
"helmet": { "helmet": {
"version": "3.21.1", "version": "3.21.2",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.1.tgz", "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.2.tgz",
"integrity": "sha512-IC/54Lxvvad2YiUdgLmPlNFKLhNuG++waTF5KPYq/Feo3NNhqMFbcLAlbVkai+9q0+4uxjxGPJ9bNykG+3zZNg==", "integrity": "sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg==",
"requires": { "requires": {
"depd": "2.0.0", "depd": "2.0.0",
"dns-prefetch-control": "0.2.0", "dns-prefetch-control": "0.2.0",
@ -6014,7 +6014,7 @@
"feature-policy": "0.3.0", "feature-policy": "0.3.0",
"frameguard": "3.1.0", "frameguard": "3.1.0",
"helmet-crossdomain": "0.4.0", "helmet-crossdomain": "0.4.0",
"helmet-csp": "2.9.2", "helmet-csp": "2.9.4",
"hide-powered-by": "1.1.0", "hide-powered-by": "1.1.0",
"hpkp": "2.0.0", "hpkp": "2.0.0",
"hsts": "2.2.0", "hsts": "2.2.0",
@ -6037,11 +6037,11 @@
"integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
}, },
"helmet-csp": { "helmet-csp": {
"version": "2.9.2", "version": "2.9.4",
"resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.2.tgz", "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.4.tgz",
"integrity": "sha512-Lt5WqNfbNjEJ6ysD4UNpVktSyjEKfU9LVJ1LaFmPfYseg/xPealPfgHhtqdAdjPDopp5zbg/VWCyp4cluMIckw==", "integrity": "sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg==",
"requires": { "requires": {
"bowser": "^2.6.1", "bowser": "^2.7.0",
"camelize": "1.0.0", "camelize": "1.0.0",
"content-security-policy-builder": "2.1.0", "content-security-policy-builder": "2.1.0",
"dasherize": "2.0.0" "dasherize": "2.0.0"
@ -8646,9 +8646,9 @@
"integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
}, },
"node-abi": { "node-abi": {
"version": "2.11.0", "version": "2.12.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.12.0.tgz",
"integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==", "integrity": "sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw==",
"requires": { "requires": {
"semver": "^5.4.1" "semver": "^5.4.1"
}, },

View File

@ -37,9 +37,9 @@
"electron-window-state": "5.0.3", "electron-window-state": "5.0.3",
"express": "4.17.1", "express": "4.17.1",
"express-session": "1.17.0", "express-session": "1.17.0",
"file-type": "12.3.0", "file-type": "12.3.1",
"fs-extra": "8.1.0", "fs-extra": "8.1.0",
"helmet": "3.21.1", "helmet": "3.21.2",
"html": "1.0.0", "html": "1.0.0",
"html2plaintext": "2.1.2", "html2plaintext": "2.1.2",
"http-proxy-agent": "2.1.0", "http-proxy-agent": "2.1.0",
@ -54,7 +54,7 @@
"mime-types": "2.1.24", "mime-types": "2.1.24",
"moment": "2.24.0", "moment": "2.24.0",
"multer": "1.4.2", "multer": "1.4.2",
"node-abi": "2.11.0", "node-abi": "2.12.0",
"open": "7.0.0", "open": "7.0.0",
"pngjs": "3.4.0", "pngjs": "3.4.0",
"portscanner": "2.2.0", "portscanner": "2.2.0",

View File

@ -97,6 +97,8 @@ class TreeCache {
const missingNoteIds = noteIds.filter(noteId => this.notes[noteId] === undefined); const missingNoteIds = noteIds.filter(noteId => this.notes[noteId] === undefined);
if (missingNoteIds.length > 0) { if (missingNoteIds.length > 0) {
console.trace("Refreshing", missingNoteIds);
const resp = await server.post('tree/load', { noteIds: missingNoteIds }); const resp = await server.post('tree/load', { noteIds: missingNoteIds });
this.addResp(resp.notes, resp.branches, resp.relations); this.addResp(resp.notes, resp.branches, resp.relations);

View File

@ -32,17 +32,16 @@ class EditedNotesWidget extends StandardWidget {
return; return;
} }
const noteIds = editedNotes.flatMap(note => note.notePath); const noteIds = editedNotes.flatMap(note => note.noteId);
await treeCache.getNotes(noteIds, true); // preload all at once await treeCache.getNotes(noteIds, true); // preload all at once
const $list = $('<ul>'); const $list = $('<ul>');
for (const editedNote of editedNotes) { for (const editedNote of editedNotes) {
const note = await treeCache.getNote(editedNote.noteId, true);
const $item = $("<li>"); const $item = $("<li>");
if (!note) { if (editedNote.isDeleted) {
$item.append($("<i>").text(editedNote.title + " (deleted)")); $item.append($("<i>").text(editedNote.title + " (deleted)"));
} }
else { else {

View File

@ -2,8 +2,10 @@ const WebSocket = require('ws');
const utils = require('./utils'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const sql = require('./sql'); const sql = require('./sql');
const syncMutexService = require('./sync_mutex');
let webSocketServer; let webSocketServer;
let lastSyncId = 0;
function init(httpServer, sessionParser) { function init(httpServer, sessionParser) {
webSocketServer = new WebSocket.Server({ webSocketServer = new WebSocket.Server({
@ -27,11 +29,13 @@ function init(httpServer, sessionParser) {
ws.on('message', messageJson => { ws.on('message', messageJson => {
const message = JSON.parse(messageJson); const message = JSON.parse(messageJson);
lastSyncId = Math.max(lastSyncId, message.lastSyncId);
if (message.type === 'log-error') { if (message.type === 'log-error') {
log.error('JS Error: ' + message.error); log.error('JS Error: ' + message.error);
} }
else if (message.type === 'ping') { else if (message.type === 'ping') {
sendPing(ws, message.lastSyncId); syncMutexService.doExclusively(async () => await sendPing(ws, lastSyncId));
} }
else { else {
log.error('Unrecognized message: '); log.error('Unrecognized message: ');