只有makeSure的volatile trigger写入跨事务属性

This commit is contained in:
Xu Chang 2023-12-15 18:39:12 +08:00
parent b454040e2e
commit 528165a713
2 changed files with 68 additions and 78 deletions

View File

@ -429,6 +429,7 @@ class TriggerExecutor {
} }
async checkpoint(timestamp) { async checkpoint(timestamp) {
let result = 0; let result = 0;
console.log('checkpoint start', this.volatileEntities.join(','));
for (const entity of this.volatileEntities) { for (const entity of this.volatileEntities) {
const filter = { const filter = {
[Entity_1.TriggerUuidAttribute]: { [Entity_1.TriggerUuidAttribute]: {
@ -474,6 +475,7 @@ class TriggerExecutor {
this.logger.error(`执行checkpoint时出错对象是「${entity}」,异常是`, err); this.logger.error(`执行checkpoint时出错对象是「${entity}」,异常是`, err);
} }
} }
console.log('checkpoint end');
return result; return result;
} }
} }

View File

@ -204,6 +204,7 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends
) { ) {
assert(trigger.action !== 'select'); assert(trigger.action !== 'select');
assert(trigger.when === 'commit'); assert(trigger.when === 'commit');
if (trigger.strict === 'makeSure') {
const uuid = await generateNewIdAsync(); const uuid = await generateNewIdAsync();
const cxtStr = context.toString(); const cxtStr = context.toString();
const { data } = operation; const { data } = operation;
@ -269,6 +270,7 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends
}); });
} }
} }
}
private postCommitTrigger<T extends keyof ED>( private postCommitTrigger<T extends keyof ED>(
entity: T, entity: T,
@ -405,6 +407,7 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends
assert(ids.length > 0); assert(ids.length > 0);
const { fn } = trigger as VolatileTrigger<ED, T, Cxt>; const { fn } = trigger as VolatileTrigger<ED, T, Cxt>;
await fn({ ids }, context, option); await fn({ ids }, context, option);
if (trigger.strict === 'makeSure') {
try { try {
await context.operate(entity, { await context.operate(entity, {
id: await generateNewIdAsync(), id: await generateNewIdAsync(),
@ -421,25 +424,10 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends
}, { includedDeleted: true, blockTrigger: true }); }, { includedDeleted: true, blockTrigger: true });
} }
catch (err) { catch (err) {
if (trigger.strict === 'takeEasy') {
// 如果不是makeSure的就直接清空
await context.operate(entity, {
id: await generateNewIdAsync(),
action: 'update',
data: {
[TriggerDataAttribute]: null,
[TriggerUuidAttribute]: null,
},
filter: {
id: {
$in: ids,
}
}
}, { includedDeleted: true });
}
throw err; throw err;
} }
} }
}
/** /**
* trigger和当前modi上下文是否符合 * trigger和当前modi上下文是否符合