Skip to content

DOC-6816 Document smart client handoffs (SCH) for Redis Enterprise on Kubernetes - #3597

Open
andy-stark-redis wants to merge 5 commits into
release-k8s-edenfrom
DOC-6816-sch-k-8-s-docs
Open

andy-stark-redis wants to merge 5 commits into
release-k8s-edenfrom
DOC-6816-sch-k-8-s-docs

Conversation

@andy-stark-redis

@andy-stark-redis andy-stark-redis commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Documents Smart client handoffs (SCH) support for Redis Enterprise on Kubernetes (DOC-6816), based on David Maier's input.

  • New page content/operate/kubernetes/networking/smart-client-handoffs.md — enables SCH on a K8s REC for the same-pod-network / IP-based / no-TLS scenario: prerequisites and version gates (RS 8.0.2-17 standalone, 8.0.16-29 OSS Cluster API), get cluster credentials, enable via the PUT /v1/cluster REST API request, verify the MONITOR handshake, and validate during an operator upgrade. Includes port-forward guidance for reaching the ClusterIP REST service.
  • content/develop/clients/sch.md — the Kubernetes section now says SCH is supported (was "not currently supported") and links to the new page.
  • content/operate/kubernetes/networking/_index.md — adds a Smart client handoffs section.
  • content/operate/rs/references/rest-api/objects/cluster/_index.md — adds the oss_cluster_client_maint_notifications field row.

Reviewer questions (need eng sign-off)

  • oss_cluster_client_maint_notifications is undocumented upstream. It's absent from the release notes and (before this PR) the REST API reference. Please confirm the exact name and default.
  • Two-flag enablement. The enable step sets both client_maint_notifications and oss_cluster_client_maint_notifications. Please confirm whether a standalone-only cluster on 8.0.2-17 accepts the OSS flag, and whether OSS Cluster API mode requires both flags or only the OSS-specific one. If it matters, the command should be split by mode.

Deferred (intentional)

  • The external / TLS / name-based access scenario is a TODO in the source doc, so it's out of scope here. A scope note in the page and overview says so. Worth a follow-up ticket.

Notes

  • Authored in the current (top-level) networking/; not mirrored into the 8.0/networking/ snapshot — leave to release-branch sync unless we want it now.
  • hugo --renderToMemory builds clean (exit 0, no relref errors).

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only changes with no runtime or security impact; the new REST field description may need engineering confirmation of name and default.

Overview
Documents smart client handoffs (SCH) for Redis Software on Kubernetes, replacing the prior “not supported” stance in the client overview.

Adds smart-client-handoffs.md with end-to-end guidance: version prerequisites, enabling clientMaintenanceNotifications on the REC (proxyMode / ossMode), how the operator owns those settings, in-cluster client connectivity (including internal-ip vs none), and how to verify SCH via client debug logs and during a rolling upgrade.

Updates the Kubernetes networking index with a SCH section and links, and extends the cluster REST API reference with oss_cluster_client_maint_notifications. External TLS / name-based access is explicitly out of scope on the new page.

Reviewed by Cursor Bugbot for commit f412d94. Bugbot is set up for automated code reviews on this repo. Configure here.

… Kubernetes

Add a networking page for enabling SCH on a K8s REC, plus supporting edits to
the SCH overview, the networking index, and the REST API cluster-object
reference. The enablement steps, the MONITOR-handshake verification, and the
two notification flags come from David Maier's Slack/Google doc rather than
any released reference. The load-bearing surprise: oss_cluster_client_maint_notifications
does not appear in the release notes or the REST API cluster object docs, so I
documented it from the source doc and added the reference row myself. Enablement
is via the REST API on purpose (a temporary workaround) because the REC cluster
spec does not yet expose these settings. The page is deliberately scoped to the
same-pod-network / IP-based / no-TLS case; the external/TLS/name-based scenario
is a TODO in the source doc, not an oversight.

Learned: SCH-for-K8s config sourced from David's doc; the key OSS flag is undocumented upstream
Gaps: oss_cluster_client_maint_notifications absent from release notes and REST API reference before this change; unconfirmed whether standalone on 8.0.2-17 accepts it, or whether OSS mode needs both flags — needs eng sign-off
Recheck: when the REC cluster spec exposes SCH settings, replace the REST API enablement workaround
Directive: external/TLS/name-based SCH is intentionally deferred (source doc TODO) — do not treat its absence as a gap
Ticket: DOC-6816
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@CLAassistant

CLAassistant commented Jul 7, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@github-actions

github-actions Bot commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

DOC-6816

@andy-stark-redis andy-stark-redis self-assigned this Jul 7, 2026
@andy-stark-redis andy-stark-redis added k8s clients Client library docs rs Redis Software labels Jul 7, 2026
@andy-stark-redis
andy-stark-redis requested review from kaitlynmichael and rrelledge and removed request for kaitlynmichael, mortensi and rrelledge July 7, 2026 14:16

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

Thank you! Looks good to me. I just left a couple of comments, but I would ultimately follow Kaitlyn's advice after she has time to review this.

Comment on lines +19 to +22
You need a RedisEnterpriseCluster (REC) running a version of Redis Enterprise Software that supports SCH:

- Redis Enterprise Software 8.0.2-17 or later for standalone (Enterprise cluster mode) connections.
- Redis Enterprise Software 8.0.16-29 or later for [OSS Cluster API]({{< relref "/operate/rs/databases/configure/oss-cluster-api" >}}) connections.

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.

On the Redis Software side, we dropped "Enterprise" from the name. But I would go with whatever Kaitlyn thinks is appropriate for the k8s section.

Suggested change
You need a RedisEnterpriseCluster (REC) running a version of Redis Enterprise Software that supports SCH:
- Redis Enterprise Software 8.0.2-17 or later for standalone (Enterprise cluster mode) connections.
- Redis Enterprise Software 8.0.16-29 or later for [OSS Cluster API]({{< relref "/operate/rs/databases/configure/oss-cluster-api" >}}) connections.
You need a RedisEnterpriseCluster (REC) running a version of Redis Software that supports SCH:
- Redis Software 8.0.2-17 or later for standalone (Enterprise cluster mode) connections.
- Redis Software 8.0.16-29 or later for [OSS Cluster API]({{< relref "/operate/rs/databases/configure/oss-cluster-api" >}}) connections.

Comment thread content/operate/kubernetes/networking/smart-client-handoffs.md Outdated
Comment thread content/operate/kubernetes/networking/smart-client-handoffs.md Outdated
@andy-stark-redis

Copy link
Copy Markdown
Contributor Author

Thanks @rrelledge !

@kaitlynmichael

Copy link
Copy Markdown
Contributor

I will have to run this past engineering SMEs. I haven't heard anything about this or if we are supporting it.

The CAE "SCH on Kubernetes - Status of Record" page shows the MONITOR handshake
capture was never actually done: the expected handshake strings were inferred
from client-side rebind/DEBUG logs (Lettuce INTERNAL_IP, redis-py notification
logs), not observed server-side via MONITOR. Reframe the verify section to lead
with the confirmed client-log evidence and present the MONITOR handshake as
expected behaviour, with MONITOR demoted to a secondary server-side option.

Learned: MONITOR handshake was never captured in K8s SCH testing; only client-side DEBUG/rebind evidence exists
Gaps: exact MONITOR handshake strings remain unconfirmed server-side (per CAE status-of-record, 2026-07-18)
Ticket: DOC-6816
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@andy-stark-redis

andy-stark-redis commented Jul 20, 2026 •

Copy link
Copy Markdown
Contributor Author

Cross-referenced against the CAE SCH on Kubernetes - Status of Record page (compiled 2026-07-18, evidence-linked to the CAE test pages, #sch-k8s, and Jira). It largely corroborates this PR. Notes for review:

Applied in this PR (commit reframing the verification section): the status-of-record marks both MONITOR handshake captures as NOT DONE — the expected strings were inferred from client-side rebind/DEBUG logs (Lettuce INTERNAL_IP, redis-py notification logs), never observed server-side. The "Verify SCH is active" section now leads with the confirmed client-log evidence and presents the MONITOR handshake as expected behaviour.

Corroborated (raises confidence on an earlier open question): enabling both client_maint_notifications and oss_cluster_client_maint_notifications in one PUT /v1/cluster was tested and both returned true. Still worth an eng confirm on the exact field name/default of oss_cluster_client_maint_notifications and whether a standalone-only cluster on 8.0.2-17 accepts the OSS flag.

Scenario 2 deferral confirmed as correct: external/TLS/name-based is "INVESTIGATED, BLOCKED BY PRODUCT GAPS", not merely unwritten — hostname certs lack IP SANs while CLUSTER SLOTS/SMIGRATED return pod IPs, and DMC hardcodes a nodeN.* prefix (RED-197931, TO DO). Keep it out of scope here.

Follow-up trigger for the REST API workaround: operator PR redis-enterprise-operator#6560 (David Maier) exposes the flags via the REC CRD as maintenanceNotifications.* (epic RED-203631, in review). When that ships, switch the enablement steps from the REST API to the CRD spec.


You can also observe the handshake server-side with the [`MONITOR`]({{< relref "/commands/monitor" >}}) command.

## Validate SCH during an upgrade

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.

For validation purposes, I think it's better to initiate an endpoint rebind via rladmin, and not go through a full rolling upgrade - at least not as a first validation step.
@dmaier-redislabs can you please confirm whether this is a sufficient validation approach?

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.

To add a rebind as the first check, which rladmin bind endpoint form should the docs use: exclude, include, or policy? exclude forces the endpoint to move but leaves a persistent configuration change.


[Smart client handoffs]({{< relref "/develop/clients/sch" >}}) (SCH) let a Redis Enterprise cluster notify clients about planned maintenance shortly before it happens, so clients can reconnect or otherwise respond gracefully without significant interruptions in service. SCH is primarily useful during server software or hardware upgrades, where it provides *relaxed timeouts* and transparent *pre-handoffs* to new endpoints. See [Smart client handoffs]({{< relref "/develop/clients/sch" >}}) for a full description of the feature.

This page describes how to enable SCH for a Redis Enterprise cluster (REC) running on Kubernetes when your application and the cluster run within the same Kubernetes pod network, using IP-based access without TLS. External access over TLS with name-based addressing is not yet covered.

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.

Beyond describing how to enable SCH, I think it would be useful if we include usage guidelines, and particularly with the aspects that are specific to K8s - connecting (seed address) via a ClusterIP or Headless service, or just directly using pod IPs (less common I suppose, and not recommended); how to use the different endpoint types (none vs internal-ip) and what SCH will provide with each type.

Unfortunately, I'm not an SME on that topic, and hopefully @dmaier-redislabs can chime in about what would be important to document. There's also this doc describing testing that was done, probably a good starting point.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history:

Memory updated at f412d94

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e491471. Configure here.


[Smart client handoffs]({{< relref "/develop/clients/sch" >}}) (SCH) let a Redis Enterprise cluster notify clients about planned maintenance shortly before it happens, so clients can reconnect or otherwise respond gracefully without significant interruptions in service. SCH is primarily useful during server software or hardware upgrades, where it provides *relaxed timeouts* and transparent *pre-handoffs* to new endpoints. See [Smart client handoffs]({{< relref "/develop/clients/sch" >}}) for a full description of the feature.

This page describes how to enable SCH for a Redis Enterprise cluster (REC) running on Kubernetes when your application and the cluster run within the same Kubernetes pod network, using IP-based access without TLS. External access over TLS with name-based addressing is not yet covered.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Scope note forecasts later TLS support

Low Severity

The scope sentence says external TLS and name-based access is not yet covered, which implies later support. This violates the Kubernetes AGENTS.md rule to document current behavior only and not foreshadow planned support.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit e491471. Configure here.

@kaitlynmichael
kaitlynmichael changed the base branch from main to release-k8s-eden October 15, 2026 20:30

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

I've added a few commits with Rachel and Zvi's suggestions and I think its ready to merge into the release-k8s-eden branch for next week's release.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants