Skip to content

fix: restart deployment if env changes#1665

Merged
zzzming merged 4 commits into
mainfrom
fix-dot-env-deploy
May 22, 2026
Merged

fix: restart deployment if env changes#1665
zzzming merged 4 commits into
mainfrom
fix-dot-env-deploy

Conversation

@zzzming

@zzzming zzzming commented May 22, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Deployments for backend and Langflow now automatically roll when their environment configuration changes using stable content hashing.
  • Bug Fixes

    • Ensures config updates reliably trigger service restarts so new env settings take effect immediately.
  • Tests

    • Added tests verifying deterministic hashing, env-change detection, stable hashes across reconciles, and that rollouts only occur when env content actually changes.

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4c595050-146c-4043-88ad-02da81a6a825

📥 Commits

Reviewing files that changed from the base of the PR and between 0e3e89e and 67d0f87.

📒 Files selected for processing (1)
  • kubernetes/operator/internal/controller/openrag_controller_test.go

Walkthrough

The controller now calculates SHA256 hashes of backend and Langflow .env secret content, returns those hashes from reconcileEnvSecrets, and passes them to reconcileDeployments. Deployments’ pod templates receive openr.ag/backend-env-hash and openr.ag/langflow-env-hash annotations to trigger rolling restarts when .env content changes.

Changes

Environment hash-based deployment rollout

Layer / File(s) Summary
Hash calculation helper
kubernetes/operator/internal/controller/openrag_controller.go
New calculateHash function computes SHA256 hex digest of env content for use in pod template annotations.
Environment secrets reconciliation with hash computation
kubernetes/operator/internal/controller/openrag_controller.go
reconcileEnvSecrets signature changed to return (backendHash, langflowHash, error); hash computation occurs during env secret reconciliation and the creation/update loop returns the computed hashes.
Reconcile loop integration
kubernetes/operator/internal/controller/openrag_controller.go
Reconcile captures returned hashes from reconcileEnvSecrets and threads them to reconcileDeployments so deployment generation can access and apply them.
Deployment pod annotations with env hashes
kubernetes/operator/internal/controller/openrag_controller.go
reconcileDeployments accepts env hashes and wires them into backendDeployment and langflowDeployment; both set pod annotations (openr.ag/backend-env-hash, openr.ag/langflow-env-hash) to trigger rolling restarts on .env changes.
Unit and reconciliation tests for env-hash behavior
kubernetes/operator/internal/controller/openrag_controller_test.go
Adds tests for calculateHash determinism/difference, stable hash across reconciles, hash change when env changes, and presence/change-of env-hash annotations on Deployments.

Sequence Diagram

sequenceDiagram
  participant Reconcile
  participant reconcileEnvSecrets
  participant reconcileDeployments
  participant backendDeployment
  participant langflowDeployment
  Reconcile->>reconcileEnvSecrets: reconcile env secrets
  reconcileEnvSecrets-->>Reconcile: (backendHash, langflowHash, error)
  Reconcile->>reconcileDeployments: reconcile deployments with hashes
  reconcileDeployments->>backendDeployment: call with backendHash
  backendDeployment->>backendDeployment: set pod annotation openr.ag/backend-env-hash
  reconcileDeployments->>langflowDeployment: call with langflowHash
  langflowDeployment->>langflowDeployment: set pod annotation openr.ag/langflow-env-hash
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

tests

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.22% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly relates to the main change: implementing env-hash annotations to trigger pod restarts when environment variables change, which is precisely what the PR accomplishes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-dot-env-deploy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added the bug 🔴 Something isn't working. label May 22, 2026
@github-actions github-actions Bot added bug 🔴 Something isn't working. and removed bug 🔴 Something isn't working. labels May 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@kubernetes/operator/internal/controller/openrag_controller_test.go`:
- Around line 1448-1460: The test reads the "openr.ag/backend-env-hash"
annotation into hash1/hash2 but never asserts the annotation exists, allowing a
false-positive when the key is missing; update the test to first assert the
annotation key is present on backendDeploy1 and backendDeploy2 (e.g., using
require.Contains or require.Containsf against
backendDeploy1.Spec.Template.ObjectMeta.Annotations and
backendDeploy2.Spec.Template.ObjectMeta.Annotations for
"openr.ag/backend-env-hash"), then read the values into hash1/hash2 and finally
assert they are equal; this ensures reconcileOnce, backendDeploy1/backendDeploy2
and resourceName("be") are validated correctly and prevents
empty/missing-annotation passes.
- Line 1371: Replace uses of backendDeploy.Spec.Template.ObjectMeta.Annotations
(and the analogous langflowDeploy.Spec.Template.ObjectMeta.Annotations and hash
reads) with Spec.Template.Annotations throughout the test so you stop accessing
ObjectMeta explicitly; specifically update the occurrences referenced (the
backendDeploy and langflowDeploy annotation reads and the hash comparisons) to
use backendDeploy.Spec.Template.Annotations and
langflowDeploy.Spec.Template.Annotations instead, and update any code that reads
the env-hash keys to read from those maps; optionally, in
TestDeployment_NoHashChangeWhenEnvUnchanged add a require.Contains or
require.NotEmpty assertion on the podAnnotations["openr.ag/backend-env-hash"]
and podAnnotations["openr.ag/langflow-env-hash"] to guard against empty-map
regressions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5a3185a1-37b3-4ec9-894d-29a604c1bea3

📥 Commits

Reviewing files that changed from the base of the PR and between 289a3cb and 0e3e89e.

📒 Files selected for processing (1)
  • kubernetes/operator/internal/controller/openrag_controller_test.go

Comment thread kubernetes/operator/internal/controller/openrag_controller_test.go Outdated
Comment thread kubernetes/operator/internal/controller/openrag_controller_test.go Outdated
@github-actions github-actions Bot added bug 🔴 Something isn't working. and removed bug 🔴 Something isn't working. labels May 22, 2026
@github-actions github-actions Bot added bug 🔴 Something isn't working. and removed bug 🔴 Something isn't working. labels May 22, 2026
@zzzming zzzming merged commit ad2a136 into main May 22, 2026
11 checks passed
@github-actions github-actions Bot deleted the fix-dot-env-deploy branch May 22, 2026 18:07
ricofurtado pushed a commit that referenced this pull request May 23, 2026
* restart deployment if env changes

* unit test

* lint
ricofurtado pushed a commit that referenced this pull request May 23, 2026
* restart deployment if env changes

* unit test

* lint
ricofurtado added a commit that referenced this pull request May 26, 2026
* fix: Ensure SUCCESS status requires fetchable result in DoclingPollingService

* style: ruff autofix (auto)

* fix: Catch specific DoclingServeError when fetching task result after SUCCESS status

* feat: update style for oss of the failed task in the task panel (#1647)

* update style for oss of the failed task in the task panel

* keep logic on click, remove unecessary useeffect

* fix padding

* wip implementing Saas style

* utils to reshape error until backend provide info we need

* utils to reshape error until backend provide info we need

* utils to reshape error until backend provide info we need and fixinf fallbacks of isTotalFailure

* utils to reshape error until backend provide into

* have Saas style for failed and complete labelstatus and width and border

* few style adjustment to follow codebase pattern

* adjust succeed and partially succeed case

* adding comment for TODO implementation or more clarity

* remove carbon icon package and replace carbon icon

* add incident-reporter-icon

---------

Co-authored-by: Olfa Maslah <[email protected]>

* fix: Encode IBM API key as Basic auth header (#1664)

* Encode IBM API key as Basic auth header

Add base64 encoding for the IBM auth path: import base64, construct a Basic auth token from X-Username and X-Api-Key (username:apikey), and store it in user.jwt_token and user.opensearch_credentials. Also set request.state.user before attaching the DB user ID so downstream code can access the created user object.

* style: ruff autofix (auto)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: restart deployment if env changes (#1665)

* restart deployment if env changes

* unit test

* lint

* fix: Ensure Langflow .env variable definitions from LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT (#1667)

* Ensure we dynamically update the list of Langflow .env environment variables with default values when the comma separated list defined in LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT changes

* fix tests

* fix additional linting errors

---------

Co-authored-by: rodageve <[email protected]>

* chore: Retire openrag-mcp; switch docs to streamable HTTP (#1668)

* Retire openrag-mcp; switch docs to streamable HTTP

Remove the stdio-based MCP server and all in-repo MCP tooling, and update README to mark the package as retired. Deleted module files include the MCP entrypoint, server, config, registry and individual tools (chat, search, documents, settings). The README was rewritten to announce that openrag-mcp is retired, explain migration to the built-in streamable-HTTP /mcp endpoint, update Cursor/Claude examples to use URL+headers auth, list the new v1 API tools, and note that the last PyPI release is final. This change consolidates MCP functionality into the OpenRAG core and removes the subprocess/stdio implementation and its source code.

* Mark MCP SDK retired and clean package metadata

Update package metadata to reflect retirement and integration into the OpenRAG backend. Bump version to 0.3.0 and replace the project description with a retirement/migration note. Set Development Status to Inactive, remove explicit Python version classifiers, and clear runtime dependencies and the CLI script entrypoint. Also remove the hatch env pip-args setting; build-system and wheel package target remain unchanged.

* chore: update uv.lock files after version bump

* Update uv.lock

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix: connector sync and override feature (#1663)

* Add filename-based duplicate handling for connectors

Add end-to-end support for filename-based duplicate handling on connector ingests.

Frontend: send a new replace_duplicates flag with connector sync requests, perform a pre-sync duplicate check, and show a DuplicateHandlingDialog that lets users overwrite or skip duplicates when uploading from provider UI.

Backend: propagate replace_duplicates through connector_router, request models, and connector services into the file processors. ConnectorFileProcessor and LangflowConnectorFileProcessor now check whether a filename already exists in the index and either fail the file task or delete the existing document before ingesting when replace_duplicates is true.

Utilities/tests: clean_connector_filename now preserves original spacing/slashes and only enforces MIME-mapped extensions; get_filename_aliases adds underscore/sanitized variants so lookups match connector-indexed names. Add unit tests covering filename dedupe logic and filename alias behavior.

* Use duplicateNames list and display names

Replace numeric duplicateCount with a duplicateNames string[] across upload and dropdown flows so the UI can show the actual file names that would be overwritten. The duplicate-handling dialog now accepts duplicateNames, derives an effective count, and lists up to 5 duplicate filenames with an "… and N more" indicator; message labels and button text use the effective count. Toast messages and pending state in upload/[provider]/page.tsx and knowledge-dropdown.tsx were updated to pass and consume duplicateNames and to use duplicateNames.length for counts.

* Update page.tsx

* style: ruff autofix (auto)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: update OAuth prompt to consent for connector mutation (#1657)

* fix: implement transient error handling for Docling result fetch

* style: ruff autofix (auto)

* refactor: remove unused import of Optional in docling_polling_service.py

* refactor: change PollOutcome to use StrEnum for better type safety

* refactor: enhance task status endpoints with structured failure metadata

* style: ruff autofix (auto)

* revert "style: ruff autofix (auto)"

This reverts commit bc8be33.

* style: ruff autofix (auto)

* fix: Ensure SUCCESS status requires fetchable result in DoclingPollingService

* style: ruff autofix (auto)

* fix: Catch specific DoclingServeError when fetching task result after SUCCESS status

* fix: implement transient error handling for Docling result fetch

* style: ruff autofix (auto)

* refactor: remove unused import of Optional in docling_polling_service.py

* refactor: change PollOutcome to use StrEnum for better type safety

* refactor: enhance task status endpoints with structured failure metadata

* style: ruff autofix (auto)

* revert "style: ruff autofix (auto)"

This reverts commit bc8be33.

* style: ruff autofix (auto)

* Update tests/unit/test_task_service_get_task_status2.py

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* style: ruff autofix (auto)

* fix: handle timeout during Docling result fetch after SUCCESS status

* fix: update task status checks to use enum values for consistency

* fix: enhance failure metadata for duplicate file errors in ingestion

* style: ruff autofix (auto)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Wallgau <[email protected]>
Co-authored-by: Olfa Maslah <[email protected]>
Co-authored-by: Edwin Jose <[email protected]>
Co-authored-by: ming <[email protected]>
Co-authored-by: rodageve <[email protected]>
Co-authored-by: rodageve <[email protected]>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug 🔴 Something isn't working.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant