Skip to content

fix(8.8): back Web Modeler restapi /tmp with a per-pod ephemeral volume#6408

Merged
eamonnmoloney merged 2 commits into
mainfrom
feat/4767-persistence-scenario-8.8
Jun 26, 2026
Merged

fix(8.8): back Web Modeler restapi /tmp with a per-pod ephemeral volume#6408
eamonnmoloney merged 2 commits into
mainfrom
feat/4767-persistence-scenario-8.8

Conversation

@eamonnmoloney

@eamonnmoloney eamonnmoloney commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Backs the Web Modeler restapi /tmp volume with a per-pod generic ephemeral volume instead of a shared chart-managed ReadWriteOnce PVC. Consistency/hardening backport of the 8.9 (#6027) and 8.10 (#6406) fix.

Why

The restapi persistence volume backs only the container's /tmp scratch directory — pod-local and disposable (Web Modeler's durable state lives in PostgreSQL, the document store, and Elasticsearch). Backing disposable per-pod scratch with a shared, node-locked RWO PVC exposes a Multi-Attach deadlock on helm upgrade (RWO single-attach + a RollingUpdate surge).

Unlike 8.9/8.10, 8.8 was not affected by the claimName casing bug — it already uses the correct lowercase webmodeler-data, so there was no install-Pending failure here. This PR is therefore a hardening/consistency backport, not a fix for a broken install.

What changed

  • deployment-restapi.yaml: chart-managed persistence path now renders an ephemeral.volumeClaimTemplate (per-pod PVC created/destroyed with the pod), carrying the same size/accessModes/storageClassName/selector/annotations. emptyDir default and existingClaim paths unchanged.
  • Removed the standalone persistentvolumeclaim-restapi.yaml.
  • Unit tests updated to assert the ephemeral source; dropped the now-dead shared-PVC manifest test.

The component-persistence (cprst) CI scenario already present on this chart now exercises the ephemeral path (no scenario changes needed here).

⚠️ Minimum platform versions

Generic ephemeral volumes are GA since Kubernetes 1.23 / OpenShift 4.10 (alpha 1.19, beta-on-by-default 1.21) — well within Camunda's supported matrix. No new storage requirement: a generic ephemeral volume provisions a normal PVC via the same StorageClass / dynamic-provisioning path the old shared PVC used (it is not a CSI inline volume). Any cluster that could provision the old <release>-webmodeler-data PVC can provision the per-pod ephemeral PVC.

Notes

Test plan

  • make go.test chartPath=charts/camunda-platform-8.8
  • make helm.lint chartPath=charts/camunda-platform-8.8
  • nightly cprst (install) green on 8.8

Review follow-ups (crev)

  • ADR 0092 is superseded for Web Modeler by this change. The guard message, values.yaml @param, and generated schema/README have been narrowed so Recreate is described only for the existingClaim-with-RWO case. The ADR amendment + possible knob removal are tracked in chore: amend ADR 0092 and retire webModeler.persistence.deploymentStrategy after ephemeral-volume switch #6409.
  • Upgrade/migration note: operators who previously set webModeler.persistence.enabled=true may have a <release>-webmodeler-data PVC. helm upgrade removes the now-unreferenced template PVC; if your provisioner retained one, delete it: kubectl delete pvc <release>-webmodeler-data -n <namespace>. (8.8 was not affected by the casing bug, so the PVC may have provisioned normally here — verify before deleting.)

@github-actions github-actions Bot added version/8.8 Camunda applications/cycle version component/web-modeler labels Jun 18, 2026
@eamonnmoloney eamonnmoloney force-pushed the feat/4767-persistence-scenario-8.8 branch from ba90bf0 to 6200f08 Compare June 18, 2026 12:33
@eamonnmoloney eamonnmoloney marked this pull request as ready for review June 18, 2026 13:03
@eamonnmoloney eamonnmoloney requested a review from a team as a code owner June 18, 2026 13:03
@eamonnmoloney eamonnmoloney requested review from bkenez and Copilot and removed request for a team June 18, 2026 13:03

Copilot AI 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.

Pull request overview

Backports the Web Modeler restapi /tmp persistence change to chart 8.8, switching from a chart-managed shared RWO PVC to a per-pod generic ephemeral volume to avoid shared-volume attach contention during rollouts, and updates associated tests/docs.

Changes:

  • Render webModeler.persistence.enabled=true as ephemeral.volumeClaimTemplate (per-pod PVC) in deployment-restapi.yaml and remove the standalone PVC manifest.
  • Update unit tests to assert the ephemeral volume source and drop the now-dead PVC-manifest test.
  • Refresh docs/schema text around webModeler.persistence.deploymentStrategy to reflect the new default persistence behavior.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
charts/camunda-platform-8.8/values.yaml Updates parameter docs for webModeler.persistence.deploymentStrategy.
charts/camunda-platform-8.8/values.schema.json Aligns schema description for webModeler.persistence.deploymentStrategy.
charts/camunda-platform-8.8/templates/web-modeler/deployment-restapi.yaml Switches /tmp persistence from shared PVC to per-pod generic ephemeral volume.
charts/camunda-platform-8.8/templates/web-modeler/persistentvolumeclaim-restapi.yaml Removes the shared chart-managed PVC manifest.
charts/camunda-platform-8.8/test/unit/web-modeler/persistence_test.go Updates assertions to validate ephemeral volume behavior; removes shared-PVC manifest test.
charts/camunda-platform-8.8/README.md Regenerates/updates rendered docs to match updated values descriptions.

Comment on lines +205 to +211
ephemeral:
volumeClaimTemplate:
{{- with .Values.webModeler.persistence.annotations }}
metadata:
annotations: {{- toYaml . | nindent 18 }}
{{- end }}
spec:
## @param webModeler.persistence.selector can be used to define a label selector for the persistent volume claim
selector: {}
## @param webModeler.persistence.deploymentStrategy update strategy for the restapi Deployment. Defaults to RollingUpdate (zero-downtime), which only works when the PVC supports concurrent attach (RWX storage, or accessModes including ReadWriteMany). For chart-managed PVCs on RWO storage, set to "Recreate" to avoid Multi-Attach deadlocks during helm upgrade (introduces brief downtime per upgrade).
## @param webModeler.persistence.deploymentStrategy update strategy for the restapi Deployment. Defaults to RollingUpdate, which is always safe because the default chart-managed persistence path uses a per-pod ephemeral volume (no concurrent-attach contention). Set to "Recreate" only when using existingClaim with a ReadWriteOnce volume that cannot tolerate concurrent attach during a rollout (introduces brief downtime per upgrade).
eamonnmoloney and others added 2 commits June 26, 2026 05:18
The restapi persistence PVC backs only the pod-local /tmp scratch directory.
A shared chart-managed ReadWriteOnce PVC for disposable per-pod scratch
exposes a Multi-Attach deadlock on helm upgrade (RWO single-attach +
RollingUpdate surge).

Switch the chart-managed path to a generic ephemeral volume (per-pod PVC) and
remove the standalone persistentvolumeclaim-restapi.yaml. emptyDir default and
existingClaim paths are unchanged. The component-persistence (cprst) CI
scenario already present on this chart now exercises the ephemeral path.

Also narrow the deploymentStrategy guard message and the values.yaml @param
(and regenerated schema/README) to reflect that Recreate is now only relevant
for the existingClaim RWO case, not the default per-pod ephemeral path.

8.8 was not affected by the claimName casing bug (it already used the correct
lowercase name), so this is a consistency/hardening backport of the 8.9/8.10
fix rather than a fix for a broken install.

Requires Kubernetes 1.23+ / OpenShift 4.10+ (generic ephemeral volumes GA).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@eamonnmoloney eamonnmoloney force-pushed the feat/4767-persistence-scenario-8.8 branch from 3233edc to bbd5669 Compare June 26, 2026 04:18
@eamonnmoloney eamonnmoloney enabled auto-merge June 26, 2026 04:21
@eamonnmoloney eamonnmoloney added this pull request to the merge queue Jun 26, 2026
Merged via the queue into main with commit 355cd90 Jun 26, 2026
70 checks passed
@eamonnmoloney eamonnmoloney deleted the feat/4767-persistence-scenario-8.8 branch June 26, 2026 04:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/web-modeler version/8.8 Camunda applications/cycle version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants