~bigbes/tarantool-etcd · issues

655bfqukcar7un24ca7vntbekg7h3758 · 3 rows

idcontent_hashtitledescriptiondesignacceptance_criterianotesstatuspriorityissue_typeassigneeestimated_minutescreated_atcreated_byownerupdated_atclosed_atclosed_by_sessionexternal_refspec_idcompaction_levelcompacted_atcompacted_at_commitoriginal_sizesenderephemeralwisp_typepinnedis_templatemol_typework_typesource_systemmetadatasource_repoclose_reasonevent_kindactortargetpayloadawait_typeawait_idtimeout_nswaitershook_beadrole_beadagent_statelast_activityrole_typerigdue_atdefer_untilno_historystarted_at
tarantool-etcd-9z27993430a7610e43d13141d366e3b7b3f7ec6ea2063030b9d2815a2a770cf3546Phase 5f — Watch option coveragePer-option density on Watch RPCs. Big stream-shaped surface, highest remaining value but also highest effort. Run after Phase 5e. Likely tests: - TestWatchWithFilterPut / TestWatchWithFilterDelete (server-side event filtering) - TestWatchProgressNotifyExplicit (RequestProgress on demand vs the implicit 10-minute heartbeat already covered) - TestWatchWithFragment (large-response fragmentation — may surface a tarantool-side gap) - TestWatchWithPrevKV (per-watcher prev-kv flag, distinct from WithPrevKV on Put/Delete) - TestWatchFromCompactedRevision (ErrCompacted returned on the stream, not as a typed gRPC status)Each listed test ported, runs on all four cells, passes (or documented as a known gap with cross-reference).Source: docs/TODO.md "Open / Conformance matrix — Phase 5 option coverage".open2taskNULLNULL2026-05-19T13:34:06ZEugene Blikhbigbes@gmail.com2026-05-19T13:34:06ZNULLNULL0NULLNULLNULL000<binary>0NULLNULLNULL0NULL
tarantool-etcd-lac9b0811dbe3090da92e2f2c059b263cbef43e1721b4418917747dcf3102a20f60Phase 5e — Lease option coveragePer-option density on Lease RPCs. Canonical paths are already covered; what is missing is option coverage in the {tarantool, etcd} × {grpc, json} matrix. Smallest remaining surface — should be the warm-up before Phase 5f. Likely tests: - TestLeaseGrantWithExplicitID - TestLeaseGrantTTLBoundaries (TTL=0 / negative / very-large) - TestLeaseTimeToLiveAttachedKeys - TestLeaseRevokeRevokesAttachedKeys (each attached key disappears + watcher sees DELETE at the revoke revision) - TestLeaseKeepAliveOnceTTLZero (cross-wire — jsonclient-internal case already pinned) Sub-phases 5a-c each surfaced one Lua-side divergence — expect at least one more here.Each listed test ported, runs on all four cells, passes (or is documented as a known gap in tests/conformance/harness/gaps.go cross-referenced from docs/TODO.md).Source: docs/TODO.md "Open / Conformance matrix — Phase 5 option coverage".open2taskNULLNULL2026-05-19T13:34:01ZEugene Blikhbigbes@gmail.com2026-05-19T13:34:01ZNULLNULL0NULLNULLNULL000<binary>0NULLNULLNULL0NULL
tarantool-etcd-lkoa9f5b3fdb1d8c955ea9817c5961cd2fd334733f9495cfcea8dc728d5d59c5badRoute writes to current master (write-forwarding on followers)Followers currently reject writes with ER_READONLY → gRPC UNAVAILABLE, and clientv3 does NOT fail over endpoints on Unavailable (see memory feedback_clientv3_error_assertions). Clients must pin to the leader, which breaks endpoint-agnostic client setups (AutoSyncInterval, DNS round-robin, k8s Service). Implement write-forwarding inside the role: when a follower receives a mutating RPC (Put / DeleteRange / Txn-with-writes / LeaseGrant / LeaseRevoke / LeaseKeepAlive / Compact / Auth* / Lock / Campaign / Resign / Proclaim), proxy it to the current Raft leader via experimental.connpool + a setuid stored Lua function (same pattern as MaintenanceMoveLeader, see project_cross_node_promote memory). Reads stay local per replicaset.read_pref (already implemented).- Reuse the connpool helper introduced for MaintenanceMoveLeader (tests/conformance/harness/tarantool_rs_server.go:475 area). - Trigger forwarding inside grpc.lua make_handler before dispatching the write — cheaper than wrapping every kv/lease/txn module. - box.info.election.leader gives the leader id; map id→advertise URL via advertise.lua (already used for MemberList clientURLs). - Streaming RPCs (Watch, LeaseKeepAlive, Election Observe) are subtler — defer or handle separately; first cut should be unary-only.1. Mutating RPC on a follower in tarantool_rs3 backend succeeds (matches the leader-equivalent response shape, including header.revision monotonicity). 2. No regression in existing rs3 conformance subtests. 3. New conformance subtest TestWriteForwardingOnFollower covers Put/Txn/LeaseGrant from a follower endpoint. 4. If the leader is unknown (election in progress), return ErrGRPCNoLeader as today.Discussed in chat 2026-05-19 as the only multi-master option that preserves etcd contract. Memory refs: project_cross_node_promote, feedback_clientv3_error_assertions.open2featureNULLNULL2026-05-19T13:33:55ZEugene Blikhbigbes@gmail.com2026-05-19T13:33:55ZNULLNULL0NULLNULLNULL000<binary>0NULLNULLNULL0NULL