Skip to content

Prepare release 0.2.1 - #75

Merged
albertompe merged 1 commit into
mainfrom
internal/release-0.2.1
Oct 22, 2026
Merged

albertompe merged 1 commit into
mainfrom
internal/release-0.2.1

Conversation

@albertompe

Copy link
Copy Markdown
Contributor

Redkey Robin v0.2.1

This patch release hardens Robin's handling of persistent clusters that retain
their PVCs
(deletePVC: false) across upgrades and scaling, adds a
scale-to-zero lookahead, exposes build/version information, and refreshes
the toolchain and dependencies. There are no CRD changes; it is a drop-in
replacement for v0.2.0.

Highlights

  • Scale-to-zero lookahead. When a later pending RedkeyConfig targets
    primaries: 0, Robin jumps straight to the last such config and marks the
    intermediate ones as Superseded, regardless of skipIfSuperseded. A wedged
    InProgress config (e.g. an upgrade to an invalid image) is also superseded when
    scaling to zero discards the cluster data (ephemeral cluster or
    deletePVC: true); storage clusters that keep their PVCs wait for the
    InProgress operation to finish so they can be restored when scaling back up
    ([Feature] Fast-path scale-to-zero: supersede intermediate pending configs #41, partially mitigates [Bug] Unrecoverable deadlock when an in-progress config cannot complete #42).
  • Build info. New redkey_robin_build_info gauge (labels version and
    go_version), a --version flag, the version in the startup log, and
    redkey-robin/<version> as the Kubernetes client User-Agent.

Fixes

  • Repeated Rolling N+1 upgrades on persistent clusters (deletePVC: false) no
    longer stall forever: stale extra (N+1) pods remounting retained PVCs are reset
    to pristine empty masters before being met (clusters already stuck recover), and
    the extra pods are left pristine at the end of every upgrade.
  • Scale-up of persistent clusters resets re-created pods that remount a PVC
    retained by an earlier scale-down instead of integrating them under their stale
    identity.
  • Recycling a drained node during a Rolling N+1 upgrade no longer lets the
    restarted pod reload stale keys from the AOF and claim their slots.
  • Slot range parsing hardened: slots outside 0-16383 are rejected,
    CountSlotsFromRanges ignores malformed tokens, and unparseable slot entries are
    treated as ownership to protect slot owners from CLUSTER FORGET ([Bug] Harden slot range parsing in Robin against out-of-range and malformed tokens #62).
  • Version injection: the image build's -ldflags -X main.version was a silent
    no-op; the version is now injected (also by make build/make run), with plain
    go build falling back to dev.
  • Security: golang.org/x/net bumped to v0.61.0 (GO-2026-6603, GO-2026-6610,
    GO-2026-6611, GO-2026-6612, GO-2026-6617).

Packaging & tooling

  • Go 1.27.2, controller-runtime v0.25.2, k8s.io/* v0.37.1, go-redis v9.23.0 and
    the remaining direct dependencies at their latest versions.
  • Bundled redis-cli bumped to 8.10.2.
  • golangci-lint v2.14.0 with a .golangci.yml aligned with Redkey Operator;
    envtest pinned to Kubernetes 1.33.
  • Go native fuzz tests for the Redis output parsers (make fuzz) and integration
    specs against real redis-server processes (make redis, label redis).
  • Removed the unused redis.ParseOpenSlots helper.

Compatibility

  • No CRD changes. Works with Redkey Operator v0.2.x; Redkey Operator v0.2.1 is
    recommended (its Grafana dashboard shows the Robin version from
    redkey_robin_build_info).

Signed-off-by: Alberto Martínez Pérez <albertompe@ext.inditex.com>
@albertompe
albertompe requested a review from a team as a code owner October 22, 2026 13:28
@albertompe
albertompe merged commit 210fe9a into main Oct 22, 2026
18 checks passed
@albertompe
albertompe deleted the internal/release-0.2.1 branch October 22, 2026 15:15
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.

2 participants