Skip to content

KAFKA-20850: Add system test for suppress() changelog across the HEADERS boundary - #23075

Merged
mjsax merged 1 commit into
apache:trunkfrom
aliehsaeedii:kafka-20850-suppress-headers-upgrade-system-test
Aug 21, 2026
Merged

KAFKA-20850: Add system test for suppress() changelog across the HEADERS boundary#23075
mjsax merged 1 commit into
apache:trunkfrom
aliehsaeedii:kafka-20850-suppress-headers-upgrade-system-test

Conversation

@aliehsaeedii

@aliehsaeedii aliehsaeedii commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

The smoke-test application already uses
suppress(untilWindowCloses(...)) (SmokeTestClient#183,195), and
streams_application_upgrade_test.py already drives it across versions
— but no system test ever set dsl.store.format. With the config unset,
the headers-aware suppress buffer writes byte-identical V3 records, so
the existing matrix passes regardless of KAFKA-20413.

This adds a HEADERS-configured transition across the 4.3/trunk boundary
in both directions.

Reviewers: Matthias J. Sax matthias@confluent.io, Chia-Ping Tsai chia7712@gmail.com

…ERS boundary

The smoke-test application already uses suppress(untilWindowCloses(...)), and
streams_application_upgrade_test.py already drives it across versions, but no
system test ever set dsl.store.format. With the config unset the headers-aware
suppress buffer writes byte-identical V3 records, so the existing matrix passes
regardless of the change in KAFKA-20413.

Add a HEADERS-configured transition that crosses the 4.3/trunk boundary in both
directions. 4.3 has the dsl.store.format config but not the headers-aware
buffer, so it writes the whole BufferValue into the record value, while trunk
writes only the plain value bytes and ships the value/timestamp/headers
prefixes in extra Kafka record headers -- both tagged V3. Since the suppress
buffer is in-memory only, every restart replays its full changelog, so the
transition exercises a real cross-format restore.

- Add an extra_configs pass-through to StreamsSmokeTestBaseService and
  StreamsSmokeTestJobRunnerService, merged last in prop_file() so a test can
  override the smoke defaults.
- Extract _run_app_transition() from test_app_upgrade() so the target version is
  a parameter rather than hardcoded to DEV_VERSION, which is what the downgrade
  direction needs. test_app_upgrade() keeps passing DEV_VERSION, so its matrix
  behavior is unchanged.
- Add test_suppress_headers_app_transition, parameterized on direction.
- Assert no instance logged a suppress-changelog restore rejection during the
  transition. A misread record is otherwise silent, and the existing harness
  does not compare output topics (KAFKA-10202).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added triage PRs from the community tests Test fixes (including flaky tests) small Small PRs labels Aug 4, 2026
@aliehsaeedii

Copy link
Copy Markdown
Contributor Author

Uploading Screenshot 2026-08-11 at 15.33.40.png…

@github-actions

Copy link
Copy Markdown

A label of 'needs-attention' was automatically added to this PR in order to raise the
attention of the committers. Once this issue has been triaged, the triage label
should be removed to prevent this automation from happening again.

@mjsax mjsax added streams and removed triage PRs from the community needs-attention labels Aug 20, 2026
@mjsax
mjsax merged commit 8c556f5 into apache:trunk Aug 21, 2026
26 checks passed
@mjsax

mjsax commented Aug 21, 2026

Copy link
Copy Markdown
Member

PR merged to trunk. But 4.4.0 release is in full swing -- let's keep the Jira ticket open, so we can later cherry-pick to 4.4 branch.

@chia7712 chia7712 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@aliehsaeedii thanks for this patch. Two small comments left. PTAL


# InMemoryTimeOrderedKeyValueChangeBuffer throws this when it cannot make sense of a
# suppress-changelog record while restoring.
INVALID_CHANGELOG_RECORD_MSG = "Restoring apparently invalid changelog record"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should we add a comment to InMemoryTimeOrderedKeyValueChangeBuffer​ reminding developers not to change this message?

                } else {
                    throw new IllegalArgumentException("Restoring apparently invalid changelog record: " + record);
                }

else:
from_version, to_version = dev_version, old_version

self._run_app_transition(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It seems no test exercises the rolling branch. Should we add tests for rolling or just remove the dead path?

@chia7712

Copy link
Copy Markdown
Member

PR merged to trunk. But 4.4.0 release is in full swing -- let's keep the Jira ticket open, so we can later cherry-pick to 4.4 branch.

@mjsax +1 to backport to 4.4 branch

@aliehsaeedii

Copy link
Copy Markdown
Contributor Author

Thanks @chia7712 and @mjsax
I addressed the comments in this PR: #23269

chia7712 pushed a commit that referenced this pull request Aug 25, 2026
…ERS boundary (#23075)

The smoke-test application already uses
`suppress(untilWindowCloses(...))` (`SmokeTestClient#183,195`), and
`streams_application_upgrade_test.py` already drives it across versions
— but no system test ever set `dsl.store.format`. With the config unset,
the headers-aware suppress buffer writes byte-identical V3 records, so
the existing matrix passes regardless of KAFKA-20413.

This adds a HEADERS-configured transition across the 4.3/trunk boundary
in both directions.

Reviewers: Matthias J. Sax <matthias@confluent.io>
@chia7712

Copy link
Copy Markdown
Member
SESSION REPORT (ALL TESTS)
ducktape version: 0.14.0
session_id:       2026-08-25--003
run time:         7 minutes 41.508 seconds
tests run:        21
passed:           21
flaky:            0
failed:           0
ignored:          0
================================================================================

all tests pass. cherry-picked to 4.4

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

Labels

small Small PRs streams tests Test fixes (including flaky tests)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants