Skip to content

feat: add source/redis adapter (Redis Streams)#132

Merged
joshua-temple merged 1 commit into
mainfrom
feat/source-redis
Jun 4, 2026
Merged

feat: add source/redis adapter (Redis Streams)#132
joshua-temple merged 1 commit into
mainfrom
feat/source-redis

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

What this change does

Adds source/redis, a Redis Streams ingress adapter for the source seam (one of the four roadmap items from #131). It's a consumer-group Inlet over go-redis: XREADGROUP to consume, XACK on ack, pending-entry XCLAIM redelivery on nak, and dead-letter-stream routing on term.

Capabilities are advertised honestly by type assertion, never a lowest-common-denominator lie:

  • SharedDurable — the consumer group is the shared, durable cursor.
  • Seekable — entry-ID XRANGE replay.
  • LagReporterXINFO GROUPS / XLEN.

Redis Streams has no partitions, so PartitionKey is empty and the Hopper shards by Key; it offers no ConsumerGroups (in the Kafka sense) and no Transactional, so those interfaces are deliberately not implemented.

Why

Redis Streams is a common, low-ceremony ingress that many teams already run, so it rounds out the native-adapter set alongside Kafka and JetStream without dragging a heavyweight broker in. It's its own module built GOWORK=off (go-redis never enters the core graph) and is wired into the source-destinations matrix and the testcontainers integration leg.

Relates to: follows up the source Tier-1 PR (#131).

Checklist

  • Commits are signed off (git commit -s) per the DCO
  • Conventional commit messages (type: subject)
  • Tests added (unit + testcontainers integration); adapter at 89.2% coverage
  • Public API documented (godoc + Example test + adapters docs page)
  • mage check runs in CI across the workspace and the GOWORK=off source destinations

Consumer-group Inlet over go-redis: XREADGROUP consume, XACK on ack, pending
XCLAIM redelivery on nak, dead-letter stream routing on term. Honest
capabilities by assertion: SharedDurable (the consumer group), Seekable
(entry-ID XRANGE replay), LagReporter (XINFO GROUPS / XLEN). No partitions, so
PartitionKey is empty and the Hopper shards by Key; no ConsumerGroups, no
Transactional. Own module, GOWORK=off, wired into the source CI matrices.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple joshua-temple merged commit b814016 into main Jun 4, 2026
238 of 240 checks passed
@joshua-temple joshua-temple deleted the feat/source-redis branch June 4, 2026 15:11
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.

1 participant