fix(core): Make senderId required for all command messages (#7252)
all commands sent between main instance and workers need to contain a server id to prevent senders from reacting to their own messages, causing loops this PR makes sure all sent messages contain a sender id by default as part of constructing a sending redis client. --------- Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
This commit is contained in:
committed by
GitHub
parent
77d6e3fc07
commit
4b014286cf
@@ -1,16 +1,19 @@
|
||||
import { LoggerProxy } from 'n8n-workflow';
|
||||
import { messageToRedisServiceCommandObject } from './helpers';
|
||||
import config from '@/config';
|
||||
import { MessageEventBus } from '../../eventbus/MessageEventBus/MessageEventBus';
|
||||
import Container from 'typedi';
|
||||
import { License } from '@/License';
|
||||
|
||||
// this function handles commands sent to the MAIN instance. the workers handle their own commands
|
||||
export async function handleCommandMessage(messageString: string, uniqueInstanceId: string) {
|
||||
export async function handleCommandMessage(messageString: string) {
|
||||
const queueModeId = config.get('redis.queueModeId');
|
||||
const message = messageToRedisServiceCommandObject(messageString);
|
||||
if (message) {
|
||||
if (
|
||||
message.senderId === uniqueInstanceId ||
|
||||
(message.targets && !message.targets.includes(uniqueInstanceId))
|
||||
message.senderId === queueModeId ||
|
||||
(message.targets && !message.targets.includes(queueModeId))
|
||||
) {
|
||||
// Skipping command message because it's not for this instance
|
||||
LoggerProxy.debug(
|
||||
`Skipping command message ${message.command} because it's not for this instance.`,
|
||||
);
|
||||
@@ -18,8 +21,16 @@ export async function handleCommandMessage(messageString: string, uniqueInstance
|
||||
}
|
||||
switch (message.command) {
|
||||
case 'reloadLicense':
|
||||
await Container.get(License).reload();
|
||||
// at this point in time, only a single main instance is supported, thus this
|
||||
// command _should_ never be caught currently (which is why we log a warning)
|
||||
LoggerProxy.warn(
|
||||
'Received command to reload license via Redis, but this should not have happened and is not supported on the main instance yet.',
|
||||
);
|
||||
// once multiple main instances are supported, this command should be handled
|
||||
// await Container.get(License).reload();
|
||||
break;
|
||||
case 'restartEventBus':
|
||||
await Container.get(MessageEventBus).restart();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user