[PR #22750] feat(k8s): Add pure migration option for api component #30046

Closed
opened 2026-02-21 20:46:44 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/22750

State: closed
Merged: Yes


Important

  1. Make sure you have read our contribution guidelines
  2. Ensure there is an associated issue and you have been assigned to it
  3. Use the correct syntax to link this PR: Fixes #<issue number>.

Summary

This PR ease maintenance in k8s scenario by adding pure migration mode that execute data migration logic and exit normally without launching the web server. This is useful when upgrading dify version, as it enable the maintainer to launch a separate container that execute the flask upgrade-db logic via entrypoint.sh instead of tampering with the actual api or worker

Without this mode, this logic will be executed in both api and worker component instead of a standalone, single replica logic. This will case dead lock in case there are multiple replica of api or worker, or if the worker starts before api and tries to execute the migration logic that end up with issues like https://github.com/langgenius/dify/issues/19910. With this migration only mode, it's possible to disable auto migration for api and worker and bring up a standalone container that does the migration beforehand (via a Job defined with pre-installation hook annotation that recognized by Helm).

Screenshots

Before After
Server will launch after flask upgrade-db Run flask upgrade-db only without launching server when MODE=migration

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/22750 **State:** closed **Merged:** Yes --- > [!IMPORTANT] > > 1. Make sure you have read our [contribution guidelines](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) > 2. Ensure there is an associated issue and you have been assigned to it > 3. Use the correct syntax to link this PR: `Fixes #<issue number>`. ## Summary This PR ease maintenance in k8s scenario by adding pure migration mode that execute data migration logic and exit normally without launching the web server. This is useful when upgrading `dify` version, as it enable the maintainer to launch a separate container that execute the `flask upgrade-db` logic via `entrypoint.sh` instead of tampering with the actual `api` or `worker` Without this mode, this logic will be executed in both `api` and `worker` component instead of a standalone, single replica logic. This will case dead lock in case there are multiple replica of `api` or `worker`, or if the `worker` starts before `api` and tries to execute the migration logic that end up with issues like https://github.com/langgenius/dify/issues/19910. With this migration only mode, it's possible to disable auto migration for `api` and `worker` and bring up a standalone container that does the migration beforehand (via a `Job` defined with pre-installation hook annotation that recognized by `Helm`). <!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. --> ## Screenshots | Before | After | |--------|-------| | Server will launch after `flask upgrade-db` | Run `flask upgrade-db` only without launching server when `MODE=migration` | ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:46:44 -05:00
yindo closed this issue 2026-02-21 20:46:44 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#30046