n8n 2.35.1 → 2.35.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/workflows/publication/workflow-publication-applier.d.ts +2 -2
- package/dist/workflows/publication/workflow-publication-applier.js +18 -8
- package/dist/workflows/publication/workflow-publication-applier.js.map +1 -1
- package/dist/workflows/publication/workflow-publication-outbox-consumer.d.ts +3 -1
- package/dist/workflows/publication/workflow-publication-outbox-consumer.js +60 -8
- package/dist/workflows/publication/workflow-publication-outbox-consumer.js.map +1 -1
- package/dist/workflows/publication/workflow-publication-reconciler.service.d.ts +2 -2
- package/dist/workflows/publication/workflow-publication-reconciler.service.js +10 -10
- package/dist/workflows/publication/workflow-publication-reconciler.service.js.map +1 -1
- package/dist/workflows/triggers/trigger-activation-retry.d.ts +1 -1
- package/dist/workflows/triggers/trigger-activation-retry.js +4 -3
- package/dist/workflows/triggers/trigger-activation-retry.js.map +1 -1
- package/dist/workflows/triggers/workflow-trigger-activator.d.ts +7 -3
- package/dist/workflows/triggers/workflow-trigger-activator.js +65 -28
- package/dist/workflows/triggers/workflow-trigger-activator.js.map +1 -1
- package/dist/workflows/workflow.service.js +2 -2
- package/dist/workflows/workflow.service.js.map +1 -1
- package/package.json +32 -32
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
2
|
import { WorkflowHistoryRepository, WorkflowPublicationOutbox, WorkflowPublishedVersionRepository, WorkflowRepository } from '@n8n/db';
|
|
3
3
|
import type { PublicationResult } from '../../workflows/publication/publication-result';
|
|
4
|
-
import { WorkflowTriggerActivator } from '../../workflows/triggers/workflow-trigger-activator';
|
|
4
|
+
import { WorkflowTriggerActivator, type TriggerOperationAbort } from '../../workflows/triggers/workflow-trigger-activator';
|
|
5
5
|
import { WorkflowPublishedDataService } from '../../workflows/workflow-published-data.service';
|
|
6
6
|
export declare class WorkflowPublicationApplier {
|
|
7
7
|
private readonly logger;
|
|
@@ -11,7 +11,7 @@ export declare class WorkflowPublicationApplier {
|
|
|
11
11
|
private readonly workflowTriggerActivator;
|
|
12
12
|
private readonly workflowPublishedDataService;
|
|
13
13
|
constructor(logger: Logger, workflowRepository: WorkflowRepository, workflowHistoryRepository: WorkflowHistoryRepository, workflowPublishedVersionRepository: WorkflowPublishedVersionRepository, workflowTriggerActivator: WorkflowTriggerActivator, workflowPublishedDataService: WorkflowPublishedDataService);
|
|
14
|
-
apply(record: WorkflowPublicationOutbox): Promise<PublicationResult>;
|
|
14
|
+
apply(record: WorkflowPublicationOutbox, abort: TriggerOperationAbort): Promise<PublicationResult>;
|
|
15
15
|
private publish;
|
|
16
16
|
private unpublish;
|
|
17
17
|
private classifyActivationOutcome;
|
|
@@ -17,6 +17,12 @@ const ensure_error_1 = require("@n8n/utils/errors/ensure-error");
|
|
|
17
17
|
const trigger_diff_1 = require("../../workflows/publication/trigger-diff");
|
|
18
18
|
const workflow_trigger_activator_1 = require("../../workflows/triggers/workflow-trigger-activator");
|
|
19
19
|
const workflow_published_data_service_1 = require("../../workflows/workflow-published-data.service");
|
|
20
|
+
const ACTIVATION_MODE_BY_REASON = {
|
|
21
|
+
[db_1.WorkflowPublicationReason.Publish]: 'update',
|
|
22
|
+
[db_1.WorkflowPublicationReason.Startup]: 'init',
|
|
23
|
+
[db_1.WorkflowPublicationReason.LeadershipTakeover]: 'leadershipChange',
|
|
24
|
+
[db_1.WorkflowPublicationReason.Reconcile]: 'update',
|
|
25
|
+
};
|
|
20
26
|
let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
21
27
|
constructor(logger, workflowRepository, workflowHistoryRepository, workflowPublishedVersionRepository, workflowTriggerActivator, workflowPublishedDataService) {
|
|
22
28
|
this.logger = logger;
|
|
@@ -27,18 +33,18 @@ let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
|
27
33
|
this.workflowPublishedDataService = workflowPublishedDataService;
|
|
28
34
|
this.logger = this.logger.scoped('workflow-publication');
|
|
29
35
|
}
|
|
30
|
-
async apply(record) {
|
|
36
|
+
async apply(record, abort) {
|
|
31
37
|
const { workflow, oldVersion, newVersion } = await this.resolveVersions(record);
|
|
32
38
|
if (!workflow)
|
|
33
39
|
return { type: 'skipped', reason: 'workflow-not-found' };
|
|
34
40
|
if (workflow.activeVersionId === null) {
|
|
35
|
-
return await this.unpublish(workflow, oldVersion, record);
|
|
41
|
+
return await this.unpublish(workflow, oldVersion, record, abort);
|
|
36
42
|
}
|
|
37
43
|
if (!newVersion)
|
|
38
44
|
return { type: 'version-missing' };
|
|
39
|
-
return await this.publish(workflow, oldVersion, newVersion, record);
|
|
45
|
+
return await this.publish(workflow, oldVersion, newVersion, record, abort);
|
|
40
46
|
}
|
|
41
|
-
async publish(workflow, oldVersion, newVersion, record) {
|
|
47
|
+
async publish(workflow, oldVersion, newVersion, record, abort) {
|
|
42
48
|
const oldTriggerNodes = this.workflowTriggerActivator.getEnabledTriggerNodes(oldVersion);
|
|
43
49
|
const desiredTriggerNodes = this.workflowTriggerActivator.getEnabledTriggerNodes(newVersion);
|
|
44
50
|
const triggerKinds = this.workflowTriggerActivator.getTriggerKinds(desiredTriggerNodes);
|
|
@@ -64,13 +70,16 @@ let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
|
64
70
|
}),
|
|
65
71
|
};
|
|
66
72
|
}
|
|
73
|
+
abort.signal.throwIfAborted();
|
|
67
74
|
if (toRemove.size > 0 && oldVersion) {
|
|
68
|
-
await this.workflowTriggerActivator.deactivate(workflow, oldVersion, toRemove);
|
|
75
|
+
await this.workflowTriggerActivator.deactivate(workflow, oldVersion, toRemove, abort);
|
|
69
76
|
}
|
|
70
77
|
await this.advancePublishedVersion(record);
|
|
71
78
|
try {
|
|
79
|
+
abort.signal.throwIfAborted();
|
|
72
80
|
if (toAdd.size > 0) {
|
|
73
|
-
const
|
|
81
|
+
const activationMode = ACTIVATION_MODE_BY_REASON[record.reason ?? db_1.WorkflowPublicationReason.Publish];
|
|
82
|
+
const outcome = await this.workflowTriggerActivator.activate(workflow, newVersion, toAdd, activationMode, abort);
|
|
74
83
|
return this.classifyActivationOutcome(outcome, desiredTriggerNodes, triggerKinds);
|
|
75
84
|
}
|
|
76
85
|
if (toRemove.size > 0) {
|
|
@@ -88,10 +97,11 @@ let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
|
88
97
|
}),
|
|
89
98
|
};
|
|
90
99
|
}
|
|
91
|
-
async unpublish(workflow, oldVersion, record) {
|
|
100
|
+
async unpublish(workflow, oldVersion, record, abort) {
|
|
92
101
|
const toRemove = new Set(this.workflowTriggerActivator.getEnabledTriggerNodes(oldVersion).map((node) => node.id));
|
|
93
102
|
if (oldVersion && toRemove.size > 0) {
|
|
94
|
-
|
|
103
|
+
abort.signal.throwIfAborted();
|
|
104
|
+
await this.workflowTriggerActivator.deactivate(workflow, oldVersion, toRemove, abort);
|
|
95
105
|
}
|
|
96
106
|
await this.workflowPublishedDataService.invalidateCache(record.workflowId);
|
|
97
107
|
await this.workflowPublishedVersionRepository.removePublishedVersion(record.workflowId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-publication-applier.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-applier.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"workflow-publication-applier.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-applier.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,8 @@ export declare class WorkflowPublicationOutboxConsumer {
|
|
|
32
32
|
drainPending(): Promise<number>;
|
|
33
33
|
private runDrain;
|
|
34
34
|
private shouldKeepPolling;
|
|
35
|
-
|
|
35
|
+
private processRecordWithAbort;
|
|
36
|
+
private raceTimeout;
|
|
37
|
+
processRecord(record: WorkflowPublicationOutbox, signal: AbortSignal): Promise<void>;
|
|
36
38
|
private toOutcomeLabels;
|
|
37
39
|
}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.WorkflowPublicationOutboxConsumer = void 0;
|
|
13
13
|
const backend_common_1 = require("@n8n/backend-common");
|
|
14
14
|
const config_1 = require("@n8n/config");
|
|
15
|
+
const constants_1 = require("@n8n/constants");
|
|
15
16
|
const db_1 = require("@n8n/db");
|
|
16
17
|
const decorators_1 = require("@n8n/decorators");
|
|
17
18
|
const di_1 = require("@n8n/di");
|
|
@@ -22,6 +23,10 @@ const event_service_1 = require("../../events/event.service");
|
|
|
22
23
|
const publication_status_reporter_1 = require("../../workflows/publication/publication-status-reporter");
|
|
23
24
|
const workflow_publication_lifecycle_lock_1 = require("../../workflows/publication/workflow-publication-lifecycle-lock");
|
|
24
25
|
const workflow_publication_applier_1 = require("../../workflows/publication/workflow-publication-applier");
|
|
26
|
+
const TIMED_OUT = Symbol('timed-out');
|
|
27
|
+
const ABORT_AFTER_LEASE_FRACTION = 0.7;
|
|
28
|
+
const ABANDON_GRACE_MS = 10 * constants_1.Time.seconds.toMilliseconds;
|
|
29
|
+
const ABANDON_GRACE_LEASE_FRACTION = 0.25;
|
|
25
30
|
let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer {
|
|
26
31
|
constructor(logger, workflowsConfig, errorReporter, outboxRepository, applier, reporter, instanceSettings, lifecycleLock, tracing, eventService) {
|
|
27
32
|
this.logger = logger;
|
|
@@ -116,19 +121,19 @@ let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer
|
|
|
116
121
|
attributes: { 'n8n.publication.consumer_concurrency': concurrency },
|
|
117
122
|
}, async (span) => {
|
|
118
123
|
let processed = 0;
|
|
119
|
-
let
|
|
124
|
+
let workerFailed = false;
|
|
120
125
|
const runWorker = async () => {
|
|
121
|
-
while (!
|
|
126
|
+
while (!workerFailed && this.shouldKeepPolling()) {
|
|
122
127
|
const record = await this.outboxRepository.claimNextPendingRecord();
|
|
123
128
|
if (!record)
|
|
124
129
|
break;
|
|
125
|
-
await this.
|
|
126
|
-
|
|
130
|
+
if (await this.processRecordWithAbort(record))
|
|
131
|
+
processed++;
|
|
127
132
|
}
|
|
128
133
|
};
|
|
129
134
|
const workerTasks = Array.from({ length: concurrency }, async () => {
|
|
130
135
|
await runWorker().catch((error) => {
|
|
131
|
-
|
|
136
|
+
workerFailed = true;
|
|
132
137
|
throw error;
|
|
133
138
|
});
|
|
134
139
|
});
|
|
@@ -144,7 +149,36 @@ let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer
|
|
|
144
149
|
shouldKeepPolling() {
|
|
145
150
|
return this.isPolling && !this.isShuttingDown;
|
|
146
151
|
}
|
|
147
|
-
async
|
|
152
|
+
async processRecordWithAbort(record) {
|
|
153
|
+
const leaseMs = this.workflowsConfig.publicationOutboxLeaseSeconds * constants_1.Time.seconds.toMilliseconds;
|
|
154
|
+
const abortAfterMs = leaseMs * ABORT_AFTER_LEASE_FRACTION;
|
|
155
|
+
const abandonGraceMs = Math.min(ABANDON_GRACE_MS, leaseMs * ABANDON_GRACE_LEASE_FRACTION);
|
|
156
|
+
const controller = new AbortController();
|
|
157
|
+
const work = this.processRecord(record, controller.signal);
|
|
158
|
+
if ((await this.raceTimeout(work, abortAfterMs)) !== TIMED_OUT)
|
|
159
|
+
return true;
|
|
160
|
+
controller.abort(new n8n_workflow_1.OperationalError('Workflow publication processing exceeded its deadline'));
|
|
161
|
+
if ((await this.raceTimeout(work, abandonGraceMs)) !== TIMED_OUT)
|
|
162
|
+
return true;
|
|
163
|
+
void work.catch((error) => this.errorReporter.error((0, ensure_error_1.ensureError)(error), { shouldBeLogged: true }));
|
|
164
|
+
this.errorReporter.error(new n8n_workflow_1.OperationalError('Abandoned workflow publication outbox record: processing did not stop after abort', { extra: { outboxId: record.id, workflowId: record.workflowId } }), { shouldBeLogged: true });
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
async raceTimeout(promise, timeoutMs) {
|
|
168
|
+
let timer;
|
|
169
|
+
try {
|
|
170
|
+
return await Promise.race([
|
|
171
|
+
promise,
|
|
172
|
+
new Promise((resolve) => {
|
|
173
|
+
timer = setTimeout(() => resolve(TIMED_OUT), timeoutMs);
|
|
174
|
+
}),
|
|
175
|
+
]);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
clearTimeout(timer);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async processRecord(record, signal) {
|
|
148
182
|
await this.tracing.startSpan({
|
|
149
183
|
name: 'Publication outbox record',
|
|
150
184
|
op: 'publication.outbox.process_record',
|
|
@@ -163,6 +197,13 @@ let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer
|
|
|
163
197
|
});
|
|
164
198
|
return;
|
|
165
199
|
}
|
|
200
|
+
if (signal.aborted) {
|
|
201
|
+
this.logger.debug('Skipped applying publication outbox record: aborted', {
|
|
202
|
+
outboxId: record.id,
|
|
203
|
+
workflowId: record.workflowId,
|
|
204
|
+
});
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
166
207
|
this.logger.debug('Started processing workflow publication outbox record', {
|
|
167
208
|
outboxId: record.id,
|
|
168
209
|
workflowId: record.workflowId,
|
|
@@ -170,14 +211,21 @@ let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer
|
|
|
170
211
|
});
|
|
171
212
|
const startedAt = Date.now();
|
|
172
213
|
let result;
|
|
214
|
+
const detachedWork = [];
|
|
215
|
+
const abort = {
|
|
216
|
+
signal,
|
|
217
|
+
onDetached: (work) => detachedWork.push(work),
|
|
218
|
+
};
|
|
173
219
|
try {
|
|
174
|
-
result = await this.applier.apply(record);
|
|
220
|
+
result = await this.applier.apply(record, abort);
|
|
175
221
|
}
|
|
176
222
|
catch (error) {
|
|
177
223
|
const cause = (0, ensure_error_1.ensureError)(error);
|
|
178
224
|
result = {
|
|
179
225
|
type: 'failed',
|
|
180
|
-
error:
|
|
226
|
+
error: signal.aborted
|
|
227
|
+
? cause
|
|
228
|
+
: new n8n_workflow_1.UnexpectedError(`Unexpected: ${cause.message}`, { cause }),
|
|
181
229
|
};
|
|
182
230
|
}
|
|
183
231
|
let reporterFailed = false;
|
|
@@ -198,6 +246,10 @@ let WorkflowPublicationOutboxConsumer = class WorkflowPublicationOutboxConsumer
|
|
|
198
246
|
result: result.type,
|
|
199
247
|
});
|
|
200
248
|
span.setAttribute('n8n.publication.result', result.type);
|
|
249
|
+
if (detachedWork.length > 0) {
|
|
250
|
+
this.logger.warn('Keeping workflow publication lock held until abandoned trigger operations settle', { outboxId: record.id, workflowId: record.workflowId });
|
|
251
|
+
await Promise.allSettled(detachedWork);
|
|
252
|
+
}
|
|
201
253
|
});
|
|
202
254
|
span.setStatus({ code: 1 });
|
|
203
255
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-publication-outbox-consumer.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-outbox-consumer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAA8C;AAC9C,gCAAyF;AACzF,gDAA8E;AAC9E,gCAAkC;AAClC,uCAAgF;AAChF,iEAA6D;AAC7D,+
|
|
1
|
+
{"version":3,"file":"workflow-publication-outbox-consumer.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-outbox-consumer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAA8C;AAC9C,8CAAsC;AACtC,gCAAyF;AACzF,gDAA8E;AAC9E,gCAAkC;AAClC,uCAAgF;AAChF,iEAA6D;AAC7D,+CAAiE;AAEjE,0DAAsD;AAMtD,qGAAgG;AAChG,qHAA+G;AAC/G,uGAAkG;AAOlG,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAOtC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAOvC,MAAM,gBAAgB,GAAG,EAAE,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC1D,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAYnC,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAS7C,YACkB,MAAc,EACd,eAAgC,EAChC,aAA4B,EAC5B,gBAAqD,EACrD,OAAmC,EACnC,QAAmC,EACnC,gBAAkC,EAClC,aAA+C,EAC/C,OAAgB,EAChB,YAA0B;QAT1B,WAAM,GAAN,MAAM,CAAQ;QACd,oBAAe,GAAf,eAAe,CAAiB;QAChC,kBAAa,GAAb,aAAa,CAAe;QAC5B,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,YAAO,GAAP,OAAO,CAA4B;QACnC,aAAQ,GAAR,QAAQ,CAA2B;QACnC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAkC;QAC/C,YAAO,GAAP,OAAO,CAAS;QAChB,iBAAY,GAAZ,YAAY,CAAc;QAhBpC,cAAS,GAAG,KAAK,CAAC;QAElB,mBAAc,GAAG,KAAK,CAAC;QAEvB,gBAAW,GAA2B,IAAI,CAAC;QAclD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ;YAAE,OAAO;QAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;QACX,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QACvF,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW;QACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,IAAI,CAAC,WAAW,CAAC;IACxB,CAAC;IAUK,AAAN,KAAK,CAAC,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B;YAAE,OAAO;QAIhE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ;YAAE,OAAO;QAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3B,CAAC;IAKO,iBAAiB;QACxB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE,OAAO;QAEtC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxD,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;IAC1D,CAAC;IAEO,KAAK,CAAC,SAAS;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAG5C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,SAAS,oDAAoD,CAAC,CAAC;QAC/F,CAAC;IACF,CAAC;IAWD,KAAK,CAAC,YAAY;QACjB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC;QAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC;YACJ,OAAO,MAAM,KAAK,CAAC;QACpB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,QAAQ;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC;QACxE,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAClC;YACC,IAAI,EAAE,0BAA0B;YAChC,EAAE,EAAE,0BAA0B;YAC9B,UAAU,EAAE,EAAE,sCAAsC,EAAE,WAAW,EAAE;SACnE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACd,IAAI,SAAS,GAAG,CAAC,CAAC;YAGlB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;gBAC5B,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC;oBACpE,IAAI,CAAC,MAAM;wBAAE,MAAM;oBAEnB,IAAI,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;wBAAE,SAAS,EAAE,CAAC;gBAC5D,CAAC;YACF,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjC,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM,KAAK,CAAC;gBACb,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEtD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;YAC7D,IAAI,OAAO,EAAE,MAAM,KAAK,UAAU;gBAAE,MAAM,OAAO,CAAC,MAAM,CAAC;YAEzD,IAAI,CAAC,YAAY,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,GAAe,EAAE,CAAC,CAAC;YACxC,OAAO,SAAS,CAAC;QAClB,CAAC,CACD,CAAC;IACH,CAAC;IAEO,iBAAiB;QACxB,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;IAQO,KAAK,CAAC,sBAAsB,CAAC,MAAiC;QACrE,MAAM,OAAO,GACZ,IAAI,CAAC,eAAe,CAAC,6BAA6B,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClF,MAAM,YAAY,GAAG,OAAO,GAAG,0BAA0B,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,GAAG,4BAA4B,CAAC,CAAC;QAE1F,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5E,UAAU,CAAC,KAAK,CAAC,IAAI,+BAAgB,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAEhG,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAG9E,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAA,0BAAW,EAAC,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CACtE,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,KAAK,CACvB,IAAI,+BAAgB,CACnB,mFAAmF,EACnF,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACjE,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACxB,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;IAGO,KAAK,CAAC,WAAW,CACxB,OAAmB,EACnB,SAAiB;QAEjB,IAAI,KAAiC,CAAC;QACtC,IAAI,CAAC;YACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzB,OAAO;gBACP,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;oBACzC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;gBACzD,CAAC,CAAC;aACF,CAAC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IAeD,KAAK,CAAC,aAAa,CAAC,MAAiC,EAAE,MAAmB;QACzE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAC3B;YACC,IAAI,EAAE,2BAA2B;YACjC,EAAE,EAAE,mCAAmC;YACvC,UAAU,EAAE;gBACX,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;gBACjE,2BAA2B,EAAE,MAAM,CAAC,EAAE;gBACtC,sCAAsC,EAAE,MAAM,CAAC,kBAAkB;aACjE;SACD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACd,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;gBAInE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;oBACrC,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,EAAE;wBAClF,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC7B,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAOD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;wBACxE,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC7B,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;oBAC1E,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;iBAC7C,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,MAAyB,CAAC;gBAK9B,MAAM,YAAY,GAA4B,EAAE,CAAC;gBACjD,MAAM,KAAK,GAA0B;oBACpC,MAAM;oBACN,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC7C,CAAC;gBAEF,IAAI,CAAC;oBACJ,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAClD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,IAAA,0BAAW,EAAC,KAAK,CAAC,CAAC;oBACjC,MAAM,GAAG;wBACR,IAAI,EAAE,QAAQ;wBAEd,KAAK,EAAE,MAAM,CAAC,OAAO;4BACpB,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,IAAI,8BAAe,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;qBACjE,CAAC;gBACH,CAAC;gBAED,IAAI,cAAc,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACtB,cAAc,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;gBAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,8CAA8C,EAAE;oBACtE,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC;oBAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAClC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE;oBAC3E,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM,EAAE,MAAM,CAAC,IAAI;iBACnB,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAKzD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CACf,kFAAkF,EAClF,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CACtD,CAAC;oBACF,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,GAAe,EAAE,CAAC,CAAC;QACzC,CAAC,CACD,CAAC;IACH,CAAC;IAQO,eAAe,CACtB,MAAyB,EACzB,cAAuB;QAEvB,IAAI,cAAc;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAEhE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,WAAW;gBACf,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAChD,KAAK,aAAa;gBACjB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAClD,KAAK,SAAS;gBACb,OAAO;oBACN,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,oBAAoB;iBAC5B,CAAC;YACH,KAAK,iBAAiB;gBACrB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;YACxD,KAAK,SAAS;gBACb,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtD,KAAK,QAAQ;gBACZ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9C,CAAC;IACF,CAAC;CACD,CAAA;;AAlUM;IADL,IAAA,uBAAU,GAAE;;;;iEAMZ;AAUK;IAFL,IAAA,0BAAa,EAAC,0BAA0B,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IAC3F,IAAA,6BAAgB,GAAE;;;;+DAUlB;4CA5EW,iCAAiC;IAD7C,IAAA,YAAO,GAAE;qCAWiB,uBAAM,EACG,wBAAe,EACjB,wBAAa,EACV,wCAAmC,EAC5C,yDAA0B,EACzB,uDAAyB,EACjB,2BAAgB,EACnB,sEAAgC,EACtC,kBAAO,EACF,4BAAY;GAnBhC,iCAAiC,CAsX7C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
2
|
import { WorkflowsConfig } from '@n8n/config';
|
|
3
|
-
import { WorkflowPublicationOutboxRepository, WorkflowPublicationTriggerStatusRepository, WorkflowRepository } from '@n8n/db';
|
|
3
|
+
import { WorkflowPublicationOutboxRepository, WorkflowPublicationReason, WorkflowPublicationTriggerStatusRepository, WorkflowRepository } from '@n8n/db';
|
|
4
4
|
import { ActiveWorkflowTriggers, ErrorReporter, InstanceSettings, Tracing } from 'n8n-core';
|
|
5
5
|
import { EventService } from '../../events/event.service';
|
|
6
6
|
import { NonWebhookTriggerRegistrar } from '../../workflows/triggers/non-webhook-trigger-registrar';
|
|
@@ -28,7 +28,7 @@ export declare class WorkflowPublicationReconciler {
|
|
|
28
28
|
init(): void;
|
|
29
29
|
startReconciler(): void;
|
|
30
30
|
shutdown(): void;
|
|
31
|
-
reconcile(): Promise<void>;
|
|
31
|
+
reconcile(reason: WorkflowPublicationReason): Promise<void>;
|
|
32
32
|
reconcileOnLeaderTakeover(): Promise<void>;
|
|
33
33
|
private findSurplusWorkflowIds;
|
|
34
34
|
private removeGhostTriggers;
|
|
@@ -43,7 +43,7 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
43
43
|
init() {
|
|
44
44
|
this.startReconciler();
|
|
45
45
|
if (this.reconcileInterval)
|
|
46
|
-
void this.reconcile();
|
|
46
|
+
void this.reconcile(db_1.WorkflowPublicationReason.Startup);
|
|
47
47
|
}
|
|
48
48
|
startReconciler() {
|
|
49
49
|
if (!this.workflowsConfig.useWorkflowPublicationService)
|
|
@@ -51,7 +51,7 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
51
51
|
if (this.isShuttingDown || this.reconcileInterval)
|
|
52
52
|
return;
|
|
53
53
|
const intervalSeconds = this.workflowsConfig.publicationReconcileIntervalSeconds;
|
|
54
|
-
this.reconcileInterval = setInterval(async () => await this.reconcile(), intervalSeconds * constants_1.Time.seconds.toMilliseconds);
|
|
54
|
+
this.reconcileInterval = setInterval(async () => await this.reconcile(db_1.WorkflowPublicationReason.Reconcile), intervalSeconds * constants_1.Time.seconds.toMilliseconds);
|
|
55
55
|
this.logger.debug(`Trigger reconciliation scheduled every ${intervalSeconds}s`);
|
|
56
56
|
}
|
|
57
57
|
shutdown() {
|
|
@@ -59,7 +59,7 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
59
59
|
clearInterval(this.reconcileInterval);
|
|
60
60
|
this.reconcileInterval = undefined;
|
|
61
61
|
}
|
|
62
|
-
async reconcile() {
|
|
62
|
+
async reconcile(reason) {
|
|
63
63
|
if (this.isShuttingDown)
|
|
64
64
|
return;
|
|
65
65
|
if (!this.instanceSettings.isLeader) {
|
|
@@ -70,10 +70,10 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
70
70
|
const startedAt = Date.now();
|
|
71
71
|
try {
|
|
72
72
|
const surplus = await this.removeGhostTriggers(await this.findSurplusWorkflowIds());
|
|
73
|
-
const missing = await this.republishWorkflows(await this.findMissingActiveWorkflows(), 'Re-publishing workflows with missing in-memory triggers');
|
|
74
|
-
const versionSkew = await this.republishWorkflows(await this.outboxRepository.findVersionSkewedWorkflowIds(), 'Re-enqueuing workflows whose published version diverged from the active version');
|
|
75
|
-
const statusDrift = await this.republishWorkflows(await this.outboxRepository.findTriggerStatusDriftedWorkflowIds(), 'Re-enqueuing workflows whose trigger-status rows lag the active version');
|
|
76
|
-
const unreported = await this.republishWorkflows(await this.outboxRepository.findUnreportedPublishedWorkflowIds(), 'Re-enqueuing published workflows that no publication reported trigger statuses for');
|
|
73
|
+
const missing = await this.republishWorkflows(await this.findMissingActiveWorkflows(), 'Re-publishing workflows with missing in-memory triggers', reason);
|
|
74
|
+
const versionSkew = await this.republishWorkflows(await this.outboxRepository.findVersionSkewedWorkflowIds(), 'Re-enqueuing workflows whose published version diverged from the active version', reason);
|
|
75
|
+
const statusDrift = await this.republishWorkflows(await this.outboxRepository.findTriggerStatusDriftedWorkflowIds(), 'Re-enqueuing workflows whose trigger-status rows lag the active version', reason);
|
|
76
|
+
const unreported = await this.republishWorkflows(await this.outboxRepository.findUnreportedPublishedWorkflowIds(), 'Re-enqueuing published workflows that no publication reported trigger statuses for', reason);
|
|
77
77
|
span.setAttribute('n8n.publication.deficient_workflows', missing);
|
|
78
78
|
span.setAttribute('n8n.publication.surplus_workflows', surplus);
|
|
79
79
|
span.setAttribute('n8n.publication.version_skewed_workflows', versionSkew);
|
|
@@ -108,7 +108,7 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
108
108
|
async reconcileOnLeaderTakeover() {
|
|
109
109
|
if (!this.reconcileInterval)
|
|
110
110
|
return;
|
|
111
|
-
await this.reconcile();
|
|
111
|
+
await this.reconcile(db_1.WorkflowPublicationReason.LeadershipTakeover);
|
|
112
112
|
}
|
|
113
113
|
async findSurplusWorkflowIds() {
|
|
114
114
|
const registered = this.activeWorkflowTriggers.getNonWebhookTriggerWorkflowIds();
|
|
@@ -149,10 +149,10 @@ let WorkflowPublicationReconciler = class WorkflowPublicationReconciler {
|
|
|
149
149
|
}
|
|
150
150
|
return missing;
|
|
151
151
|
}
|
|
152
|
-
async republishWorkflows(workflowIds, logMessage) {
|
|
152
|
+
async republishWorkflows(workflowIds, logMessage, reason) {
|
|
153
153
|
if (workflowIds.length > 0) {
|
|
154
154
|
this.logger.debug(logMessage, { workflowIds });
|
|
155
|
-
await this.outboxRepository.enqueueByWorkflowIds(workflowIds);
|
|
155
|
+
await this.outboxRepository.enqueueByWorkflowIds(workflowIds, reason);
|
|
156
156
|
this.outboxConsumer.startPolling();
|
|
157
157
|
await this.outboxConsumer.drainPending();
|
|
158
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-publication-reconciler.service.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-reconciler.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAA8C;AAC9C,8CAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"workflow-publication-reconciler.service.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-reconciler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const isTransientActivationError: (error: Error) => boolean;
|
|
2
|
-
export declare function retryTriggerActivation(activate: () => Promise<void>, maxAttempts: number): Promise<void>;
|
|
2
|
+
export declare function retryTriggerActivation(activate: () => Promise<void>, maxAttempts: number, signal: AbortSignal): Promise<void>;
|
|
@@ -8,17 +8,18 @@ const n8n_workflow_1 = require("n8n-workflow");
|
|
|
8
8
|
const constants_1 = require("../../constants");
|
|
9
9
|
const isTransientActivationError = (error) => !(error instanceof n8n_workflow_1.WebhookPathTakenError);
|
|
10
10
|
exports.isTransientActivationError = isTransientActivationError;
|
|
11
|
-
async function retryTriggerActivation(activate, maxAttempts) {
|
|
11
|
+
async function retryTriggerActivation(activate, maxAttempts, signal) {
|
|
12
12
|
for (let attempt = 0;; attempt++) {
|
|
13
|
+
signal.throwIfAborted();
|
|
13
14
|
try {
|
|
14
15
|
await activate();
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
18
|
catch (error) {
|
|
18
19
|
const isLastAttempt = attempt >= maxAttempts - 1;
|
|
19
|
-
if (!(0, exports.isTransientActivationError)((0, ensure_error_1.ensureError)(error)) || isLastAttempt)
|
|
20
|
+
if (!(0, exports.isTransientActivationError)((0, ensure_error_1.ensureError)(error)) || isLastAttempt || signal.aborted)
|
|
20
21
|
throw error;
|
|
21
|
-
await (0, sleep_1.sleep)(Math.min(constants_1.WORKFLOW_REACTIVATE_INITIAL_TIMEOUT * 2 ** attempt, constants_1.WORKFLOW_REACTIVATE_MAX_TIMEOUT));
|
|
22
|
+
await (0, sleep_1.sleep)(Math.min(constants_1.WORKFLOW_REACTIVATE_INITIAL_TIMEOUT * 2 ** attempt, constants_1.WORKFLOW_REACTIVATE_MAX_TIMEOUT), signal);
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-activation-retry.js","sourceRoot":"","sources":["../../../src/workflows/triggers/trigger-activation-retry.ts"],"names":[],"mappings":";;;;AAAA,iEAA6D;AAC7D,4CAAyC;AACzC,+CAAqD;AAErD,2CAAmG;AAK5F,MAAM,0BAA0B,GAAG,CAAC,KAAY,EAAW,EAAE,CACnE,CAAC,CAAC,KAAK,YAAY,oCAAqB,CAAC,CAAC;AAD9B,QAAA,0BAA0B,GAA1B,0BAA0B,CACI;
|
|
1
|
+
{"version":3,"file":"trigger-activation-retry.js","sourceRoot":"","sources":["../../../src/workflows/triggers/trigger-activation-retry.ts"],"names":[],"mappings":";;;;AAAA,iEAA6D;AAC7D,4CAAyC;AACzC,+CAAqD;AAErD,2CAAmG;AAK5F,MAAM,0BAA0B,GAAG,CAAC,KAAY,EAAW,EAAE,CACnE,CAAC,CAAC,KAAK,YAAY,oCAAqB,CAAC,CAAC;AAD9B,QAAA,0BAA0B,GAA1B,0BAA0B,CACI;AAWpC,KAAK,iCACX,QAA6B,EAC7B,WAAmB,EACnB,MAAmB;IAEnB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC;YACJ,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,IAAA,QAAA,0BAA0B,EAAC,IAAA,0BAAW,EAAC,KAAK,CAAC,CAAC,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO;gBACrF,MAAM,KAAK,CAAC;YAKb,MAAM,IAAA,aAAK,EACV,IAAI,CAAC,GAAG,CACP,+CAAmC,GAAG,CAAC,IAAI,OAAO,EAClD,2CAA+B,CAC/B,EACD,MAAM,CACN,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { WorkflowsConfig } from '@n8n/config';
|
|
|
3
3
|
import type { WorkflowEntity, WorkflowPublicationTriggerKind } from '@n8n/db';
|
|
4
4
|
import { WorkflowRepository } from '@n8n/db';
|
|
5
5
|
import { ErrorReporter, Tracing } from 'n8n-core';
|
|
6
|
-
import type { IConnections, INode, WorkflowId } from 'n8n-workflow';
|
|
6
|
+
import type { IConnections, INode, WorkflowActivateMode, WorkflowId } from 'n8n-workflow';
|
|
7
7
|
import { ActivationErrorsService } from '../../activation-errors.service';
|
|
8
8
|
import { EventService } from '../../events/event.service';
|
|
9
9
|
import { NodeTypes } from '../../node-types';
|
|
@@ -16,6 +16,10 @@ export type WorkflowTriggerVersion = {
|
|
|
16
16
|
nodes: INode[];
|
|
17
17
|
connections: IConnections;
|
|
18
18
|
};
|
|
19
|
+
export interface TriggerOperationAbort {
|
|
20
|
+
signal: AbortSignal;
|
|
21
|
+
onDetached: (work: Promise<unknown>) => void;
|
|
22
|
+
}
|
|
19
23
|
export type TriggerActivationFailure = {
|
|
20
24
|
nodeId: INode['id'];
|
|
21
25
|
nodeName: string;
|
|
@@ -45,9 +49,9 @@ export declare class WorkflowTriggerActivator {
|
|
|
45
49
|
getUnregisteredNonWebhookTriggerNodeIds(workflowId: WorkflowId, desiredNodes: INode[]): Set<INode['id']>;
|
|
46
50
|
getNodesWithUnregisteredWebhooks(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion): Promise<Set<INode['id']>>;
|
|
47
51
|
private getNonWebhookTriggerNodeIds;
|
|
48
|
-
activate(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion, nodeIds: Set<INode['id']
|
|
52
|
+
activate(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion, nodeIds: Set<INode['id']>, activationMode: WorkflowActivateMode, abort: TriggerOperationAbort): Promise<TriggerActivationOutcome>;
|
|
49
53
|
private activateInternal;
|
|
50
|
-
deactivate(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion, nodeIds: Set<INode['id']
|
|
54
|
+
deactivate(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion, nodeIds: Set<INode['id']>, abort: TriggerOperationAbort): Promise<void>;
|
|
51
55
|
private deactivateInternal;
|
|
52
56
|
updateTriggerCount(dbWorkflow: WorkflowEntity, version: WorkflowTriggerVersion): Promise<void>;
|
|
53
57
|
private emitTriggerOperation;
|