~bigbes/tarantool-etcd · parade

main · last commit 1 month ago · 2npkec0r

← Back to the parade

tarantool-etcd-1sh KV.RangeStream RPC (etcd 3.7) — server-streaming chunked Range Lined Up

status: open P2 feature
bd update tarantool-etcd-1sh --claim bd close tarantool-etcd-1sh
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-17T11:29:51Z
Updated2026-07-17T11:29:51Z
Description
etcd 3.7 adds KV.RangeStream: a server-streaming variant of Range that delivers a large result set as a sequence of RangeStreamResponse chunks instead of buffering the whole RangeResponse. Lowers latency and bounds server-side buffering memory.

Current state: proto/etcdserverpb/rpc.proto ALREADY vendors the RPC (line 25) and RangeStreamResponse (line 1239), and app/etcd/pb/gen/etcdserverpb/rpc_pb.lua has the generated RangeStreamResponse descriptor (line 183). What is missing is the route entry in app/etcd/pb/routes.lua and a handler — nothing dispatches it today.

Scope: add the route with stream = true, implement a chunked range in app/etcd/kv.lua that reuses the existing iteration path but emits N kvs per chunk, wire the gRPC server-streaming send path, and decide the JSON gateway shape (upstream JSONPb streams newline-delimited {"result": {...}} objects, same as Watch).
Design
Chunk boundary policy needs a decision: fixed kv count vs byte budget. Upstream chunks by count. The whole stream must read at a single revision — take the revision once up front and pass it down, same as a paginated Range, so a concurrent write cannot make chunks inconsistent with each other.
Acceptance criteria
Conformance test drives KV.RangeStream against both backends on both wires and gets identical chunk contents (chunk boundaries may differ); result set spanning multiple chunks is consistent at one revision; docs/TODO.md updated.

Depends on

No outgoing dependencies.

Depended on by

Nothing depends on this issue.

No comments.

  • Eugene Blikh created the issue · 2026-07-17T14:29:50Z
Stored rows — what this pane was built from, as read
issues 1 row
id tarantool-etcd-1sh
content_hash 520b57f1eb27bf42f4c3733f9fae40e71be0eefb27b0c553d2a6ce2cdda00172
title KV.RangeStream RPC (etcd 3.7) — server-streaming chunked Range
description etcd 3.7 adds KV.RangeStream: a server-streaming variant of Range that delivers a large result set as a sequence of RangeStreamResponse chunks instead of buffering the whole RangeResponse. Lowers latency and bounds server-side buffering memory. Current state: proto/etcdserverpb/rpc.proto ALREADY vendors the RPC (line 25) and RangeStreamResponse (line 1239), and app/etcd/pb/gen/etcdserverpb/rpc_pb.lua has the generated RangeStreamResponse descriptor (line 183). What is missing is the route entry in app/etcd/pb/routes.lua and a handler — nothing dispatches it today. Scope: add the route with stream = true, implement a chunked range in app/etcd/kv.lua that reuses the existing iteration path but emits N kvs per chunk, wire the gRPC server-streaming send path, and decide the JSON gateway shape (upstream JSONPb streams newline-delimited {"result": {...}} objects, same as Watch).
design Chunk boundary policy needs a decision: fixed kv count vs byte budget. Upstream chunks by count. The whole stream must read at a single revision — take the revision once up front and pass it down, same as a paginated Range, so a concurrent write cannot make chunks inconsistent with each other.
acceptance_criteria Conformance test drives KV.RangeStream against both backends on both wires and gets identical chunk contents (chunk boundaries may differ); result set spanning multiple chunks is consistent at one revision; docs/TODO.md updated.
notes
status open
priority 2
issue_type feature
assignee NULL
estimated_minutes NULL
created_at 2026-07-17T11:29:51Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-07-17T11:29:51Z
closed_at NULL
closed_by_session
external_ref NULL
spec_id
compaction_level 0
compacted_at NULL
compacted_at_commit NULL
original_size NULL
sender
ephemeral 0
wisp_type
pinned 0
is_template 0
mol_type
work_type
source_system
metadata <binary>
source_repo
close_reason
event_kind
actor
target
payload
await_type
await_id
timeout_ns 0
waiters
hook_bead
role_bead
agent_state
last_activity NULL
role_type
rig
due_at NULL
defer_until NULL
no_history 0
started_at NULL
is_blocked 0
events 1 row
id 019f6fd7-075f-7c6f-bdd0-ea2dafee89b5
issue_id tarantool-etcd-1sh
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-07-17T14:29:50Z