mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
Followup to #7566 | Story: https://linear.app/n8n/issue/PAY-926 ### Manual workflow activation and deactivation In a multi-main scenario, if the user manually activates or deactivates a workflow, the process (whether leader or follower) that handles the PATCH request and updates its internal state should send a message into the command channel, so that all other main processes update their internal state accordingly: - Add to `ActiveWorkflows` if activating - Remove from `ActiveWorkflows` if deactivating - Remove and re-add to `ActiveWorkflows` if the update did not change activation status. After updating their internal state, if activating or deactivating, the recipient main processes should push a message to all connected frontends so that these can update their stores and so reflect the value in the UI. ### Workflow activation errors On failure to activate a workflow, the main instance should record the error in Redis - main instances should always pull activation errors from Redis in a multi-main scenario. ### Leadership change On leadership change... - The old leader should stop pruning and the new leader should start pruning. - The old leader should remove trigger- and poller-based workflows and the new leader should add them.
68 lines
1.5 KiB
TypeScript
68 lines
1.5 KiB
TypeScript
import type { IPushDataWorkerStatusPayload } from '@/Interfaces';
|
|
|
|
export type RedisServiceCommand =
|
|
| 'getStatus'
|
|
| 'getId'
|
|
| 'restartEventBus'
|
|
| 'stopWorker'
|
|
| 'reloadLicense'
|
|
| 'reloadExternalSecretsProviders'
|
|
| 'workflowActiveStateChanged' // multi-main only
|
|
| 'workflowFailedToActivate'; // multi-main only
|
|
|
|
/**
|
|
* An object to be sent via Redis pub/sub from the main process to the workers.
|
|
* @field command: The command to be executed.
|
|
* @field targets: The targets to execute the command on. Leave empty to execute on all workers or specify worker ids.
|
|
* @field payload: Optional arguments to be sent with the command.
|
|
*/
|
|
type RedisServiceBaseCommand = {
|
|
senderId: string;
|
|
command: RedisServiceCommand;
|
|
payload?: {
|
|
[key: string]: string | number | boolean | string[] | number[] | boolean[];
|
|
};
|
|
};
|
|
|
|
export type RedisServiceWorkerResponseObject = {
|
|
workerId: string;
|
|
} & (
|
|
| RedisServiceBaseCommand
|
|
| {
|
|
command: 'getStatus';
|
|
payload: IPushDataWorkerStatusPayload;
|
|
}
|
|
| {
|
|
command: 'getId';
|
|
}
|
|
| {
|
|
command: 'restartEventBus';
|
|
payload: {
|
|
result: 'success' | 'error';
|
|
error?: string;
|
|
};
|
|
}
|
|
| {
|
|
command: 'reloadExternalSecretsProviders';
|
|
payload: {
|
|
result: 'success' | 'error';
|
|
error?: string;
|
|
};
|
|
}
|
|
| {
|
|
command: 'stopWorker';
|
|
}
|
|
| {
|
|
command: 'workflowActiveStateChanged';
|
|
payload: {
|
|
oldState: boolean;
|
|
newState: boolean;
|
|
workflowId: string;
|
|
};
|
|
}
|
|
);
|
|
|
|
export type RedisServiceCommandObject = {
|
|
targets?: string[];
|
|
} & RedisServiceBaseCommand;
|