Skip to content

DOC-6832 Add go-redis automatic pipelining page [PARKED]#3621

Open
andy-stark-redis wants to merge 1 commit into
mainfrom
DOC-6832-document-go-redis-automatic-pipelining-pr-3867
Open

DOC-6832 Add go-redis automatic pipelining page [PARKED]#3621
andy-stark-redis wants to merge 1 commit into
mainfrom
DOC-6832-document-go-redis-automatic-pipelining-pr-3867

Conversation

@andy-stark-redis

@andy-stark-redis andy-stark-redis commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Adds a new Automatic pipelining page to the go-redis client docs, covering the
experimental AutoPipeline() / AsyncAutoPipeline() APIs (blocking and async faces),
config options, cluster slot sharding, and caveats, based on go-redis PR #3867.

⛔️ Do not merge yet. These docs are written against an unmerged, draft upstream PR
(redis/go-redis#3867). The API is
experimental and still actively changing (a public-API refactor landed on the draft
after the docs were first written — see the manifest). No released go-redis version ships
it, the version note on the page is a placeholder (v9.XX.0), and the examples are static
code blocks rather than tested clients-example doctests. Pick this up once the feature
merges to master and ships in a release.

Park manifest

Ticket: DOC-6832
Parked at: 2026-07-10 (re-parked 2026-07-13 with refreshed snapshot)
Trigger to pick up: AutoPipeline() / AsyncAutoPipeline() merged to go-redis master and shipped in a released go-redis v9 version (PR #3867 currently targets the feature/autopipeline/integration branch, not master).
Labels: parked, do not merge yet

Pinned sources (state observed at park time)

Source State at last snapshot (2026-07-13) Re-fetch
redis/go-redis#3867 — "feat(autopipeline): #3 wire into Client and ClusterClient" state: open · draft: true · merged: false · base: feature/autopipeline/integration · milestone: autopipeline (no version) · head SHA: 4fa15e5ce484eb704b6ee114771dbf432e7b97a8 · updated: 2026-07-13T07:45:24Z gh api repos/redis/go-redis/pulls/3867 --jq '{state, merged, draft, head_sha: .head.sha, base: .base.ref, milestone: .milestone.title, updated_at}'

Snapshot history: first parked at head 4bb2c98 (2026-07-10); re-parked at head 4fa15e5
(2026-07-13) after a /pickup found the trigger unmet and the diff moved by +2 commits. To
diff future churn from this snapshot: gh api repos/redis/go-redis/compare/4fa15e5ce484eb704b6ee114771dbf432e7b97a8...<new-head>.

PR #3867 is PR 3 of a series and, per its description, depends on an engine PR ("#1") and an
optional pipeline-pool PR ("#2"); those numbers are the author's in-series shorthand, not
verified GitHub PR numbers, so they are not snapshotted here. Resolve the real dependency PRs
on pickup.

Observed shape — confidence: LOW (unmerged draft, API confirmed still churning)

The page as committed currently documents the original draft shape:

  • AutoPipeline(nil) / AsyncAutoPipeline(nil) taking an optional *AutoPipelineConfig, returning (*AutoPipeliner, error).
  • Config type AutoPipelineConfig with fields MaxBatchSize, MaxFlushDelay, MaxConcurrentBatches (>1 requires Unordered), NumShards, PipelinePoolSize, Unordered, MaxRetries.
  • Blocking vs async faces; cached/first-config-wins/Close; cluster slot sharding; caveats (context not honored once queued, blocking commands never batched, Do bypasses batching, whole-batch retry double-executes).

⚠️ Known divergence observed at re-park (head 4fa15e5, commit "refactor(autopipeline): AutoPipelineOptions + no-arg / WithOptions methods") — the page is already behind:

  • Config type renamed AutoPipelineConfigAutoPipelineOptions (settable via Options.AutoPipelineOptions); DefaultAutoPipelineConfig()DefaultAutoPipelineOptions(), plus a distinct DefaultBlockingAutoPipelineOptions().
  • Method shape split: no-arg AutoPipeline() / AsyncAutoPipeline() (use Options/built-in default) plus AutoPipelineWithOptions(*AutoPipelineOptions) / AsyncAutoPipelineWithOptions(...). The old AutoPipeline(nil) form is gone.
  • New config field AdaptiveDelay (requires MaxFlushDelay > 0) — not on the page.
  • Defaults now visible: MaxBatchSize 200 (default/async) / 300 (blocking); MaxConcurrentBatches 1 (ordered).
  • Extra validation rule: NumShards > 1 requires Unordered: true on the async (deferred) face.
  • ring.go and sentinel.go were also touched — Ring / failover clients may now expose autopipelining beyond Client / ClusterClient. Unverified; check at pickup.

All of the above is from a still-draft diff and may move again before release — do not edit the page against it now.

Re-check checklist

  • (high risk) Rename AutoPipelineConfigAutoPipelineOptions throughout the page (type, DefaultAutoPipelineOptions()), if the rename survives to release.
  • (high risk) Update method usage: no-arg AutoPipeline() / AsyncAutoPipeline() and the WithOptions variants; drop the AutoPipeline(nil) form. Show config via Options.AutoPipelineOptions and/or AutoPipelineWithOptions(...).
  • (high risk) Confirm the version note — replace the v9.XX.0 placeholder with the real go-redis version that ships the API.
  • (high risk) Convert the static ```go blocks to tested {{< clients-example >}} doctests once a go-redis release ships the API and an example set exists.
  • Add the AdaptiveDelay config field (requires MaxFlushDelay > 0) and the observed defaults (MaxBatchSize 200/300, MaxConcurrentBatches 1) if they hold at release.
  • Add the NumShards > 1Unordered (async face) validation rule.
  • Check whether Ring / failover (SentinelClient) clients expose autopipelining and document/scope accordingly.
  • Verify cluster slot-sharding behaviour and per-key ordering description against the merged code.
  • Confirm the caveats list (context, blocking commands, Do, whole-batch retry) still holds.
  • Decide whether to keep or drop the bannerText / {{< note >}} "experimental" wording depending on the feature's status at release.
  • Resolve and (if useful) link the real dependency PRs behind the in-series "Update to gitignore #1"/"Lrc 95 #2" references.

On pickup, then

When the trigger fires, run /pickup on this PR. It reconciles the docs against the
now-settled source and takes the PR through the normal /reflect/finalize pipeline to
merge. The do not merge yet guard holds until /finalize completes.

🤖 Generated with Claude Code

Document the experimental AutoPipeline() and AsyncAutoPipeline() APIs
(blocking and async faces), AutoPipelineConfig options, cluster slot
sharding, and caveats, based on go-redis PR #3867. Cross-link from the
Pipelines/transactions page.

Written against an unmerged draft PR, so two things are deliberately
provisional: the version note reads "v9.XX.0" as a placeholder because
no release ships the API yet, and the examples are static go blocks
rather than tested clients-example doctests because the TCE example set
cannot exist until a release lands. Both resolve at pickup, not now.
The config field list and defaults are also draft-derived and may move.

Learned: page docs an unreleased draft API; version and examples are placeholders to resolve at pickup
Constraint: the "v9.XX.0" version note is a placeholder; do not invent a real version until the release that ships #3867 is known
Directive: convert the static go code blocks to {{< clients-example >}} doctests once go-redis ships the API and an example set exists
Recheck: when go-redis PR #3867 merges and a release ships the AutoPipeline API
Ticket: DOC-6832
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@andy-stark-redis andy-stark-redis added do not merge yet parked PR speculatively added based on pre-release info. Check validity when release goes ahead. labels Jul 13, 2026
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

DOC-6832

@andy-stark-redis andy-stark-redis self-assigned this Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do not merge yet parked PR speculatively added based on pre-release info. Check validity when release goes ahead.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant