added changeId into entity_changes to have cross-sync change ID

This commit is contained in:
zadam 2021-11-18 22:33:08 +01:00
parent 15ac81627c
commit e36bc42519
6 changed files with 34 additions and 10 deletions

View File

@ -0,0 +1,23 @@
CREATE TABLE IF NOT EXISTS "mig_entity_changes" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`hash` TEXT NOT NULL,
`isErased` INT NOT NULL,
`changeId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER NOT NULL,
`utcDateChanged` TEXT NOT NULL
);
INSERT INTO mig_entity_changes (entityName, entityId, hash, isErased, changeId, sourceId, isSynced, utcDateChanged)
SELECT entityName, entityId, hash, isErased, '', sourceId, isSynced, utcDateChanged FROM entity_changes;
DROP TABLE entity_changes;
ALTER TABLE mig_entity_changes RENAME TO entity_changes;
CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" (
`entityName`,
`entityId`
);

View File

@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS "entity_changes" (
`entityId` TEXT NOT NULL, `entityId` TEXT NOT NULL,
`hash` TEXT NOT NULL, `hash` TEXT NOT NULL,
`isErased` INT NOT NULL, `isErased` INT NOT NULL,
`changeId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL, `sourceId` TEXT NOT NULL,
`isSynced` INTEGER NOT NULL, `isSynced` INTEGER NOT NULL,
`utcDateChanged` TEXT NOT NULL `utcDateChanged` TEXT NOT NULL

View File

@ -4,7 +4,7 @@ const build = require('./build');
const packageJson = require('../../package'); const packageJson = require('../../package');
const {TRILIUM_DATA_DIR} = require('./data_dir'); const {TRILIUM_DATA_DIR} = require('./data_dir');
const APP_DB_VERSION = 186; const APP_DB_VERSION = 187;
const SYNC_VERSION = 21; const SYNC_VERSION = 21;
const CLIPPER_PROTOCOL_VERSION = "1.0"; const CLIPPER_PROTOCOL_VERSION = "1.0";

View File

@ -44,14 +44,10 @@ function isEntityEventsDisabled() {
return !!namespace.get('disableEntityEvents'); return !!namespace.get('disableEntityEvents');
} }
function clearEntityChangeIds() {
namespace.set('entityChangeIds', []);
}
function getAndClearEntityChangeIds() { function getAndClearEntityChangeIds() {
const entityChangeIds = namespace.get('entityChangeIds') || []; const entityChangeIds = namespace.get('entityChangeIds') || [];
clearEntityChangeIds(); namespace.set('entityChangeIds', []);
return entityChangeIds; return entityChangeIds;
} }
@ -89,7 +85,6 @@ module.exports = {
disableEntityEvents, disableEntityEvents,
isEntityEventsDisabled, isEntityEventsDisabled,
reset, reset,
clearEntityChangeIds,
getAndClearEntityChangeIds, getAndClearEntityChangeIds,
addEntityChange, addEntityChange,
ignoreEntityChangeIds ignoreEntityChangeIds

View File

@ -3,6 +3,7 @@ const sourceIdService = require('./source_id');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const log = require('./log'); const log = require('./log');
const cls = require('./cls'); const cls = require('./cls');
const utils = require('./utils');
const becca = require("../becca/becca"); const becca = require("../becca/becca");
let maxEntityChangeId = 0; let maxEntityChangeId = 0;
@ -12,6 +13,10 @@ function addEntityChange(origEntityChange) {
delete ec.id; delete ec.id;
if (!ec.changeId) {
ec.changeId = utils.randomString(12);
}
ec.sourceId = ec.sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(); ec.sourceId = ec.sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId();
ec.isSynced = ec.isSynced ? 1 : 0; ec.isSynced = ec.isSynced ? 1 : 0;
ec.isErased = ec.isErased ? 1 : 0; ec.isErased = ec.isErased ? 1 : 0;

View File

@ -149,10 +149,10 @@ async function pullChanges(syncContext) {
sql.transactional(() => { sql.transactional(() => {
for (const {entityChange, entity} of entityChanges) { for (const {entityChange, entity} of entityChanges) {
// FIXME: temporary fix const changeAppliedAlready = !entityChange.changeId
const existsAlready = !!sql.getValue("SELECT id FROM entity_changes WHERE entityName = ? AND entityId = ? AND utcDateChanged = ? AND hash = ?", [entityChange.entityName, entityChange.entityId, entityChange.utcDateChanged, entityChange.hash]); || !!sql.getValue("SELECT id FROM entity_changes WHERE changeId = ?", [entityChange.changeId]);
if (!existsAlready && !sourceIdService.isLocalSourceId(entityChange.sourceId)) { if (!changeAppliedAlready && !sourceIdService.isLocalSourceId(entityChange.sourceId)) {
if (!atLeastOnePullApplied) { // send only for first if (!atLeastOnePullApplied) { // send only for first
ws.syncPullInProgress(); ws.syncPullInProgress();