Skip to content

Schema Registry contexts: SerDes client support via URL prefix (DOC-2397, DOC-2304) - #1850

Merged
Feediver1 merged 6 commits into
mainfrom
DOC-2397-serdes-contexts
Jul 30, 2026
Merged

Schema Registry contexts: SerDes client support via URL prefix (DOC-2397, DOC-2304)#1850
Feediver1 merged 6 commits into
mainfrom
DOC-2397-serdes-contexts

Conversation

@Feediver1

@Feediver1 Feediver1 commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Documents the v26.2 SerDes support for Schema Registry contexts: any SerDes client, in any language, can target a context by pointing schema.registry.url at a /contexts/{context} URL prefix — no client-side context support needed.

Covers both tickets in one PR since both affected pages are single-sourced into cloud-docs:

  • DOC-2397 — Self-Managed SerDes contexts support
  • DOC-2304 — Cloud twin (same epic ENG-1036)

Changes

schema-reg-contexts.adoc (single-sourced)

  • New [#serdes-clients] section: URL-prefix pattern with client config example, endpoint families covered, automatic schema-ID-lookup scoping, prefix/qualified-subject equivalence example, context-name normalization rules, ACL behavior, and an IMPORTANT callout for the silent-failure mode (qualified parsing inactive → /contexts/ requests silently store literal subjects)
  • Client integration table: "Non-Java SerDes: Not supported (workaround)" → Supported via URL prefix; Java SerDes no longer requires ContextNameStrategy
  • Removed the stale "Non-Java SerDe clients: Not supported" limitation bullet
  • Cloud path (per Kat's note on DOC-2304): BYOC/Dedicated "contact support to enable" → enabled by default, with opt-out instructions; added a cloud resolution branch in troubleshooting
  • Troubleshooting: expanded the "treated as literal names" entry with the URL-prefix symptom and a GET /contexts quick check
  • Fixed the subject audit command: grep '^\.'grep '^:\.' (both occurrences). Only names starting with :. are affected by the breaking change; .foo stays literal. The old pattern missed affected subjects and false-positived unaffected ones.

schema-reg-api.adoc (single-sourced)

  • Version-conditioned the "first set the property" instruction (26.2 default is true); cloud variant updated to enabled-by-default
  • Added a pointer to the URL-prefix mechanism and the new section

release-notes/redpanda.adoc

  • New 26.2 entry: SerDes client support for contexts

Companion cloud-docs PR (What's New entry): redpanda-data/cloud-docs#654 — merge this PR first (the What's New entry links the #serdes-clients anchor, which reaches cloud-docs through the single-source include).

Verification

🤖 Generated with Claude Code

Preview pages

…ix (DOC-2397, DOC-2304)

- Add "Use contexts with SerDes clients" section: URL-prefix pattern,
  endpoint coverage, automatic ID-lookup scoping, name normalization,
  ACL behavior, and the silent-failure gotcha when qualified parsing
  is inactive
- Update client integration table: Non-Java SerDes now supported via
  URL prefix (was "Not supported / workaround"); Java no longer
  requires ContextNameStrategy
- Cloud (DOC-2304): BYOC/Dedicated text updated from
  "contact support to enable" to enabled-by-default with opt-out
- Fix subject audit grep: affected names start with ':.' not '.'
- Version-condition the "set the property first" instruction on the
  API page (26.2 default is true)
- Add 26.2 release-notes entry

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Jul 29, 2026

Copy link
Copy Markdown

Deploy Preview for redpanda-docs-preview ready!

Name Link
🔨 Latest commit bff2c3a
🔍 Latest deploy log https://app.netlify.com/projects/redpanda-docs-preview/deploys/6a6bbcb8d000320008b0498c
😎 Deploy Preview https://deploy-preview-1850--redpanda-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4fbb2322-0d41-449a-9b2a-926bca63d5b0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The documentation now describes Schema Registry contexts as enabled by default in Redpanda v26.2 and env-cloud deployments, with version-specific configuration guidance for earlier or opted-out deployments. It documents context-scoped URL prefixes for Schema Registry and SerDes clients, updates Java and non-Java integration status, clarifies schema ID lookup behavior, and adds URL validation, troubleshooting, upgrade-audit, and cloud configuration guidance.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • redpanda-data/docs#1806: Updates documentation metadata for the schema_registry_enable_qualified_subjects property.

Suggested reviewers: kbatuigas, jakescahill

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly names the main change: Schema Registry context support for SerDes clients via URL prefix.
Description check ✅ Passed The description is mostly complete, with summary, changes, verification, page previews, and ticket links, though it doesn't follow the template exactly.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DOC-2397-serdes-contexts

Comment @coderabbitai help to get the list of available commands.

Comment thread modules/manage/pages/schema-reg/schema-reg-api.adoc Outdated
Comment thread modules/manage/pages/schema-reg/schema-reg-contexts.adoc Outdated
Co-authored-by: Joyce Fee <102751339+Feediver1@users.noreply.github.com>
@Feediver1
Feediver1 marked this pull request as ready for review July 29, 2026 20:43
@Feediver1
Feediver1 requested a review from a team as a code owner July 29, 2026 20:43

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@modules/manage/pages/schema-reg/schema-reg-contexts.adoc`:
- Around line 745-752: Revise the diagnostic guidance around the /contexts curl
check so a response of ["." ] is not presented as proof that qualified subject
parsing is disabled. In the schema-registry troubleshooting section, instruct
readers to verify the relevant configuration and restart state directly, or
register a probe schema in a non-default context before interpreting the result.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2597342c-fed0-4b89-9525-526d65504e84

📥 Commits

Reviewing files that changed from the base of the PR and between 4e47021 and 1de0987.

📒 Files selected for processing (3)
  • modules/get-started/pages/release-notes/redpanda.adoc
  • modules/manage/pages/schema-reg/schema-reg-api.adoc
  • modules/manage/pages/schema-reg/schema-reg-contexts.adoc

Comment on lines +745 to +752
To confirm, check whether the registry lists only the default context while clients are using qualified subjects or context URLs:

[source,bash]
----
curl -s http://localhost:8081/contexts
----

If the response is `["."]`, qualified subject parsing is not active.

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not treat ["."] as proof that parsing is disabled.

Because contexts are listed only after a schema is registered, an enabled cluster with no non-default schemas also returns ["."]. Check the configuration and restart state directly, or register a probe schema in a non-default context before using this result diagnostically.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@modules/manage/pages/schema-reg/schema-reg-contexts.adoc` around lines 745 -
752, Revise the diagnostic guidance around the /contexts curl check so a
response of ["." ] is not presented as proof that qualified subject parsing is
disabled. In the schema-registry troubleshooting section, instruct readers to
verify the relevant configuration and restart state directly, or register a
probe schema in a non-default context before interpreting the result.


ifndef::env-cloud[]
To use contexts, first set the `schema_registry_enable_qualified_subjects` cluster configuration property to `true`, then restart the brokers. See xref:manage:schema-reg/schema-reg-contexts.adoc[] for setup instructions.
In Redpanda v26.2 and later, contexts are enabled by default. In earlier versions, first set the `schema_registry_enable_qualified_subjects` cluster configuration property to `true`, then restart the brokers. See xref:manage:schema-reg/schema-reg-contexts.adoc[] for setup instructions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@pgellert what is the behavior though on upgrade from 26.2. Does it flip to on, or in 26.2 it is only enabled by default in NEW cluster?

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.

It flips on in 26.2, existing clusters included, unless the flag was explicitly set to false pre-upgrade. It is planned to be deprecated in 26.3. This config was always a temporary feature flag to give customers more flexibility for when they opt into this necessary breaking change that we need to support contexts. It was off in 26.1 purely to ship contexts early for serverless and some customers that have opted in early. I've re-confirmed no RP Cloud clusters use that pattern, and for self-hosted it's going to be called out loudly in the release notes and upgrade docs.


ifdef::env-cloud[]
NOTE: On BYOC and Dedicated clusters, contact Redpanda support or use the cluster configuration API to enable `schema_registry_enable_qualified_subjects`. This property requires a broker restart.
NOTE: On BYOC and Dedicated clusters, Schema Registry contexts are enabled by default. To opt out, use the cluster configuration API or contact Redpanda support to set `schema_registry_enable_qualified_subjects` to `false`. This property requires a broker restart.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Same question here @pgellert . cc @Feediver1

Comment thread modules/get-started/pages/release-notes/redpanda.adoc Outdated

ifndef::env-cloud[]
To use contexts, first set the `schema_registry_enable_qualified_subjects` cluster configuration property to `true`, then restart the brokers. See xref:manage:schema-reg/schema-reg-contexts.adoc[] for setup instructions.
In Redpanda v26.2 and later, contexts are enabled by default. In earlier versions, first set the `schema_registry_enable_qualified_subjects` cluster configuration property to `true`, then restart the brokers. See xref:manage:schema-reg/schema-reg-contexts.adoc[] for setup instructions.

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.

It flips on in 26.2, existing clusters included, unless the flag was explicitly set to false pre-upgrade. It is planned to be deprecated in 26.3. This config was always a temporary feature flag to give customers more flexibility for when they opt into this necessary breaking change that we need to support contexts. It was off in 26.1 purely to ship contexts early for serverless and some customers that have opted in early. I've re-confirmed no RP Cloud clusters use that pattern, and for self-hosted it's going to be called out loudly in the release notes and upgrade docs.

Feediver1 and others added 2 commits July 30, 2026 09:02
Version references on the contexts page now consistently use the
v-prefixed form (matching the applied review suggestions).

The GET /contexts example response showed named contexts without the
dot prefix. Verified on a live v26.2.1 cluster (docker, dev-container
mode): named contexts are returned dot-prefixed, e.g.
[".",".production",".staging"]. The same experiment confirmed the new
SerDes section end to end: URL-prefix registration, prefix-scoped ID
lookup, unscoped lookup 404, and ["."]  on a cluster with no named
contexts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Per Gellert: the flag flips on at upgrade for existing clusters
  (unless explicitly set false pre-upgrade); state this in the
  upgrade-considerations breaking-change block, the release notes,
  and a new 26.2 entry in the incompatible-changes partial
  (rolling-upgrade + k-rolling-upgrade pages)
- Note that opting out is a stopgap: the flag is planned for removal
  in a future release
- Per CodeRabbit: ["."]  from GET /contexts is not proof that parsing
  is off (an enabled registry with no named-context schemas returns
  the same); rework the troubleshooting check to confirm via property
  state or a test-schema probe, with cleanup guidance

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Feediver1

Copy link
Copy Markdown
Contributor Author

Review feedback addressed in 4d09fb9:

  • @pgellert's incompatible-changes request: added a Breaking changes in Redpanda 26.2 entry to upgrade/partials/incompat-changes.adoc (renders on both the rolling-upgrade and K8s rolling-upgrade pages), with the audit command and an xref to the contexts page's upgrade considerations.
  • @mattschumpert's upgrade question, per Gellért's answer: the upgrade-considerations breaking-change block now states explicitly that upgrading to v26.2 enables the flag on existing clusters unless it was set to false pre-upgrade; same fact added to the release-notes entry. Also added the opt-out-is-a-stopgap note (flag planned for removal in a future release).
  • CodeRabbit's ["."] finding: valid — an enabled registry with no named-context schemas returns the same result (confirmed on a live v26.2.1 cluster). The troubleshooting check now says ["."] alone is not proof and walks through confirming via property/restart state or a test-schema probe, including cleanup so the probe isn't reinterpreted later.

🤖 Generated with Claude Code

@micheleRP

Copy link
Copy Markdown
Contributor

Review

Nice work on this one. No critical issues — findings below are polish, plus one Cloud-path rendering regression worth fixing before merge.

Also reviewed the companion cloud-docs#654; its findings are posted there.

Jira alignment

DOC-2397 — fully addressed. Everything in the research report's recommendations landed: SerDes section with URL pattern, endpoint coverage, ID-lookup scoping, normalization, version availability; client table row corrected; silent-failure gotcha in troubleshooting; API page version-conditioned.

DOC-2304 — fully addressed, and it honors Kat's DOC-2192 note: the self-managed default-flip wording from #1784 is untouched, only the cloud-gated path changed.

Before merging

The timing gate you flagged on cloud-docs#654 applies here too, not just to the What's New entry: the "enabled by default" claim reaches Cloud through this PR as well, via the ifdef::env-cloud[] NOTE under Enable Schema Registry contexts. So the 26.2 Cloud fleet rollout confirmation gates both PRs.

Merge order in the PR body (this PR, then cloud-docs#654) is correct for the anchor dependency.

Suggestions

1. schema-reg-contexts.adoc:549 — the colon rule contradicts the accepted-forms list.

The text accepts /contexts/:.staging:/ as an equivalent form, then says context names containing a colon are rejected as invalid. Read together, those two sentences look contradictory. The actual rule is that the leading and trailing colons are delimiters, not part of the name.

Suggested: "Aside from these leading and trailing delimiters, a context name that contains a colon (:) is rejected as invalid."

2. schema-reg-contexts.adoc:685-693 — the Cloud build loses the "Breaking change" label.

Verified by rendering the block with @asciidoctor/core both ways. Because the bolded *Breaking change*: lead-in now sits inside the ifndef::env-cloud[], the Cloud rendering of that IMPORTANT starts at "When schema_registry_enable_qualified_subjects is enabled…". Before this PR, Cloud showed the label.

Fix: move the label outside the conditional, or add an ifdef::env-cloud[] variant that keeps it.

3. schema-reg-contexts.adoc:688-690 — missing blank line creates a run-on paragraph.

Also verified by rendering: with no blank line after the endif::env-cloud[], the two sentences merge into a single paragraph in the self-managed build. Adding a blank line splits them, and composes cleanly with finding 2.

4. schema-reg-contexts.adoc:89 — the Limitations bullet still frames the breaking change as opt-in.

It reads "After enabling schema_registry_enable_qualified_subjects, …". This PR adds the automatic-flip-on-upgrade fact in three other places (release notes, incompat-changes.adoc, Upgrade considerations) but not here — and Limitations is the section most likely to be skimmed. Suggest version-conditioning it to match.

5. schema-reg-contexts.adoc:69 — Prerequisites bullet reads as a manual step.

"…property is set to true." The IMPORTANT immediately below now explains it's the 26.2 default, so this is soft, but "is enabled" would remove the implication of an action.

6. schema-reg-contexts.adoc:517[source,properties] is used nowhere else in the repo.

Zero other occurrences. The established pattern for key=value config here is [source,ini] (4 uses). Antora won't fail on it, but it may not highlight. Either switch to ini or confirm it highlights on the preview.

7. release-notes/redpanda.adoc:161 — the "Changed property defaults" bullet omits the upgrade behavior.

It says only that the default changed from false to true. Readers scanning that list won't learn that existing clusters flip automatically. Worth adding the #upgrade-considerations link there too, matching the new feature entry.

Impact on other files

Checked the ripple targets — nothing blocks merge:

  • migrate-schemas-confluent.adoc:62 — already says the property "must be enabled on the shadow cluster (the default)". Correct for 26.2. No action.
  • reference/partials/properties/cluster-properties.adoc:18989 — generated partial already shows Default: true for self-managed. No contradiction with the new claims. No action.
  • incompat-changes.adoc — correctly placed. It's a partial included by both rolling-upgrade.adoc and k-rolling-upgrade.adoc, so @pgellert's request is satisfied for both upgrade paths in one edit.
  • cloud-docs stub — wired correctly, and the three learning objectives are duplicated in the stub as required, so they won't render literally in Cloud. The new [#serdes-clients] anchor sits inside the tagged region, so the What's New xref resolves once this merges.
  • reference/pages/rpk/rpk-registry/rpk-registry-context.adoc:14-19 — not fixable here, but worth knowing: the auto-generated rpk help text still says the command requires the property set to true and shows how to enable it. Stale for 26.2, but it comes from rpk's own --help output and has to be fixed upstream. Possible follow-up ticket.
  • Navigation — no new pages, so no nav.adoc change needed.

CodeRabbit

One actionable item: don't present GET /contexts returning ["."] as proof that parsing is off, since an enabled registry with no named-context schemas returns the same thing. Legitimate catch, and already fixed in 4d09fb9 — the troubleshooting text now says ["."] alone doesn't confirm the cause, and gives a property-check-or-probe-schema procedure with cleanup guidance. Nothing outstanding.

What works well

  • Verification rigor is unusually good. Property default, visibility, and restart requirement checked at the v26.2.1 tag; the backport boundary established empirically (context routes present in service.cc at 26.1.7, absent at 26.1.6), which is what justifies the precise "26.1.7 and later" note; and the GET /contexts example response corrected to dot-prefixed form after testing on a live v26.2.1 cluster. Claims are traceable rather than asserted.
  • The grep fix is a real correctness win. Changing ^\. to ^:\. in both audit commands fixes a pre-existing bug — the old pattern both missed affected subjects and matched unaffected ones, which is the worst failure mode for a pre-upgrade audit command.
  • Anchor discipline. Every new inbound reference got an explicit anchor, and all of them resolve, including the pre-existing #upgrade-considerations and #acl-authorization targets.
  • The silent-failure IMPORTANT is the right call. A /contexts/ request that succeeds while quietly writing literal subject names is precisely the failure users would otherwise burn hours on, and it's surfaced both at the point of use and in troubleshooting.
  • Single-sourcing handled cleanly, with the DOC-2192 boundary respected so the two tickets don't collide.
  • Reviewer feedback routed to the right place@pgellert's breaking-change request went into the shared upgrade partial rather than being pasted into one page.

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

Please see the review suggestions, especially #2 and #3

Per Michele's review findings 2 and 3: the bolded label now sits
outside the env-cloud conditional so the Cloud build keeps it, and the
blank line inside the conditional splits the self-managed text into
two paragraphs instead of a run-on. Verified by rendering both
variants with asciidoctor 2.0.26.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Feediver1

Copy link
Copy Markdown
Contributor Author

@micheleRP findings 2 and 3 are fixed in cc826ab: the *Breaking change*: label now sits outside the ifndef::env-cloud[] (Cloud keeps it, attached to the reinterpretation sentence), and the blank line inside the conditional splits the self-managed text into two paragraphs. Verified by rendering both variants with asciidoctor 2.0.26:

  • Self-managed: Breaking change: Upgrading to Redpanda v26.2 or later…When schema_registry_enable_qualified_subjects is enabled…
  • Cloud: Breaking change: When schema_registry_enable_qualified_subjects is enabled…

Findings 1, 4, and 5 are noted and pending a separate decision.

🤖 Generated with Claude Code

- Colon rule reworded so it no longer contradicts the accepted
  URL forms (leading/trailing colons are delimiters, verified against
  the context_router normalization tests)
- Limitations bullet now reflects the automatic default flip on
  upgrade instead of opt-in framing
- Prerequisites bullet: "is set to true" -> "is enabled"
- [source,properties] -> [source,ini], matching the repo's
  established pattern (4 existing uses, properties had zero)
- Changed-property-defaults release-notes bullet now states the
  upgrade behavior and links the upgrade considerations

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Feediver1

Copy link
Copy Markdown
Contributor Author

@micheleRP the remaining suggestions (1, 4, 5, 6, 7) are implemented in bff2c3a — each was verified before changing:

  1. Colon rule — reworded with your suggested framing; confirmed correct against the context_router.cc normalization tests (leading/trailing colons are delimiters, :.staging:.staging).
  2. Limitations bullet — now reads "When schema_registry_enable_qualified_subjects is enabled (the default in Redpanda v26.2 and later, including on upgraded clusters), …" — matching the flip-on-upgrade fact everywhere else.
  3. Prerequisites bullet — "is set to true" → "is enabled."
  4. [source,properties][source,ini] — confirmed your counts: exactly 4 existing source,ini uses and zero other source,properties.
  5. Changed-property-defaults bullet — now states the automatic upgrade behavior and links #upgrade-considerations, matching the feature entry.

Also noted your impact finding about the stale rpk registry context help text (says the property must be enabled) — that's generated from rpk's --help output, so it needs an upstream rpk fix; will raise a follow-up ticket.

🤖 Generated with Claude Code

@Feediver1
Feediver1 merged commit 32c36c6 into main Jul 30, 2026
8 checks passed
@Feediver1
Feediver1 deleted the DOC-2397-serdes-contexts branch July 30, 2026 22:16
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.

4 participants