-
Notifications
You must be signed in to change notification settings - Fork 7.8k
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): Unify application components shutdown #8097
Conversation
db9b069
to
c31a958
Compare
d0dabfa
to
7bc8594
Compare
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. This looks great ❤️
Ideas for next steps:
- Move all shutdown logic out of commands, and into specific services
- Convert
@/Db
into a service class, that handles closing of the DB connection itself - Move SIGINT and SIGTERM registration/handling into
ShutdownService
, and add integration tests to make sure thatprocess.emit('SIGINT')
causes allOnShutdown
methods to be called in the correct order. - Move graceful shutdown timer and
process.exit
intoShutdownService
- Start adding a
OnStartup
decorator to do initialization the same way, and significantly simplify app startup sequence.
1 flaky test on run #3468 ↗︎
Details:
cypress/e2e/17-sharing.cy.ts • 1 flaky test
Review all test suite changes for PR #8097 ↗︎ |
✅ All Cypress E2E specs passed |
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.
One relatively small thing that was on my to-do list for a while and might easily be addressed in this PR is adding the @OnShutdown
annotation to the removeAllTriggerAndPollerBasedWorkflows
method that is located in packages/cli/src/ActiveWorkflowRunner.ts
.
Currently when n8n is shutting down it still continues to start new executions and start new jobs, even if it's theoretically stopping.
This new approach makes it trivial to fix this issue.
Thanks for the amazing work @tomi
@krynble Thanks! I added the annotation to @netroy Could you re-approve 🙏 |
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.
Loved this, amazing work!
Edit: Reviewed up to c3d1144
2da7e1d
to
3f2281c
Compare
✅ All Cypress E2E specs passed |
* master: feat(core): Unify application components shutdown (#8097) refactor(core): Upgrade more dependencies to remove axios 0.x (no-changelog) (#8105) refactor(core): Move active workflows endpoints to a decorated controller class (no-changelog) (#8101) fix(editor): Prevent canvas undo/redo when NDV is open (#8118) fix(editor): Fix operation change failing in certain conditions (#8114) fix(Asana Node): Omit body from GET, HEAD, and DELETE requests (#8057) fix(Redis Trigger Node): Activating a workflow with a Redis trigger fails (#8129) refactor(Peekalink Node): Stricter typing for Peekalink api call + Tests (no-changelog) (#8125) fix(core): Remove circular dependency in WorkflowService and ActiveWorkflowRunner (#8128) fix: Show public API upgrade CTA when feature is not enabled (#8109) feat(Snowflake Node): Update snowflake-sdk (no-changelog) (#8087) fix(core): Handle empty executions table in pruning in migrations (#8121) feat(core): Add closeFunction support to Sub-Nodes (#7708) refactor(core): Move error execution creation to execution service (no-changelog) (#8006) ci: Add lint rule `no-dynamic-import-template` (no-changelog) (#8089) feat(core): Remove discontinued crypto-js (#8104) 🚀 Release 1.22.0 (#8115) fix(core): Prevent axios from force setting a form-urlencoded content-type (#8117) feat(Respond to Webhook Node): Overhaul with improvements like returning all items (#8093)
* upstream/master: (32 commits) refactor(core): Move `typeorm` operators from `PruningService` to `ExecutionRepository` (no-changelog) (n8n-io#8145) refactor(core): Move more `typeorm` operators to repositories (no-changelog) (n8n-io#8143) refactor(core): Delete unused code, and fix typings in tests (no-changelog) (n8n-io#8142) docs: Improve documentation for the toTitleCase function (no-changelog) (n8n-io#8140) refactor(core): Move all base URLs to UrlService (no-changelog) (n8n-io#8141) feat(editor): Add template Id to workflow metadata (n8n-io#8088) fix(editor): Avoid sanitizing output to search node data (n8n-io#8126) fix(editor): Prevent browser zoom when scrolling inside sticky edit mode (n8n-io#8116) refactor(core): Move some `typeorm` operators to repositories (no-changelog) (n8n-io#8139) feat(editor): Add node execution status indicator to output panel (n8n-io#8124) feat(core): Unify application components shutdown (n8n-io#8097) refactor(core): Upgrade more dependencies to remove axios 0.x (no-changelog) (n8n-io#8105) refactor(core): Move active workflows endpoints to a decorated controller class (no-changelog) (n8n-io#8101) fix(editor): Prevent canvas undo/redo when NDV is open (n8n-io#8118) fix(editor): Fix operation change failing in certain conditions (n8n-io#8114) fix(Asana Node): Omit body from GET, HEAD, and DELETE requests (n8n-io#8057) fix(Redis Trigger Node): Activating a workflow with a Redis trigger fails (n8n-io#8129) refactor(Peekalink Node): Stricter typing for Peekalink api call + Tests (no-changelog) (n8n-io#8125) fix(core): Remove circular dependency in WorkflowService and ActiveWorkflowRunner (n8n-io#8128) fix: Show public API upgrade CTA when feature is not enabled (n8n-io#8109) ...
# [1.23.0](https://github.com/n8n-io/n8n/compare/n8n@1.22.0...n8n@1.23.0) (2024-01-03) ### Bug Fixes * **Asana Node:** Omit body from GET, HEAD, and DELETE requests ([#8057](#8057)) ([15ffd4f](15ffd4f)) * **core:** Better input validation for the changeRole endpoint ([#8189](#8189)) ([cfe9525](cfe9525)) * **core:** Fix issue that pinnedData is not used with Test-Webhooks ([#8123](#8123)) ([fa8bd8b](fa8bd8b)) * **core:** Handle empty executions table in pruning in migrations ([#8121](#8121)) ([ffaa30d](ffaa30d)) * **core:** Remove circular dependency in WorkflowService and ActiveWorkflowRunner ([#8128](#8128)) ([21788d9](21788d9)) * **core:** Use pinned data only for manual mode ([#8164](#8164)) ([ea7e76f](ea7e76f)) * **Discord Node:** Remove unnecessary requirement on parameters ([#8060](#8060)) ([ef3a577](ef3a577)) * **editor:** Avoid sanitizing output to search node data ([#8126](#8126)) ([c83d9f4](c83d9f4)) * **editor:** Enable explicit undo keyboard shortcut across all code editors ([#8178](#8178)) ([cf7f668](cf7f668)) * **editor:** Fix operation change failing in certain conditions ([#8114](#8114)) ([711fa2b](711fa2b)) * **editor:** Fix templates view layout ([#8196](#8196)) ([d01e42a](d01e42a)) * **editor:** Fix UI urls when hosted behind a path prefix ([#8198](#8198)) ([5c078f1](5c078f1)) * **editor:** Prevent browser zoom when scrolling inside sticky edit mode ([#8116](#8116)) ([e928210](e928210)) * **editor:** Prevent canvas undo/redo when NDV is open ([#8118](#8118)) ([39e45d8](39e45d8)) * **editor:** Prevent storing pairedItem data inside of pinData ([#8173](#8173)) ([405e267](405e267)) * **GitHub Node:** Fix issue that File->Get did not run once per item ([#8190](#8190)) ([11cda41](11cda41)) * **Invoice Ninja Node:** Fix issue with custom invoice numbers not working with v5 ([#8200](#8200)) ([3b6ae2d](3b6ae2d)) * **Microsoft Excel 365 Node:** Ensure arg is string during worksheet table search ([#8154](#8154)) ([8e873ca](8e873ca)) * **Notion Node:** Ensure arg is string during page ID extraction ([#8153](#8153)) ([e94b8a6](e94b8a6)) * **Redis Trigger Node:** Activating a workflow with a Redis trigger fails ([#8129](#8129)) ([a169b74](a169b74)) * **Schedule Trigger Node:** Use the correct `moment` import ([#8185](#8185)) ([17a4e2e](17a4e2e)) * Show public API upgrade CTA when feature is not enabled ([#8109](#8109)) ([e9c7fd7](e9c7fd7)) ### Features * **core:** Add closeFunction support to Sub-Nodes ([#7708](#7708)) ([bec0fae](bec0fae)) * **core:** Add user.profile.beforeUpdate hook ([#8144](#8144)) ([e126ed7](e126ed7)) * **core:** Improvements/overhaul for nodes working with binary data ([#7651](#7651)) ([5e16dd4](5e16dd4)) * **core:** Remove discontinued crypto-js ([#8104](#8104)) ([01e9a79](01e9a79)) * **core:** Unify application components shutdown ([#8097](#8097)) ([3a881be](3a881be)) * **editor:** Add node execution status indicator to output panel ([#8124](#8124)) ([ab74bad](ab74bad)) * **editor:** Add template Id to workflow metadata ([#8088](#8088)) ([517b050](517b050)) * **Home Assistant Node:** Use the new Home Assistant logo ([#8150](#8150)) ([518a99e](518a99e)) * **Qdrant Vector Store Node:** Qdrant vector store support ([#8080](#8080)) ([66460f6](66460f6)) * **Wordpress Node:** Add option to ignore error when using self signed certificates ([#8199](#8199)) ([65c8e12](65c8e12)) Co-authored-by: ivov <ivov@users.noreply.github.com>
Got released with |
Summary
Add
ShutdownService
andOnShutdown
decorator for more unified way to shutdown different components. Use this new way in the following components:Related tickets and issues
https://linear.app/n8n/issue/ADO-1617/unify-application-component-shutdown
Review / Merge checklist