Skip to content

refactor(8.9,8.10): remove redundant camundaexporter from zeebe.broker.exporters#6454

Open
eamonnmoloney wants to merge 3 commits into
mainfrom
refactor-unified-exporter-config
Open

refactor(8.9,8.10): remove redundant camundaexporter from zeebe.broker.exporters#6454
eamonnmoloney wants to merge 3 commits into
mainfrom
refactor-unified-exporter-config

Conversation

@eamonnmoloney

@eamonnmoloney eamonnmoloney commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Which problem does the PR fix?

The Helm chart was registering CamundaExporter under zeebe.broker.exporters.camundaexporter (the legacy config path) while also emitting camunda.data.secondary-storage.autoconfigure-camunda-exporter: true (the unified path that auto-registers the same exporter). The application warns at startup when zeebe.broker.exporters is present:

"The following legacy property is no longer supported and should be removed in favor of 'camunda.data.exporters': zeebe.broker.exporters"
BrokerBasedPropertiesOverride.populateFromExporters()

The redundant camundaexporter entry was the primary cause of this warning for the default (CamundaExporter) path.

Identified via #prj-pdp-3530-camunda-performance-and-sizing.

What's in this PR?

Safe / zero-touch now:

  • Delete zeebe.broker.exporters.camundaexporter — the application auto-registers CamundaExporter via autoconfigure-camunda-exporter: true; the explicit legacy entry was redundant and solely responsible for the startup warning in default deployments
  • Rename helpers hasLegacyElasticsearchExporterhasElasticsearchExporter and hasLegacyOpenSearchExporterhasOpenSearchExporter
  • Delete hasCamundaExporter helper (no longer needed)
  • Restore hasNoExporter helper updated to not reference hasCamundaExporter

Not in this PR (blocked on upstream fix):
Moving zeebe.broker.exporters.elasticsearch/opensearch/appIntegrations to camunda.data.exporters.* is not zero-touch until camunda/camunda#55950 lands. Today, BrokerBasedPropertiesOverride.populateFromExporters() does a full ExporterCfg replacement (not a merge), so any customer args set via ZEEBE_BROKER_EXPORTERS_ELASTICSEARCH_ARGS_* env vars would be silently dropped when the unified path overlays. The upstream PR fixes this by merging args (legacy fills gaps, unified wins per key). Once that ships, a follow-up PR here will complete the ES/OS/appIntegrations migration.

Applied to both 8.9 and 8.10.

Two-PR plan

PR Repo Status Unblocked by
This PR camunda-platform-helm Ready to merge
#55950 camunda/camunda Draft — args-merge fix in populateFromExporters
Follow-up camunda-platform-helm Not yet opened — full ES/OS migration camunda/camunda#55950 merged + released

Checklist

  • In the repo's root dir, run make go.update-golden-only.
  • There is no other open pull request for the same update/change.
  • Tests for charts are added (if needed).
  • In-repo documentation are updated (if needed).

@github-actions github-actions Bot added version/8.9 Camunda applications/cycle version version/8.10 Camunda applications/cycle version component/orchestration labels Jun 25, 2026
@eamonnmoloney eamonnmoloney changed the title refactor(8.9,8.10): move exporter config from zeebe.broker to camunda.data refactor(8.9,8.10): remove redundant camundaexporter from zeebe.broker.exporters Jun 25, 2026
@eamonnmoloney eamonnmoloney marked this pull request as ready for review June 26, 2026 12:31
@eamonnmoloney eamonnmoloney requested a review from a team as a code owner June 26, 2026 12:31
@eamonnmoloney eamonnmoloney requested review from Ian-wang-liyang and Copilot and removed request for a team June 26, 2026 12:31

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

This PR removes the redundant legacy Zeebe camundaexporter entry from zeebe.broker.exporters for chart versions 8.9 and 8.10, relying on the unified autoconfigure-camunda-exporter path to avoid legacy-property startup warnings. It also renames the related orchestration exporter-detection helpers and updates unit-test golden manifests accordingly.

Changes:

  • Remove the legacy zeebe.broker.exporters.camundaexporter rendering from orchestration _application.yaml (8.9, 8.10).
  • Rename orchestration helpers from hasLegacy{Elasticsearch,OpenSearch}Exporter to has{Elasticsearch,OpenSearch}Exporter and delete hasCamundaExporter.
  • Regenerate/update orchestration ConfigMap golden files to reflect exporters: {} output.

Reviewed changes

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

Show a summary per file
File Description
charts/camunda-platform-8.9/templates/orchestration/files/_application.yaml Stops rendering the legacy camundaexporter under zeebe.broker.exporters; uses renamed helper checks.
charts/camunda-platform-8.9/templates/orchestration/_helpers.tpl Renames exporter helpers and removes hasCamundaExporter; adjusts hasNoExporter.
charts/camunda-platform-8.9/test/unit/orchestration/golden/configmap.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.9/test/unit/orchestration/golden/configmap-retention.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.9/test/unit/orchestration/golden/configmap-log4j2.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.9/test/unit/orchestration/golden/configmap-authorizations.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.10/templates/orchestration/files/_application.yaml Stops rendering the legacy camundaexporter under zeebe.broker.exporters; uses renamed helper checks.
charts/camunda-platform-8.10/templates/orchestration/_helpers.tpl Renames exporter helpers and removes hasCamundaExporter; adjusts hasNoExporter.
charts/camunda-platform-8.10/test/unit/orchestration/golden/configmap.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.10/test/unit/orchestration/golden/configmap-retention.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.10/test/unit/orchestration/golden/configmap-log4j2.golden.yaml Golden update reflecting empty legacy exporters map.
charts/camunda-platform-8.10/test/unit/orchestration/golden/configmap-authorizations.golden.yaml Golden update reflecting empty legacy exporters map.

Comment on lines +306 to +312
{{- define "orchestration.hasNoExporter" -}}
{{-
and
(ne (include "orchestration.hasOpenSearchExporter" .) "true")
(ne (include "orchestration.hasElasticsearchExporter" .) "true")
-}}
{{- end -}}
Comment on lines +306 to +312
{{- define "orchestration.hasNoExporter" -}}
{{-
and
(ne (include "orchestration.hasOpenSearchExporter" .) "true")
(ne (include "orchestration.hasElasticsearchExporter" .) "true")
-}}
{{- end -}}

@hisImminence hisImminence 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.

crev review

Specialists run: correctness, devils-advocate. Devil's-advocate hypotheses: 0 raised, 0 promoted.


Findings on lines outside this PR's diff:

  • P1 charts/camunda-platform-8.10/values.yaml:2766
    Six orchestration.history.* values.yaml keys are now completely unwired: elsRolloverDateFormat (line 2766), rolloverInterval (line 2768), rolloverBatchSize (line 2770), waitPeriodBeforeArchiving (line 2773), delayBetweenRuns (line 2775), maxDelayBetweenRuns (line 2777). The deleted camundaexporter: block was their only template consumer — they were emitted under zeebe.broker.exporters.camundaexporter.args.history.*. The camunda.data.secondary-storage.* block in _application.yaml (lines 99–150) does not map any of these six fields; it only maps retention.enabled, retention.minimumAge, and connection settings. The same gap exists in charts/camunda-platform-8.9/values.yaml at line 3097. Any customer who overrode defaults (e.g. orchestration.history.rolloverBatchSize: 500 or rolloverInterval: 2d) will silently lose that configuration after upgrading — CamundaExporter will use its internal defaults with no warning. The PR description does not mention this regression. Either: (a) map these six values to camunda.data.secondary-storage.history.* equivalents if the application supports them on that path, (b) confirm CamundaExporter ignores these args when auto-configured (in which case they were always no-ops via the unified path and the PR body should say so), or (c) add deprecation annotations and document the app-side defaults customers are now inheriting.
  • P2 charts/camunda-platform-8.10/test/unit/orchestration/golden/configmap-unified.golden.yaml:181
    This golden file and its sibling charts/camunda-platform-8.9/test/unit/orchestration/golden/configmap-unified.golden.yaml were not updated by the PR. Both still contain the old camundaexporter: block with className: io.camunda.exporter.CamundaExporter and all six history args. The template that generated them (templates/orchestration/configmap-unified.yaml) no longer exists in the repo, so no CI test regenerates or validates these files — they are orphaned dead artifacts. They won't cause test failures, but they actively mislead anyone debugging exporter configuration by showing stale content that contradicts the current behaviour. Delete both files or regenerate them via make go.update-golden-only chartPath=charts/camunda-platform-8.9 and ...8.10 (which should remove them if no template produces them).

s.Require().Empty(configmapApplication.Zeebe.Broker.Exporters.CamundaExporter.ClassName)
},
},
}

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.

**P2 · ** (via correctness)

The only test case in TestDifferentValuesInputs uses empty values and verifies that CamundaExporter.ClassName is absent. There is no test asserting that when orchestration.exporters.camunda.enabled=false the rendered configmap contains autoconfigure-camunda-exporter: "false". With the legacy camundaexporter: block removed, the autoconfigure-camunda-exporter field in camunda.data.secondary-storage is now the sole control surface for opting out of CamundaExporter. A regression here (e.g., the flag being hardcoded or accidentally reversed) would be invisible to the current test suite. The same gap exists in the 8.9 test at charts/camunda-platform-8.9/test/unit/orchestration/configmap_test.go:119. Add a test case with Values: map[string]string{"orchestration.exporters.camunda.enabled": "false"} that asserts autoconfigure-camunda-exporter: false appears in the rendered application.yaml data.

Values: map[string]string{},

eamonnmoloney and others added 3 commits June 26, 2026 10:48
….data

Register the Elasticsearch/OpenSearch exporter and AppIntegrations exporter
under `camunda.data.exporters` (unified config) instead of `zeebe.broker.exporters`
(legacy path). The CamundaExporter entry is dropped entirely because it is
auto-configured by the application via `autoconfigure-camunda-exporter: true`.

The application warns at startup when `zeebe.broker.exporters` is present
alongside the unified config, and when both are set for the same exporter name
the unified config wins — making the legacy entries redundant. Keeping both
paths active also risked registering a duplicate exporter if the names ever
diverged. The helper names `hasLegacyElasticsearchExporter` and
`hasLegacyOpenSearchExporter` are renamed to remove the "Legacy" prefix;
`hasCamundaExporter` and `hasNoExporter` are deleted as they are no longer
referenced.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…l only

Reverts the camunda.data.exporters migration for ES/OS/appIntegrations
exporters back to zeebe.broker.exporters — that move is not zero-touch
until camunda/camunda#55950 lands (populateFromExporters currently does
a full ExporterCfg replacement, silently dropping any customer args set
via zeebe.broker.exporters.*.args.* env vars).

Safe changes kept from the previous commit:
- camundaexporter block removed from zeebe.broker.exporters (auto-configured
  by autoconfigure-camunda-exporter: true in secondary-storage, so the
  legacy entry was redundant and caused duplicate-config warnings)
- hasLegacyElasticsearchExporter / hasLegacyOpenSearchExporter renamed to
  hasElasticsearchExporter / hasOpenSearchExporter
- hasCamundaExporter helper removed (no longer needed)
- hasNoExporter restored without hasCamundaExporter dependency

Blocked: full ES/OS migration to camunda.data.exporters must wait for
camunda/camunda#55950 to merge and release.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…porter registration

CamundaExporter is now auto-registered via autoconfigure-camunda-exporter: true;
the legacy zeebe.broker.exporters.camundaexporter block was removed in this PR,
so the test assertion is updated to verify the entry is absent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Ian-wang-liyang Ian-wang-liyang force-pushed the refactor-unified-exporter-config branch from 867aded to 2a80fdd Compare June 26, 2026 14:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/orchestration version/8.9 Camunda applications/cycle version version/8.10 Camunda applications/cycle version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants