-
Notifications
You must be signed in to change notification settings - Fork 7.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(core): Add secrets provider reload and refactor #7277
feat(core): Add secrets provider reload and refactor #7277
Conversation
Great PR! Please pay attention to the following items before merging: Files matching
Files matching
Make sure to check off this list before asking for review. |
import { MessageEventBus } from '../eventbus/MessageEventBus/MessageEventBus'; | ||
|
||
@Service() | ||
export class OrchestrationHandlerService { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would be great if you can please add tests and coverage for all this new functionality
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thats all part of the orchestration service tests. it's just refactored and split in two to get rid of the dependency cycles.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks for explaining.. sorry not enough context to review PR completely but just making sure we are adding tests
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## master #7277 +/- ##
==========================================
- Coverage 32.98% 32.98% -0.01%
==========================================
Files 3358 3359 +1
Lines 200231 200279 +48
Branches 21978 21978
==========================================
+ Hits 66055 66069 +14
- Misses 133067 133103 +36
+ Partials 1109 1107 -2
☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's something a bit odd happening on the subscribe to command channel - I've made a video and I'm not sure how to replicate this, but there's something weird happening.
I'd like to ask you to add more log messages to what's happening under the hood in n8n so we can better diagnose this. Some of them can be info
messages, as long as we don't flood the terminal. It's good to know what's happening and when.
Here's a link to the recording: https://www.loom.com/share/2c859bc7418a46cd8fba1785c4f4e8cc
@@ -21,16 +22,15 @@ export async function handleCommandMessage(messageString: string) { | |||
} | |||
switch (message.command) { | |||
case 'reloadLicense': | |||
// 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) | |||
// at this point in time, only a single main instance is supported, thus this command _should_ never be caught currently | |||
LoggerProxy.warn( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LoggerProxy.warn( | |
LoggerProxy.error( |
Since this shouldn't happen because it indicates a faulty setup, I think we can display as error
|
||
@Service() | ||
export class OrchestrationService { | ||
private initialized = false; | ||
|
||
redisPublisher: RedisServicePubSubPublisher; | ||
|
||
redisSubscriber: RedisServicePubSubSubscriber; | ||
get isQueueMode() { | ||
return config.getEnv('executions.mode') === 'queue'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a tricky test to make - the worker.ts
command does not require the environment variable (it does not check it). Only the webhook.ts
one does.
So this is potentially a breaking change, if someone is running queue mode without setting the environment variable for workers (this shouldn't happen since environment variables should be the same for all containers, but...).
Given this check does not exist, we have two options:
- Add the check to
worker.ts
just likewebhook.ts
so that we have a standardized process or - Check for the
instanceType
variable that is part of theBaseCommand
abstract class
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This part of the code is working fine, I think we have 2 outstanding issues:
- The
webhook
processes are subscribing to worker response channels and I'm not sure if we should do this. This screenshot below shows awebhook
getting a response from aworker
success message. I guess onlymain
should get this, notwebhook
so maybe this subscription should be avoided.
- Disabling external secrets does not clean up already loaded secrets in memory, I mean, this action should be a full reload, including cleanup. To be discussed with @valya
Passing run #2309 ↗︎
Details:
This comment has been generated by cypress-bot as a result of this project's GitHub integration settings. |
✅ All Cypress E2E specs passed |
✅ All Cypress E2E specs passed |
# [1.9.0](https://github.com/n8n-io/n8n/compare/n8n@1.8.0...n8n@1.9.0) (2023-09-28) ### Bug Fixes * **Airtable Node:** Attachments field type fix ([#7227](#7227)) ([2af967c](2af967c)) * **core:** Change WorkflowHistory nodes/connections columns to be json ([#7282](#7282)) ([a80abad](a80abad)) * **core:** Fix binary data manager check on pruning ([#7251](#7251)) ([484035e](484035e)) * **core:** Fix missing execution ID in webhook-based workflow producing binary data ([#7244](#7244)) ([33991e9](33991e9)) * **core:** Handle filename* with quotes in Content-Disposition header ([#7229](#7229)) ([67b985f](67b985f)) * **core:** Make DNS resolution order configurable ([#7272](#7272)) ([5b3121c](5b3121c)) * **core:** Make senderId required for all command messages ([#7252](#7252)) ([4b01428](4b01428)) * **core:** Prevent executions from displaying Running status incorrectly ([#7261](#7261)) ([861cac5](861cac5)) * **core:** Use consistent timezone-aware timestamps in postgres ([#6948](#6948)) ([0132514](0132514)), closes [#2178](#2178) [#2810](#2810) [#3855](#3855) [#2813](#2813) * **editor:** Add debug feature docs link ([#7240](#7240)) ([4614e1e](4614e1e)) * **editor:** Fix SQL editor issue ([#7236](#7236)) ([647fc6c](647fc6c)) * **editor:** Ensure new Set node is on top of search list ([#7215](#7215)) ([2491ccf](2491ccf)) * **editor:** Forbid password reset when cloud account is limited in the number of users [7188](#7188) ([303bc8e](303bc8e)) * **HTTP Request Node:** Add suggestion how to fix '429 - too many requests' errors ([#7293](#7293)) ([0bc33b1](0bc33b1)) * **Item Lists Node:** Concatenate operation pairedItems fix ([#7286](#7286)) ([cde23a1](cde23a1)) * **Respond to Webhook Node:** JSON output from expression fix ([#7294](#7294)) ([8bc369d](8bc369d)) ### Features * Add onboarding flow ([#7212](#7212)) ([01e9340](01e9340)) * **core:** Add secrets provider reload and refactor ([#7277](#7277)) ([53a7502](53a7502)) * **core:** Add Tournament as the new default expression evaluator ([#6964](#6964)) ([bf74f09](bf74f09)) * **core:** Initial workflow history API ([#7234](#7234)) ([0083a9e](0083a9e)) * **core:** Introduce object store service ([#7225](#7225)) ([fa84545](fa84545)) * **editor:** Add user cloud ID to telemetry [#7232](#7232) ([60c152d](60c152d)) * **editor:** Rework banners framework and add email confirmation banner ([#7205](#7205)) ([b0e98b5](b0e98b5)) * **MISP Node:** Update credential to support HTTP Request node ([#7268](#7268)) ([e4c302c](e4c302c)) ### Performance Improvements * **core:** Skip unneeded calls on every pruning cycle ([#7260](#7260)) ([db01164](db01164)) Co-authored-by: netroy <netroy@users.noreply.github.com>
Got released with |
* master: fix(editor): Separate cloud endpoint calls (#7312) fix(core): Account for itemless case on restoring binary data ID (#7305) feat(editor): Workflow history [WIP]- create workflow history list component (no-changelog) (#7186) feat(core): Add plan name to telemetry (no-changelog) (#7296) ci: Fix typescript incremental builds (no-changelog) (#7275) fix(Postgres Node): Node requires comma-separated string even when using a single parameter through an expression (#7300) fix(Notion Node): Rename Notion API Key to Internal Integration Token (#7176) 🚀 Release 1.9.0 (#7288) ci: Refactor DB tests (no-changelog) (#7292) fix(HTTP Request Node): Add suggestion how to fix '429 - too many requests' errors (#7293) fix(Respond to Webhook Node): JSON output from expression fix (#7294) feat(core): Add secrets provider reload and refactor (#7277)
This PR adds a message for queue mode which triggers an external secrets provider reload inside the workers if the configuration has changed on the main instance.
It also refactors some of the message handler code to remove cyclic dependencies, as well as remove unnecessary duplicate redis clients inside services (thanks to no more cyclic deps)