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,
utcDateChanged: pojo.utcDateModified,
isSynced: true
}, null);
});
}
setJsonContent(content) {

View File

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

View File

@ -170,10 +170,10 @@ function update(req) {
}
}
const {sourceId, entities} = body;
const {entities} = body;
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,
hash: hash,
isErased: false,
utcDateChanged: utcDateModified
}, null);
utcDateChanged: utcDateModified,
isSynced: true
});
}
else {
// 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}'
AND entity_changes.entityId = ${key}
WHERE
entity_changes.id IS NULL AND ` + (entityName === 'options' ? 'options.isSynced = 1' : '1'),
entity_changes.id IS NULL`,
({entityId}) => {
if (this.autoFix) {
const entity = becca.getEntity(entityName, entityId);
@ -476,8 +477,9 @@ class ConsistencyChecks {
entityId,
hash: entity.generateHash(),
isErased: false,
utcDateChanged: entity.getUtcDateChanged()
}, null);
utcDateChanged: entity.getUtcDateChanged(),
isSynced: entityName !== 'options' || entity.isSynced
});
logFix(`Created missing entity change for entityName=${entityName}, entityId=${entityId}`);
} else {

View File

@ -7,28 +7,15 @@ const becca = require("../becca/becca");
let maxEntityChangeId = 0;
function insertEntityChange(entityName, entityId, hash, isErased, utcDateChanged, sourceId = null, isSynced = true) {
const entityChange = {
entityName: entityName,
entityId: entityId,
hash: hash,
sourceId: sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(),
isSynced: isSynced ? 1 : 0,
isErased: isErased ? 1 : 0,
utcDateChanged: utcDateChanged
};
function addEntityChange(entityChange) {
entityChange.sourceId = entityChange.sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId();
entityChange.isSynced = entityChange.isSynced ? 1 : 0;
entityChange.isErased = entityChange.isErased ? 1 : 0;
entityChange.id = sql.replace("entity_changes", entityChange);
maxEntityChangeId = Math.max(maxEntityChangeId, entityChange.id);
return entityChange;
}
function addEntityChange(entityChange, sourceId) {
const localEntityChange = insertEntityChange(entityChange.entityName, entityChange.entityId, entityChange.hash, entityChange.isErased, entityChange.utcDateChanged, sourceId, entityChange.isSynced);
cls.addEntityChange(localEntityChange);
cls.addEntityChange(entityChange);
}
function addNoteReorderingEntityChange(parentNoteId, sourceId) {
@ -38,8 +25,9 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) {
hash: 'N/A',
isErased: false,
utcDateChanged: dateUtils.utcNowDateTime(),
isSynced: true
}, sourceId);
isSynced: true,
sourceId
});
const eventService = require('./events');
@ -52,9 +40,7 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) {
function moveEntityChangeToTop(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);
cls.addEntityChange(localEntityChange);
addEntityChange(ec);
}
function addEntityChangesForSector(entityName, sector) {
@ -64,7 +50,7 @@ function addEntityChangesForSector(entityName, sector) {
sql.transactional(() => {
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,
utcDateChanged: entity.getUtcDateChanged(),
isSynced: entityName !== 'options' || !!entity.isSynced
}, null);
});
}
}

View File

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

View File

@ -4,12 +4,12 @@ const entityChangesService = require('./entity_changes');
const eventService = require('./events');
const entityConstructor = require("../becca/entity_constructor");
function updateEntity(entityChange, entity, sourceId) {
function updateEntity(entityChange, entity) {
// can be undefined for options with isSynced=false
if (!entity) {
if (entityChange.isSynced) {
if (entityChange.isErased) {
entityChangesService.addEntityChange(entityChange, sourceId);
entityChangesService.addEntityChange(entityChange);
}
else {
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'
? updateNoteReordering(entityChange, entity, sourceId)
: updateNormalEntity(entityChange, entity, sourceId);
? updateNoteReordering(entityChange, entity)
: updateNormalEntity(entityChange, entity);
if (updated && !entityChange.isErased) {
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(`
SELECT utcDateChanged, hash, isErased
FROM entity_changes
@ -54,7 +54,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
sql.execute(`DELETE FROM ${remoteEntityChange.entityName} WHERE ${primaryKey} = ?`, remoteEntityChange.entityId);
entityChangesService.addEntityChange(remoteEntityChange, sourceId);
entityChangesService.addEntityChange(remoteEntityChange);
});
return true;
@ -71,7 +71,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
sql.transactional(() => {
sql.replace(remoteEntityChange.entityName, entity);
entityChangesService.addEntityChange(remoteEntityChange, sourceId);
entityChangesService.addEntityChange(remoteEntityChange);
});
return true;
@ -80,13 +80,13 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) {
return false;
}
function updateNoteReordering(entityChange, entity, sourceId) {
function updateNoteReordering(entityChange, entity) {
sql.transactional(() => {
for (const key in entity) {
sql.execute("UPDATE branches SET notePosition = ? WHERE branchId = ?", [entity[key], key]);
}
entityChangesService.addEntityChange(entityChange, sourceId);
entityChangesService.addEntityChange(entityChange);
});
return true;