implementation of forcing full (re)sync

This commit is contained in:
azivner 2017-12-13 23:03:48 -05:00
parent e6686c4b32
commit b0cbe91784
8 changed files with 56 additions and 38 deletions

View File

@ -149,5 +149,17 @@ settings.addModule((async function () {
buildRevisionEl.html(appInfo.build_revision);
buildRevisionEl.attr('href', 'https://github.com/zadam/trilium/commit/' + appInfo.build_revision);
return {};
})());
settings.addModule((async function () {
const forceFullSyncButton = $("#force-full-sync-button");
forceFullSyncButton.click(async () => {
await server.post('sync/force-full-sync');
showMessage("Full sync triggered");
});
return {};
})());

View File

@ -20,6 +20,18 @@ router.post('/now', auth.checkApiAuth, async (req, res, next) => {
res.send(await sync.sync());
});
router.post('/force-full-sync', auth.checkApiAuth, async (req, res, next) => {
await sql.doInTransaction(async () => {
await options.setOption('last_synced_pull', 0);
await options.setOption('last_synced_push', 0);
});
// not awaiting for the job to finish (will probably take a long time)
sync.sync();
res.send({});
});
router.get('/changed', auth.checkApiAuth, async (req, res, next) => {
const lastSyncId = parseInt(req.query.lastSyncId);

View File

@ -3,7 +3,7 @@ const source_id = require('./source_id');
const utils = require('./utils');
const messaging = require('./messaging');
const options = require('./options');
const sync = require('./sync');
const sync_setup = require('./sync_setup');
let startTime = utils.nowDate();
let sentSyncId = [];
@ -35,7 +35,7 @@ async function sendPing() {
messaging.sendMessage({
type: 'sync',
data: data,
changesToPushCount: sync.isSyncSetup ? changesToPushCount : 0
changesToPushCount: sync_setup.isSyncSetup ? changesToPushCount : 0
});
for (const syncId of syncIds) {

View File

@ -5,7 +5,6 @@ const rp = require('request-promise');
const sql = require('./sql');
const options = require('./options');
const utils = require('./utils');
const config = require('./config');
const source_id = require('./source_id');
const notes = require('./notes');
const syncUpdate = require('./sync_update');
@ -14,11 +13,7 @@ const event_log = require('./event_log');
const fs = require('fs');
const app_info = require('./app_info');
const messaging = require('./messaging');
const SYNC_SERVER = config['Sync']['syncServerHost'];
const isSyncSetup = !!SYNC_SERVER;
const SYNC_TIMEOUT = config['Sync']['syncServerTimeout'] || 5000;
const SYNC_PROXY = config['Sync']['syncProxy'];
const sync_setup = require('./sync_setup');
let syncInProgress = false;
let proxyToggle = true;
@ -278,7 +273,7 @@ async function checkContentHash(syncContext) {
}
async function syncRequest(syncContext, method, uri, body) {
const fullUri = SYNC_SERVER + uri;
const fullUri = sync_setup.SYNC_SERVER + uri;
try {
const options = {
@ -287,15 +282,15 @@ async function syncRequest(syncContext, method, uri, body) {
jar: syncContext.cookieJar,
json: true,
body: body,
timeout: SYNC_TIMEOUT
timeout: sync_setup.SYNC_TIMEOUT
};
if (syncServerCertificate) {
options.ca = syncServerCertificate;
}
if (SYNC_PROXY && proxyToggle) {
options.proxy = SYNC_PROXY;
if (sync_setup.SYNC_PROXY && proxyToggle) {
options.proxy = sync_setup.SYNC_PROXY;
}
return await rp(options);
@ -306,19 +301,17 @@ async function syncRequest(syncContext, method, uri, body) {
}
sql.dbReady.then(() => {
if (isSyncSetup) {
log.info("Setting up sync to " + SYNC_SERVER + " with timeout " + SYNC_TIMEOUT);
if (sync_setup.isSyncSetup) {
log.info("Setting up sync to " + sync_setup.SYNC_SERVER + " with timeout " + sync_setup.SYNC_TIMEOUT);
if (SYNC_PROXY) {
log.info("Sync proxy: " + SYNC_PROXY);
if (sync_setup.SYNC_PROXY) {
log.info("Sync proxy: " + sync_setup.SYNC_PROXY);
}
const syncCertPath = config['Sync']['syncServerCertificate'];
if (sync_setup.SYNC_CERT_PATH) {
log.info('Sync certificate: ' + sync_setup.SYNC_CERT_PATH);
if (syncCertPath) {
log.info('Sync certificate: ' + syncCertPath);
syncServerCertificate = fs.readFileSync(syncCertPath);
syncServerCertificate = fs.readFileSync(sync_setup.SYNC_CERT_PATH);
}
setInterval(sync, 60000);
@ -332,6 +325,5 @@ sql.dbReady.then(() => {
});
module.exports = {
sync,
isSyncSetup
sync
};

11
services/sync_setup.js Normal file
View File

@ -0,0 +1,11 @@
"use strict";
const config = require('./config');
module.exports = {
SYNC_SERVER: config['Sync']['syncServerHost'],
isSyncSetup: !!config['Sync']['syncServerHost'],
SYNC_TIMEOUT: config['Sync']['syncServerTimeout'] || 5000,
SYNC_PROXY: config['Sync']['syncProxy'],
SYNC_CERT_PATH: config['Sync']['syncServerCertificate']
};

View File

@ -1,7 +1,7 @@
const sql = require('./sql');
const source_id = require('./source_id');
const utils = require('./utils');
const sync = require('./sync');
const sync_setup = require('./sync_setup');
async function addNoteSync(noteId, sourceId) {
await addEntitySync("notes", noteId, sourceId)
@ -28,7 +28,7 @@ async function addRecentNoteSync(notePath, sourceId) {
}
async function addEntitySync(entityName, entityId, sourceId) {
if (sync.isSyncSetup) {
if (sync_setup.isSyncSetup) {
await sql.replace("sync", {
entity_name: entityName,
entity_id: entityId,

View File

@ -1,7 +1,6 @@
const sql = require('./sql');
const log = require('./log');
const options = require('./options');
const utils = require('./utils');
const eventLog = require('./event_log');
const notes = require('./notes');
const sync_table = require('./sync_table');
@ -19,9 +18,6 @@ async function updateNote(entity, sourceId) {
log.info("Update/sync note " + entity.note_id);
}
else {
await eventLog.addNoteEvent(entity.note_id, "Sync conflict in note <note>, " + utils.formatTwoDates(origNote.date_modified, entity.date_modified));
}
}
async function updateNoteTree(entity, sourceId) {
@ -37,9 +33,6 @@ async function updateNoteTree(entity, sourceId) {
log.info("Update/sync note tree " + entity.note_tree_id);
}
else {
await eventLog.addNoteEvent(entity.note_tree_id, "Sync conflict in note tree <note>, " + utils.formatTwoDates(orig.date_modified, entity.date_modified));
}
});
}
@ -54,9 +47,6 @@ async function updateNoteHistory(entity, sourceId) {
log.info("Update/sync note history " + entity.note_history_id);
}
else {
await eventLog.addNoteEvent(entity.note_id, "Sync conflict in note history for <note>, " + utils.formatTwoDates(orig.date_modified_to, entity.date_modified_to));
}
});
}
@ -85,9 +75,6 @@ async function updateOptions(entity, sourceId) {
await eventLog.addEvent("Synced option " + entity.opt_name);
}
else {
await eventLog.addEvent("Sync conflict in options for " + entity.opt_name + ", " + utils.formatTwoDates(orig.date_modified, entity.date_modified));
}
});
}

View File

@ -165,6 +165,7 @@
<li><a href="#change-password">Change password</a></li>
<li><a href="#protected-session-timeout">Protected session</a></li>
<li><a href="#history-snapshot-time-interval">History snapshots</a></li>
<li><a href="#sync">Sync</a></li>
<li><a href="#about">About Trilium</a></li>
</ul>
<div id="change-password">
@ -212,6 +213,9 @@
<button class="btn btn-sm">Save</button>
</form>
</div>
<div id="sync">
<button id="force-full-sync-button" class="btn btn-sm">Force full sync</button>
</div>
<div id="about">
<table class="table">
<tr>