Skip to content

Commit

Permalink
fix(class/eventManagement/~): artefacts of registration
Browse files Browse the repository at this point in the history
  • Loading branch information
Rossb0b committed Jun 6, 2024
1 parent 2285db2 commit 2ae4f6e
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 34 deletions.
4 changes: 2 additions & 2 deletions src/class/eventManagement/dispatcher.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,7 @@ export class Dispatcher<T extends GenericEvent = GenericEvent> extends EventEmit
else {
for (const incomer of incomers) {
if (incomer.baseUUID === origin) {
await this.dispatcherTransactionStore.deleteTransaction(transactionId);
await relatedTransactionStore.deleteTransaction(transactionId);

throw new Error("Forbidden multiple registration for a same instance");
}
Expand Down Expand Up @@ -903,7 +903,7 @@ export class Dispatcher<T extends GenericEvent = GenericEvent> extends EventEmit
redisMetadata: {
mainTransaction: false,
relatedTransaction: transactionId,
eventTransactionId: null,
eventTransactionId: transactionId,
resolved: false
},
event: event as any
Expand Down
66 changes: 35 additions & 31 deletions src/class/eventManagement/dispatcher/transaction-handler.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -558,10 +558,10 @@ export class TransactionHandler<T extends GenericEvent = GenericEvent> {
const incomerStateToUpdate = new Set<string>();

for (const [dispatcherTransactionId, dispatcherTransaction] of dispatcherTransactions.entries()) {
const transactionRecipient = dispatcherTransaction.redisMetadata.to;
const relatedIncomer = [...incomers].find((incomer) => incomer.providedUUID === dispatcherTransaction.redisMetadata.to ||
incomer.baseUUID === dispatcherTransaction.redisMetadata.to);

const relatedIncomer = [...incomers].find((incomer) => incomer.providedUUID === transactionRecipient ||
incomer.baseUUID === transactionRecipient);
const transactionRecipient = relatedIncomer ? relatedIncomer.providedUUID : dispatcherTransaction.redisMetadata.to;

const [relatedBackupIncomerTransactionId, relatedBackupIncomerTransaction] = [...backupIncomerTransactions.entries()]
.find(([__, incomerTransaction]) => incomerTransaction.redisMetadata.relatedTransaction === dispatcherTransactionId) ||
Expand Down Expand Up @@ -596,49 +596,53 @@ export class TransactionHandler<T extends GenericEvent = GenericEvent> {

const relatedIncomerTransactions = await relatedIncomerTransactionStore.getTransactions();

const [relatedIncomerTransactionId, relatedIncomerTransaction] = [...relatedIncomerTransactions.entries()]
.find(([__, incomerTransaction]) => incomerTransaction.redisMetadata.relatedTransaction === dispatcherTransactionId &&
const filteredIncomerTransactions = [...relatedIncomerTransactions.values()]
.filter((incomerTransaction) => incomerTransaction.redisMetadata.relatedTransaction === dispatcherTransactionId &&
incomerTransaction.redisMetadata.resolved) ||
[];

// Event not resolved yet
if (!relatedIncomerTransactionId) {
if (filteredIncomerTransactions.length === 0) {
continue;
}

if (dispatcherTransaction.redisMetadata.mainTransaction) {
// Only in case of ping event
incomerStateToUpdate.add(relatedIncomerTransaction.redisMetadata.origin);
toResolve.push(Promise.all([
relatedIncomerTransactionStore.deleteTransaction(relatedIncomerTransactionId),
this.dispatcherTransactionStore.deleteTransaction(dispatcherTransactionId)
]));
for (const filteredIncomerTransaction of filteredIncomerTransactions) {
const filteredIncomerTransactionId = filteredIncomerTransaction.redisMetadata.transactionId;

continue;
}
if (dispatcherTransaction.redisMetadata.mainTransaction) {
// Only in case of ping event
incomerStateToUpdate.add(filteredIncomerTransaction.redisMetadata.origin);
toResolve.push(Promise.all([
relatedIncomerTransactionStore.deleteTransaction(filteredIncomerTransactionId),
this.dispatcherTransactionStore.deleteTransaction(dispatcherTransactionId)
]));

continue;
}

if (dispatcherTransaction.name === "APPROVEMENT") {
if (!filteredIncomerTransaction || !filteredIncomerTransaction.redisMetadata.resolved) {
continue;
}

toResolve.push(Promise.all([
relatedIncomerTransactionStore.deleteTransaction(filteredIncomerTransactionId),
this.dispatcherTransactionStore.deleteTransaction(dispatcherTransactionId)
]));

if (dispatcherTransaction.name === "APPROVEMENT") {
if (!relatedIncomerTransaction || !relatedIncomerTransaction.redisMetadata.resolved) {
continue;
}

dispatcherTransaction.redisMetadata.resolved = true;
incomerStateToUpdate.add((filteredIncomerTransaction.redisMetadata as any).to);
toResolve.push(Promise.all([
relatedIncomerTransactionStore.deleteTransaction(relatedIncomerTransactionId),
this.dispatcherTransactionStore.deleteTransaction(dispatcherTransactionId)
relatedIncomerTransactionStore.deleteTransaction(filteredIncomerTransactionId),
this.dispatcherTransactionStore.updateTransaction(
dispatcherTransactionId,
dispatcherTransaction
)
]));

continue;
}

dispatcherTransaction.redisMetadata.resolved = true;
incomerStateToUpdate.add((relatedIncomerTransaction.redisMetadata as any).to);
toResolve.push(Promise.all([
relatedIncomerTransactionStore.deleteTransaction(relatedIncomerTransactionId),
this.dispatcherTransactionStore.updateTransaction(
dispatcherTransactionId,
dispatcherTransaction
)
]));
}

toResolve.push([...incomerStateToUpdate.values()].map(
Expand Down
2 changes: 1 addition & 1 deletion src/class/eventManagement/incomer.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ export class Incomer <
published: true,
resolved: true
}
} as Transaction<"incomer">)
} as Transaction<"incomer">, transactionId)
])
]);

Expand Down

0 comments on commit 2ae4f6e

Please sign in to comment.