main · last commit
1 month ago ·
2npkec0r
tarantool-etcd-dh3 Watch header.revision can go backwards on a stream (progress vs event fiber interleave)
Lined Up
bd update tarantool-etcd-dh3 --claim
bd close tarantool-etcd-dh3
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-07-17T13:20:16Z |
| Updated | 2026-07-17T13:20:16Z |
etcd 3.4.22/3.5.5 fixed this by routing progress through the stream's single sendLoop. Our RequestProgress computes a header, then performs yielding per-watcher writes (app/etcd/grpc.lua:527-533); a concurrent event fiber (grpc.lua:304,338) can interleave a newer-revision response first, so the client observes header.revision going backwards — which clients treat as a hard invariant violation. Race-shaped: argued from fiber structure, not observed. Reproducer first. Likely shares a root cause with the WatchProgressRequest synchronisation issue — consider fixing together via a single per-stream writer fiber.
header.revision is monotonic per stream under concurrent progress+event load; stress reproducer exists.
No outgoing dependencies.
Nothing depends on this issue.
| id | tarantool-etcd-dh3 |
| content_hash | 6a957612b50e5ee613585d98d570b2f43fa00a9265a5dad4d58971140cd39cb2 |
| title | Watch header.revision can go backwards on a stream (progress vs event fiber interleave) |
| description | etcd 3.4.22/3.5.5 fixed this by routing progress through the stream's single sendLoop. Our RequestProgress computes a header, then performs yielding per-watcher writes (app/etcd/grpc.lua:527-533); a concurrent event fiber (grpc.lua:304,338) can interleave a newer-revision response first, so the client observes header.revision going backwards — which clients treat as a hard invariant violation. Race-shaped: argued from fiber structure, not observed. Reproducer first. Likely shares a root cause with the WatchProgressRequest synchronisation issue — consider fixing together via a single per-stream writer fiber. |
| design | |
| acceptance_criteria | header.revision is monotonic per stream under concurrent progress+event load; stress reproducer exists. |
| notes | |
| status | open |
| priority | 2 |
| issue_type | bug |
| assignee | NULL |
| estimated_minutes | NULL |
| created_at | 2026-07-17T13:20:16Z |
| created_by | Eugene Blikh |
| owner | bigbes@gmail.com |
| updated_at | 2026-07-17T13:20:16Z |
| 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 |
| issue_id | tarantool-etcd-dh3 |
| label | etcd-changelog-sweep |
| id | 019f703c-1cc9-78fc-b0c6-f817686abb7d |
| issue_id | tarantool-etcd-dh3 |
| event_type | created |
| actor | Eugene Blikh |
| old_value | |
| new_value | |
| comment | NULL |
| created_at | 2026-07-17T16:20:15Z |
| id | 019f703c-1cca-702a-adbd-98a5a05b8663 |
| issue_id | tarantool-etcd-dh3 |
| event_type | label_added |
| actor | Eugene Blikh |
| old_value | NULL |
| new_value | NULL |
| comment | Added label: etcd-changelog-sweep |
| created_at | 2026-07-17T16:20:15Z |
No comments.