Skip to content

Comments

Bump wire-server to 5.25.0 and fix background-worker PostgreSQL config#867

Open
sghosh23 wants to merge 12 commits intomasterfrom
fix/bump-wire-server-5.25-pg-secrets
Open

Bump wire-server to 5.25.0 and fix background-worker PostgreSQL config#867
sghosh23 wants to merge 12 commits intomasterfrom
fix/bump-wire-server-5.25-pg-secrets

Conversation

@sghosh23
Copy link
Contributor

Summary

  • Cherry-picks wire-builds bump to 5.25.0 from PR Update wire-builds #843 (commit aa181b84)
  • Adds missing background-worker PostgreSQL configuration and secret sync

Changes

1. offline/tasks/proc_pull_charts.sh

Cherry-picked from #843 — updates wire-builds reference to 5.25.0 (5a74084).

2. bin/offline-helm.sh

Adds .background-worker.secrets.pgPassword to sync_pg_secrets(). The function previously synced PostgreSQL passwords only to brig, galley, spar, and gundeck — but background-worker has required pgPassword since Chart 5.24.0.

3. values/wire-server/prod-values.example.yaml

  • background-worker: Adds postgresql connection config (host, port, user, dbname) and explicit postgresMigration.conversation: cassandra
  • galley: Adds explicit postgresMigration.conversation: cassandra

⚠️ Critical Note: background-worker default bug at 5.25.0

At Chart 5.25.0, the background-worker Helm chart incorrectly defaults postgresMigration.conversation to postgresql instead of cassandra (fixed in 5.26.0). Without the explicit override added in this PR:

  • User Group → Channel sync background jobs read conversations from PostgreSQL (where they don't exist yet)
  • Jobs get Nothing and silently skip member synchronization
  • No crash or error — just silent data inconsistency

This PR adds the explicit cassandra override as a workaround.

Related

  • Supersedes the wire-builds portion of Update wire-builds #843
  • Addresses background-worker PostgreSQL gap discovered during 5.5→5.25 migration planning

zebot and others added 2 commits February 10, 2026 11:48
Wire Server: 5.25.0

Changed charts:
- account-pages: 0.9.0-pre.1 → 0.9.0-pre.49
- wire-server: 5.23.0 → 5.25.0
- redis-ephemeral: 5.23.0 → 5.25.0
- rabbitmq: 5.23.0 → 5.25.0
- rabbitmq-external: 5.23.0 → 5.25.0
- databases-ephemeral: 5.23.0 → 5.25.0
- fake-aws: 5.23.0 → 5.25.0
- fake-aws-s3: 5.23.0 → 5.25.0
- fake-aws-sqs: 5.23.0 → 5.25.0
- aws-ingress: 5.23.0 → 5.25.0
- fluent-bit: 5.23.0 → 5.25.0
- kibana: 5.23.0 → 5.25.0
- backoffice: 5.23.0 → 5.25.0
- calling-test: 5.23.0 → 5.25.0
- demo-smtp: 5.23.0 → 5.25.0
- elasticsearch-curator: 5.23.0 → 5.25.0
- elasticsearch-external: 5.23.0 → 5.25.0
- elasticsearch-ephemeral: 5.23.0 → 5.25.0
- minio-external: 5.23.0 → 5.25.0
- cassandra-external: 5.23.0 → 5.25.0
- ingress-nginx-controller: 5.23.0 → 5.25.0
- nginx-ingress-services: 5.23.0 → 5.25.0
- reaper: 5.23.0 → 5.25.0
- restund: 5.23.0 → 5.25.0
- k8ssandra-test-cluster: 5.23.0 → 5.25.0
- webapp: 0.8.0-pre.1876 → 0.8.0-pre.1963
- ldap-scim-bridge: 5.23.0 → 5.25.0
- k8ssandra-operator: 1.16.0 → 1.18.0
- step-certificates: 1.25.0 → 1.28.6
- wire-server-enterprise: 5.23.0 → 5.25.0
- postgresql-external: 0.0.44 → 0.0.45

Build: https://raw.githubusercontent.com/wireapp/wire-builds/5a74084feeb1138925dcb671b333da0c76f88f08/build.json
…ync for wire-server 5.25.0

- Add .background-worker.secrets.pgPassword to sync_pg_secrets() in
  bin/offline-helm.sh so the PostgreSQL password is synced to
  background-worker values alongside brig/galley/spar/gundeck
- Add postgresql connection config (host, port, user, dbname) to
  background-worker section in prod-values.example.yaml
- Add explicit postgresMigration.conversation=cassandra for both
  galley and background-worker in prod-values.example.yaml
- The background-worker override is critical at Chart 5.25.0 where
  the Helm chart incorrectly defaults this value to "postgresql"
  instead of "cassandra", causing User Group to Channel sync jobs
  to silently skip member synchronization
@sghosh23
Copy link
Contributor Author

Note on prod-values.example.yaml for 5.25.0: please keep the example.com placeholders (e.g., federationDomain, conversationCodeURI, deeplink endpoints) and do not replace them in this PR. These must be configured per deployment/host, so the file should remain a template with example values and guidance instead of hardcoding a specific domain.

Copy link
Contributor

@Veki301 Veki301 left a comment

Choose a reason for hiding this comment

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

there is alot of context here that are specific to what is on your machine or the remote you worked on (/Users/sukanta.ghosh, /home/demo/new), without any specific disclaimers of it being so, lots of hardcoding, I didn't want to leave a comment on every single one I saw so Im writing it here
Our usual customer facing language (and perspective) was from inside what we usually call wire-server-deploy directory
Have the documentation explicitly state to get a new bundle, untar it in a new directory (you can even explicitly say mkdir new and then work your way through all the steps as if you/user is in that directory
I am all in favour of automating what has to be done here, and this will probably not be an issue for the customer this has been written for, but some might refuse to run python scripts and I trust you can do all this manually if needed

host: elasticsearch-external
rabbitmq:
host: rabbitmq # For k8s-based RabbitMQ (default). Use 'rabbitmq-external' for production external RabbitMQ VMs
host: rabbitmq-external # Use rabbitmq-external for production external RabbitMQ VMs
Copy link
Contributor

Choose a reason for hiding this comment

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

this is whats breaking the CI at the moment, Mohit has implemented rabbitmq-external deployment in our CI run in one of his PRs
Revert all rabbitmq-external changes so you guys don't step on each others toes and also the CI here will get a pass

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I wont change rather wait when CI is actually using rabbitmq-external as the PR is ready to deploy thats what i understand, let me know if i am wrong!

Copy link
Contributor

Choose a reason for hiding this comment

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

sent you a DM

# Wire Server Upgrade Changes (5.5.0 -> 5.25.0)

This document captures the concrete changes applied during the upgrade work so the setup can be reproduced reliably.

Copy link
Contributor

Choose a reason for hiding this comment

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

add the link to the bundle you used for the upgrade here
EDIT: considering my previous comments, we should build a new bundle with these in it, then reference that one here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yup

Copy link
Contributor

Choose a reason for hiding this comment

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

considering I am in agreement with your reasoning on the tools and do we ship them, use just the bundle you performed the upgrade with

@sghosh23
Copy link
Contributor Author

there is alot of context here that are specific to what is on your machine or the remote you worked on (/Users/sukanta.ghosh, /home/demo/new), without any specific disclaimers of it being so, lots of hardcoding, I didn't want to leave a comment on every single one I saw so Im writing it here Our usual customer facing language (and perspective) was from inside what we usually call wire-server-deploy directory Have the documentation explicitly state to get a new bundle, untar it in a new directory (you can even explicitly say mkdir new and then work your way through all the steps as if you/user is in that directory I am all in favour of automating what has to be done here, and this will probably not be an issue for the customer this has been written for, but some might refuse to run python scripts and I trust you can do all this manually if needed

Thanks for reviewing @Veki301,
Can someone run the migration manually? : Yes, first of all, one can run all the processes manually by following the phases, so its totally upto the user.
Hardcoded new bundle path: I added env var for WIRE_BUNDLE_ROOT and others to run the scripts. Totally agree that the README has to clean and. more precise.

- Replace all hardcoded /home/demo/new paths with WIRE_BUNDLE_ROOT
- Update fallback defaults to /home/demo/wire-server-deploy-new
- Add global Prerequisites section in README.md
- Document kubeconfig.dec copy requirement from existing deployment
- Fix kubeconfig path to use ${WIRE_BUNDLE_ROOT}
- Add automatic script copying in cleanup-containerd-images-all.sh
- Remove duplication in CASSANDRA_MIGRATIONS.md
- Improve cross-references between documentation files
- Standardize all example paths to /home/demo/wire-server-deploy-new

Changed files:
- README.md: Added Prerequisites, fixed paths, improved structure
- CASSANDRA_MIGRATIONS.md: Removed duplication, fixed paths
- WIRE_UPGRADE_CHANGES.md: Distinguished new vs existing deployment paths
- wire_sync_lib.py: Updated BUNDLE_ROOT default
- cassandra_backup.py: Updated inventory default path
- cleanup-containerd-images-all.sh: Auto-copy script, updated paths
- upgrade-all-charts.sh: Updated BUNDLE_ROOT default

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@sghosh23 sghosh23 force-pushed the fix/bump-wire-server-5.25-pg-secrets branch from b81a1a6 to 12c12d4 Compare February 19, 2026 14:02
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
3.1% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants