cleanup of entity changes processing

This commit is contained in:
zadam 2021-06-30 20:54:15 +02:00
parent 5be7f003ca
commit 2035304b63
7 changed files with 32 additions and 44 deletions

View File

@ -217,7 +217,7 @@ class Note extends AbstractEntity {
isErased: false, isErased: false,
utcDateChanged: pojo.utcDateModified, utcDateChanged: pojo.utcDateModified,
isSynced: true isSynced: true
}, null); });
} }
setJsonContent(content) { setJsonContent(content) {

View File

@ -133,7 +133,7 @@ class NoteRevision extends AbstractEntity {
isErased: false, isErased: false,
utcDateChanged: this.getUtcDateChanged(), utcDateChanged: this.getUtcDateChanged(),
isSynced: true isSynced: true
}, null); });
} }
beforeSaving() { beforeSaving() {

View File

@ -170,10 +170,10 @@ function update(req) {
} }
} }
const {sourceId, entities} = body; const {entities} = body;
for (const {entityChange, entity} of entities) { for (const {entityChange, entity} of entities) {
syncUpdateService.updateEntity(entityChange, entity, sourceId); syncUpdateService.updateEntity(entityChange, entity);
} }
} }

View File

@ -307,8 +307,9 @@ class ConsistencyChecks {
entityId: noteId, entityId: noteId,
hash: hash, hash: hash,
isErased: false, isErased: false,
utcDateChanged: utcDateModified utcDateChanged: utcDateModified,
}, null); isSynced: true
});
} }
else { else {
// empty string might be wrong choice for some note types but it's a best guess // empty string might be wrong choice for some note types but it's a best guess
@ -466,7 +467,7 @@ class ConsistencyChecks {
LEFT JOIN entity_changes ON entity_changes.entityName = '${entityName}' LEFT JOIN entity_changes ON entity_changes.entityName = '${entityName}'
AND entity_changes.entityId = ${key} AND entity_changes.entityId = ${key}
WHERE WHERE
entity_changes.id IS NULL AND ` + (entityName === 'options' ? 'options.isSynced = 1' : '1'), entity_changes.id IS NULL`,
({entityId}) => { ({entityId}) => {
if (this.autoFix) { if (this.autoFix) {
const entity = becca.getEntity(entityName, entityId); const entity = becca.getEntity(entityName, entityId);
@ -476,8 +477,9 @@ class ConsistencyChecks {
entityId, entityId,
hash: entity.generateHash(), hash: entity.generateHash(),
isErased: false, isErased: false,
utcDateChanged: entity.getUtcDateChanged() utcDateChanged: entity.getUtcDateChanged(),
}, null); isSynced: entityName !== 'options' || entity.isSynced
});
logFix(`Created missing entity change for entityName=${entityName}, entityId=${entityId}`); logFix(`Created missing entity change for entityName=${entityName}, entityId=${entityId}`);
} else { } else {

View File

@ -7,28 +7,15 @@ const becca = require("../becca/becca");
let maxEntityChangeId = 0; let maxEntityChangeId = 0;
function insertEntityChange(entityName, entityId, hash, isErased, utcDateChanged, sourceId = null, isSynced = true) { function addEntityChange(entityChange) {
const entityChange = { entityChange.sourceId = entityChange.sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId();
entityName: entityName, entityChange.isSynced = entityChange.isSynced ? 1 : 0;
entityId: entityId, entityChange.isErased = entityChange.isErased ? 1 : 0;
hash: hash,
sourceId: sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(),
isSynced: isSynced ? 1 : 0,
isErased: isErased ? 1 : 0,
utcDateChanged: utcDateChanged
};
entityChange.id = sql.replace("entity_changes", entityChange); entityChange.id = sql.replace("entity_changes", entityChange);
maxEntityChangeId = Math.max(maxEntityChangeId, entityChange.id); maxEntityChangeId = Math.max(maxEntityChangeId, entityChange.id);
return entityChange; cls.addEntityChange(entityChange);
}
function addEntityChange(entityChange, sourceId) {
const localEntityChange = insertEntityChange(entityChange.entityName, entityChange.entityId, entityChange.hash, entityChange.isErased, entityChange.utcDateChanged, sourceId, entityChange.isSynced);
cls.addEntityChange(localEntityChange);
} }
function addNoteReorderingEntityChange(parentNoteId, sourceId) { function addNoteReorderingEntityChange(parentNoteId, sourceId) {
@ -38,8 +25,9 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) {
hash: 'N/A', hash: 'N/A',
isErased: false, isErased: false,
utcDateChanged: dateUtils.utcNowDateTime(), utcDateChanged: dateUtils.utcNowDateTime(),
isSynced: true isSynced: true,
}, sourceId); sourceId
});
const eventService = require('./events'); const eventService = require('./events');
@ -52,9 +40,7 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) {
function moveEntityChangeToTop(entityName, entityId) { function moveEntityChangeToTop(entityName, entityId) {
const ec = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [entityName, entityId]); const ec = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [entityName, entityId]);
const localEntityChange = insertEntityChange(entityName, entityId, ec.hash, ec.isErased, ec.utcDateChanged, ec.sourceId, ec.isSynced); addEntityChange(ec);
cls.addEntityChange(localEntityChange);
} }
function addEntityChangesForSector(entityName, sector) { function addEntityChangesForSector(entityName, sector) {
@ -64,7 +50,7 @@ function addEntityChangesForSector(entityName, sector) {
sql.transactional(() => { sql.transactional(() => {
for (const ec of entityChanges) { for (const ec of entityChanges) {
insertEntityChange(entityName, ec.entityId, ec.hash, ec.isErased, ec.utcDateChanged, ec.sourceId, ec.isSynced); addEntityChange(ec);
} }
}); });
@ -107,7 +93,7 @@ function fillEntityChanges(entityName, entityPrimaryKey, condition = '') {
isErased: false, isErased: false,
utcDateChanged: entity.getUtcDateChanged(), utcDateChanged: entity.getUtcDateChanged(),
isSynced: entityName !== 'options' || !!entity.isSynced isSynced: entityName !== 'options' || !!entity.isSynced
}, null); });
} }
} }

View File

@ -156,7 +156,7 @@ async function pullChanges(syncContext) {
atLeastOnePullApplied = true; atLeastOnePullApplied = true;
} }
syncUpdateService.updateEntity(entityChange, entity, syncContext.sourceId); syncUpdateService.updateEntity(entityChange, entity);
} }
outstandingPullCount = Math.max(0, resp.maxEntityChangeId - entityChange.id); outstandingPullCount = Math.max(0, resp.maxEntityChangeId - entityChange.id);

View File

@ -4,12 +4,12 @@ const entityChangesService = require('./entity_changes');
const eventService = require('./events'); const eventService = require('./events');
const entityConstructor = require("../becca/entity_constructor"); const entityConstructor = require("../becca/entity_constructor");
function updateEntity(entityChange, entity, sourceId) { function updateEntity(entityChange, entity) {
// can be undefined for options with isSynced=false // can be undefined for options with isSynced=false
if (!entity) { if (!entity) {
if (entityChange.isSynced) { if (entityChange.isSynced) {
if (entityChange.isErased) { if (entityChange.isErased) {
entityChangesService.addEntityChange(entityChange, sourceId); entityChangesService.addEntityChange(entityChange);
} }
else { else {
log.info(`Encountered synced non-erased entity change without entity: ${JSON.stringify(entityChange)}`); log.info(`Encountered synced non-erased entity change without entity: ${JSON.stringify(entityChange)}`);
@ -23,8 +23,8 @@ function updateEntity(entityChange, entity, sourceId) {
} }
const updated = entityChange.entityName === 'note_reordering' const updated = entityChange.entityName === 'note_reordering'
? updateNoteReordering(entityChange, entity, sourceId) ? updateNoteReordering(entityChange, entity)
: updateNormalEntity(entityChange, entity, sourceId); : updateNormalEntity(entityChange, entity);
if (updated && !entityChange.isErased) { if (updated && !entityChange.isErased) {
if (entity.isDeleted) { if (entity.isDeleted) {
@ -42,7 +42,7 @@ function updateEntity(entityChange, entity, sourceId) {
} }
} }
function updateNormalEntity(remoteEntityChange, entity, sourceId) { function updateNormalEntity(remoteEntityChange, entity) {
const localEntityChange = sql.getRow(` const localEntityChange = sql.getRow(`
SELECT utcDateChanged, hash, isErased SELECT utcDateChanged, hash, isErased
FROM entity_changes FROM entity_changes
@ -54,7 +54,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
sql.execute(`DELETE FROM ${remoteEntityChange.entityName} WHERE ${primaryKey} = ?`, remoteEntityChange.entityId); sql.execute(`DELETE FROM ${remoteEntityChange.entityName} WHERE ${primaryKey} = ?`, remoteEntityChange.entityId);
entityChangesService.addEntityChange(remoteEntityChange, sourceId); entityChangesService.addEntityChange(remoteEntityChange);
}); });
return true; return true;
@ -71,7 +71,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
sql.transactional(() => { sql.transactional(() => {
sql.replace(remoteEntityChange.entityName, entity); sql.replace(remoteEntityChange.entityName, entity);
entityChangesService.addEntityChange(remoteEntityChange, sourceId); entityChangesService.addEntityChange(remoteEntityChange);
}); });
return true; return true;
@ -80,13 +80,13 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
return false; return false;
} }
function updateNoteReordering(entityChange, entity, sourceId) { function updateNoteReordering(entityChange, entity) {
sql.transactional(() => { sql.transactional(() => {
for (const key in entity) { for (const key in entity) {
sql.execute("UPDATE branches SET notePosition = ? WHERE branchId = ?", [entity[key], key]); sql.execute("UPDATE branches SET notePosition = ? WHERE branchId = ?", [entity[key], key]);
} }
entityChangesService.addEntityChange(entityChange, sourceId); entityChangesService.addEntityChange(entityChange);
}); });
return true; return true;