Skip to content

chore(exporters): delete dead otlphttp + stdoutexporter wrappers#345

Merged
trilamsr merged 2 commits into
mainfrom
chore/delete-dead-exporters
Jun 1, 2026
Merged

chore(exporters): delete dead otlphttp + stdoutexporter wrappers#345
trilamsr merged 2 commits into
mainfrom
chore/delete-dead-exporters

Conversation

@trilamsr

@trilamsr trilamsr commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Summary

The OCB build assembled from builder-config.yaml has shipped upstream go.opentelemetry.io/collector/exporter/otlphttpexporter + debugexporter since v0.2.0 (lines 59-60). The two in-tree exporter wrapper packages were left behind after the RFC-0013 distribution-first pivot and have had zero Go importers outside their own _test.go files since the pivot landed. This PR finishes that cleanup.

  • Delete components/exporters/otlphttp/ — 13 files / 2,904 LOC. Superseded by upstream otlphttpexporter v0.130.0.
  • Delete components/exporters/stdoutexporter/ — 8 files / 1,077 LOC. Superseded by upstream debugexporter v0.130.0 (component-id debug).
  • Net: -21 source files / ~3,981 LOC; -4 collector deps (exporter, exporter/exportertest, indirect consumertest + xexporter); -42 lines off go.mod + go.sum.

Closes #333, #334.

Root cause

Not a bug — strategic dead code. Per the v1.0-rc1 simplification audit (docs/v1-rc1-simplification-audit.md §7 rows 1 + 2, risk score 1), both wrappers had:

  • Zero external Go importers (only their own _test.go files).
  • No reference from the OCB-generated _build/components.go.
  • A live upstream supersession already wired through builder-config.yaml.

The followups shard docs/followups/otlphttp.md had every code-path item tagged [STRIKE] against the wrapper — that shard is now deleted along with the code it tracked.

Operator-impacting changes

- chore(exporters): delete in-tree `otlphttp` + `stdoutexporter` wrapper packages now that the OCB build ships upstream `otlphttpexporter` + `debugexporter` directly.
  - Configs naming `otlphttp` as an exporter type continue to work — the upstream component-id is identical.
  - Configs naming `stdoutexporter` should switch to `debug` (the upstream `debugexporter` component-id). The Helm chart default already uses `debug`.
  - PromQL queries on the wrapper's per-component `otelcol_exporter_otlphttp_calls_total` / `otelcol_exporter_stdoutexporter_*` instruments will go silent. Upstream emits the standard `otelcol_exporter_sent_*` / `otelcol_exporter_send_failed_*` shape via `exporterhelper` instead. See [`docs/migration/v0.1-to-v0.2.md`](docs/migration/v0.1-to-v0.2.md) "In-tree receiver / exporter namespace alignment" for the substitution annotations.

What else moved

Doc + workflow + config cascade so nothing dangles at a deleted package:

  • module/pkg/selftel/selftel.go — package doc updated; the two wrappers no longer exist as "copies it replaced."
  • .github/workflows/install-bench.yml — dropped components/exporters/otlphttp/** from pull_request + push paths triggers; header comment now says "upstream otlphttpexporter."
  • bench/install/README.md — narrative updated to "upstream otlphttpexporter"; the failed-test-reference bullet now points at upstream tests.
  • docs/FAILURE-MODES.md — two rows (network-error mid-send, bad-scheme endpoint) re-pointed from the in-tree wrapper tests to upstream otlphttpexporter / confighttp.
  • docs/README.md — dropped the wrapper README index row; integration-recipe rows now say "upstream otlphttp exporter" instead of "in-tree."
  • docs/STRATEGY.md — "queued for deletion" list no longer carries stdoutexporter; explicit note that both wrappers were deleted post-v0.2.0.
  • docs/MILESTONES.md — M1 row's "the bundled stdoutexporter canonical example remains" annotation now reflects post-v0.2.0 retirement.
  • docs/migration/v0.1-to-v0.2.md — per-component substitution table footnotes the wrapper retirement + instrument-name implication (the PromQL diff recipe in the file still shows the v0.1.x→v0.2.0 transition, which is correct history).
  • docs/research/baselines.md — stdoutexporter coverage row dropped.
  • docs/v1-rc1-simplification-audit.md — orphan-wrappers table now shows only pyspy (the remaining row); ranked-deletion candidates 1 + 2 marked Done with PR links.
  • docs/v1-rc1-test-audit.md — coverage + integration-test rows dropped.
  • CHANGELOG.md[Unreleased] Removed entry added; two stale "source survives in-tree" / "eight surviving in-tree components" annotations corrected.
  • docs/followups/otlphttp.mddeleted (every code-path item was [STRIKE] against the now-deleted wrapper).

Left untouched as historical decision-trail (per feedback_no_bloat's "archived files are suspect" being asymmetric — these are research-snapshot history, not active dead code):

  • docs/research/m5-m6-research.md §F10 — original "ship components/exporters/otlphttp/ as in-tree adapter" decision text. RFC-0013 superseded this; the file as a whole carries the supersession context.
  • docs/rfcs/archived/0004-clockreceiver-stdoutexporter.md — already archived.

Chart values + recipes use otlphttp as the upstream component-id (the chart key for the OCB-bundled exporter), not the wrapper import path — no change needed there.

Test plan

  • git rm -r both directories; verify components/exporters/ removed (no empty parent).
  • GOWORK=off go test ./... green at root.
  • GOWORK=off go test ./... green at module/.
  • GOWORK=off go vet ./... clean.
  • make tidy drops exporter, exporter/exportertest, consumertest, xexporter; make tidy-check clean afterwards.
  • ./scripts/register-lint.sh clean (no func Register* outside components/).
  • make coverage-check clean (pyspy 82.3% ≥ 60% gate).
  • make doc-check + chart-appversion-check.sh clean.
  • Pre-commit gates (lint, vet, mod-verify, attribute-namespace-check, no-autoupdate-check) all green.
  • CI install-bench workflow re-runs against the trimmed paths trigger (will fire on first PR that touches the listed paths post-merge).
  • CI full make ci + install-bench pass on this PR.

Tri Lam added 2 commits June 1, 2026 01:37
The OCB build assembled from builder-config.yaml has shipped upstream

otlphttpexporter + debugexporter since v0.2.0. The in-tree wrapper

packages had zero Go importers outside their own _test.go files.

Net: -21 source files / ~3,981 LOC. Drops 4 transitive collector

deps (exporter, exportertest, consumertest, xexporter).

Operator-impacting:

- Configs naming 'otlphttp' as an exporter type still work (upstream

  component-id is identical).

- Configs naming 'stdoutexporter' should switch to 'debug' (upstream

  debugexporter component-id). Chart default is already 'debug'.

- otelcol_exporter_otlphttp_calls_total / _errors_total disappear;

  upstream emits otelcol_exporter_sent_* / send_failed_* via

  exporterhelper. Migration table in docs/migration/v0.1-to-v0.2.md

  carries the per-component substitution annotation.

Closes #333, #334.

Signed-off-by: Tri Lam <tri@maydow.com>
Signed-off-by: Tri Lam <tri@maydow.com>
@trilamsr

trilamsr commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Addressed reviewer nit: dropped two stale 'in-tree wrapper retired post-v0.2.0' footnotes in docs/FAILURE-MODES.md (lines 96, 99). Test column now cites upstream paths directly. Historical context lives in CHANGELOG. (Reviewer cited three; only two occurrences existed in-file.)

@trilamsr trilamsr merged commit 92c7df9 into main Jun 1, 2026
14 checks passed
@trilamsr trilamsr deleted the chore/delete-dead-exporters branch June 1, 2026 09:10
trilamsr added a commit that referenced this pull request Jun 1, 2026
## Summary

Closes v1.0-rc1 cut criterion 11 (`docs/migration/v0.x-to-v1.0.md` —
one-shot forward-flatten upgrade guide). The per-minor guides
(`v0.1-to-v0.2.md`, `v0.2-to-v0.3.md`) remain authoritative for the
intermediate hops; this consolidator covers every operator-visible
break across the v0.x window in a single document.

Ten sections, each with WHAT/WHY/OPERATOR-ACTION/BEFORE/AFTER:

1. Exporter wrapper deletions (`otlphttp` → upstream `otlphttpexporter`,
   `stdoutexporter` → upstream `debug`) — landed in #345.
2. Self-telemetry metric series renames
   (`otelcol_exporter_otlphttp_*` → `otelcol_exporter_sent_*`).
3. Verdict schema v1.0-rc1 published at
   `docs/schemas/verdict-1.0.0-rc1.json` (cross-cut with criterion 2).
4. Attribute namespace hard-lock (criterion 3 enforcement clock).
5. Chart NetworkPolicy template (opt-in default-deny, #301).
6. `minReadySeconds: 10` rollout soak (#320, #321) — adds 10s ×
pod-count
   to upgrade wall-clock.
7. `/readyz` retired from chart docs in favor of `kubectl rollout
status`
   plus the upstream `healthcheckextension` `/` endpoint.
8. SLO metric vocabulary (criterion 7 binding-tier escalation).
9. OCB distro pin floor (v0.130.0 core+contrib; OCB ≥ v0.125.0
from-source)
   — cross-link to criterion 5 support matrix.
10. Deprecation policy binding (criterion 4 enforcement gate).

Cross-links to the new guide added from `docs/README.md`,
`docs/RELEASE-CHECKLIST.md` (checkbox flipped), and
`docs/v1-rc1-cut-criteria.md` (criterion 11 status ☐ → ☑).

## Test plan

- [x] `bash scripts/doc-check.sh` clean (markdown link integrity,
      banned-phrase lint, all gated assertions pass).
- [x] Pre-commit hooks pass (golangci-lint 0 issues, go vet, go mod
      verify, attribute-namespace-check, no-autoupdate-check).
- [x] All cross-references resolve on-disk (verdict schema artifact,
      v0.1-to-v0.2.md, v0.2-to-v0.3.md, RFC-0013, ATTRIBUTES.md,
      SLOs.md, ATTRIBUTES.md, scripts/attribute-namespace-check.sh,
      networkpolicy.yaml, verdict.go, verdict_envelope_schema_test.go).
- [x] Commit subject ≤72 chars (53 chars).
- [x] Forward-looking references to `docs/DEPRECATION.md` and
      `docs/SUPPORT-MATRIX.md` (parallel in-flight cut-criterion-4 + 5
      PRs) are bare backtick paths, not markdown links — doc-check
      link-integrity gate stays green until those PRs land and the
      links can be promoted.

```release-notes
- docs(migration): publish v0.x → v1.0 upgrade guide covering every operator-visible break across the v0.x window (exporter wrappers, self-tel metric renames, verdict-schema publication, attribute lockdown, NetworkPolicy, minReadySeconds, /readyz retirement, SLO vocabulary, OCB pin floor, deprecation policy). Closes v1.0-rc1 cut criterion 11.
```

Signed-off-by: Tri Lam <tri@maydow.com>
Co-authored-by: Tri Lam <tri@maydow.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[rc1-prep] Delete in-tree components/exporters/otlphttp/ wrapper (superseded by upstream otlphttpexporter)

1 participant