gj5ac5eg8vpd22tim0dhv4k54hsatgv7 · 108 rows
| id | content_hash | title | description | design | acceptance_criteria | notes | status | priority | issue_type | assignee | estimated_minutes | created_at | created_by | owner | updated_at | closed_at | closed_by_session | external_ref | spec_id | compaction_level | compacted_at | compacted_at_commit | original_size | sender | ephemeral | wisp_type | pinned | is_template | mol_type | work_type | source_system | metadata | source_repo | close_reason | event_kind | actor | target | payload | await_type | await_id | timeout_ns | waiters | hook_bead | role_bead | agent_state | last_activity | role_type | rig | due_at | defer_until | no_history | started_at |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tarantool-etcd-w8q | 472222f8e9e50041b82f23593de29308c6f31d0649b21012f82ea3df9f38020c | iproto parity for the gRPC surface | Bring app/etcd/api.lua iproto CALL surface to functional parity with the gRPC surface in app/etcd/pb/defs.lua. 32 already-implemented endpoints need Lua verification tests; 16 missing endpoints (Cluster, Maintenance, Election) need both implementation wrappers and tests. Out of scope: Watch and LeaseKeepAlive bidi-streams, Maintenance.Snapshot/Downgrade. For UNIMPLEMENTED-by-design endpoints, wrappers are created anyway and propagate the same UNIMPLEMENTED error so the surface is uniform. | Every gRPC method in defs.lua (excluding streaming divergences) has a matching etcd_* iproto wrapper. Every wrapper has a Lua testkit test in test/iproto_parity_test.lua asserting response shape and error mapping match gRPC. test/run.lua group iproto/parity passes. | open | 2 | epic | NULL | NULL | 2026-05-19T14:53:51Z | Eugene Blikh | bigbes@gmail.com | 2026-05-19T14:53:51Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | |||||||||||||||||||||||
| tarantool-etcd-wgx | 5a455111b3144aca15dfc7df9cce92515e6000d9cd0fa1e761c4ba493c83082f | iproto-verify: etcd_authenticate vs Auth.Authenticate | Add Lua testkit verification for etcd_authenticate (mirrors gRPC Auth.Authenticate). Successful path: assert response shape matches the gRPC response message after MsgPack round-trip. Error path: at least one error case asserting {code, message} matches app/etcd/errors.lua catalog. Exercise at least one non-default option if applicable. Goes in test/iproto_parity_test.lua under group iproto/parity/auth. Call shape: local resp = etcd_authenticate(req). | Verification-only. Wrapper exists at app/etcd/api.lua. Epic tarantool-etcd-w8q. | open | 3 | task | NULL | NULL | 2026-05-19T14:54:05Z | Eugene Blikh | bigbes@gmail.com | 2026-05-19T14:54:05Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | |||||||||||||||||||||||
| tarantool-etcd-wqn | a7a2759a10e1b49b4c98ebf2bcc0979aff638f3764809fdee4605d8441e1adb6 | iproto-impl: etcd_maintenance_alarm vs Maintenance.Alarm | Wrap the existing handler maintenance.alarm (already invoked by gRPC/JSON via defs.lua route etcdserverpb.Maintenance.Alarm) as a Lua global etcd_maintenance_alarm callable via iproto CALL. Mechanical change in app/etcd/api.lua: add rawset(_G, 'etcd_maintenance_alarm', wrap('maintenance', 'alarm')) under the appropriate service block; append 'etcd_maintenance_alarm' to the funcs table so box.schema.func.create plus guest grant runs at role apply; document the wrapper in the module-level LDoc comment. If Maintenance.Alarm returns UNIMPLEMENTED today, the wrapper still gets added so the iproto caller observes the same UNIMPLEMENTED error gRPC would return. Election.Observe is server-streaming over gRPC; iproto has no stream primitive, so propose a polling shape (observe_create/_pull/_cancel) mirroring the Watch precedent at api.lua:81-83. | etcd_maintenance_alarm is callable from net.box:call('etcd_maintenance_alarm', {req}) with no Lua error before handler dispatch. Successful request shape produces same successful response shape as gRPC. box.schema.func.create plus guest grant idempotent on role re-apply. | Epic tarantool-etcd-w8q. Handler at app/etcd/maintenance.lua. | open | 3 | task | NULL | NULL | 2026-05-19T14:54:30Z | Eugene Blikh | bigbes@gmail.com | 2026-05-19T14:54:30Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | ||||||||||||||||||||||
| tarantool-etcd-ymm | 5abccb539c482913cabd242acf2b32afd6eb182fda57781a502ac4411d704a0d | iproto-impl: etcd_maintenance_move_leader vs Maintenance.MoveLeader | Wrap the existing handler maintenance.move_leader (already invoked by gRPC/JSON via defs.lua route etcdserverpb.Maintenance.MoveLeader) as a Lua global etcd_maintenance_move_leader callable via iproto CALL. Mechanical change in app/etcd/api.lua: add rawset(_G, 'etcd_maintenance_move_leader', wrap('maintenance', 'move_leader')) under the appropriate service block; append 'etcd_maintenance_move_leader' to the funcs table so box.schema.func.create plus guest grant runs at role apply; document the wrapper in the module-level LDoc comment. If Maintenance.MoveLeader returns UNIMPLEMENTED today, the wrapper still gets added so the iproto caller observes the same UNIMPLEMENTED error gRPC would return. Election.Observe is server-streaming over gRPC; iproto has no stream primitive, so propose a polling shape (observe_create/_pull/_cancel) mirroring the Watch precedent at api.lua:81-83. | etcd_maintenance_move_leader is callable from net.box:call('etcd_maintenance_move_leader', {req}) with no Lua error before handler dispatch. Successful request shape produces same successful response shape as gRPC. box.schema.func.create plus guest grant idempotent on role re-apply. | Epic tarantool-etcd-w8q. Handler at app/etcd/maintenance.lua. | open | 3 | task | NULL | NULL | 2026-05-19T14:54:41Z | Eugene Blikh | bigbes@gmail.com | 2026-05-19T14:54:41Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | ||||||||||||||||||||||
| tarantool-etcd-zc7 | 47699b40eacc700cd65c09da563573fbd2ac63d67fd9ba709b6178394119ad21 | CLI utility: migrate existing config/data into tarantool-etcd | Provide a configuration migration utility that moves an existing etcd configuration (and KV data) into a tarantool-etcd store, so users can adopt tarantool-etcd without hand-copying keys. Should cover the Tarantool EE centralized-config flow demonstrated in examples/tarantool-ee-self-hosted-etcd and examples/tarantool-ee-config: read config from a source (local cluster-config.yaml or a real etcd endpoint) and write it under the configured prefix into tarantool-etcd over the /v3 wire. Scope to nail down: source modes (file vs live etcd), key-range copy semantics, prefix handling, dry-run/diff output, and idempotency on re-run. | open | 2 | feature | NULL | NULL | 2026-05-20T14:33:31Z | Eugene Blikh | bigbes@gmail.com | 2026-05-20T14:33:31Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | ||||||||||||||||||||||||
| tarantool-etcd-zkg | 72a34c0ab42f90eede7cbbfd3ec5f7ef4f98cdbb5232099ad2926aaa87a61111 | Learner: conformance — join real etcd cluster, assert log replication | End-to-end test in tests/conformance: SpawnEtcd (or a small etcd cluster), MemberAddAsLearner the tarantool node with its advertise_peer_url, wait for it to become a healthy learner, then: (1) Put on the real etcd leader, assert it appears via Range on the tarantool learner with the SAME mod_revision; (2) assert MemberList on the cluster shows the tarantool node as IsLearner=true; (3) lease grant + key-with-lease on the leader replicates and the learner reflects lease attachment; (4) auth enable on the leader propagates; (5) force a snapshot (lower --snapshot-count, churn keys past compaction) and assert the learner recovers via snapshot receive. Use the harness, never tt start (memory feedback_use_harness_not_tt). | This is the correctness oracle for the whole epic — each phase above is unverifiable in isolation against real etcd without it. Gate behind a build tag / env since it boots a foreign etcd cluster. | open | 2 | task | NULL | NULL | 2026-05-20T06:45:18Z | Eugene Blikh | bigbes@gmail.com | 2026-05-20T06:45:18Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | |||||||||||||||||||||||
| tarantool-etcd-zwg | 5f1f8ad7dadfa6be0ecaa0dc1d71f690076e930bc5073feb538b71faf1f2d7d6 | iproto-verify: etcd_user_get vs Auth.UserGet | Add Lua testkit verification for etcd_user_get (mirrors gRPC Auth.UserGet). Successful path: assert response shape matches the gRPC response message after MsgPack round-trip. Error path: at least one error case asserting {code, message} matches app/etcd/errors.lua catalog. Exercise at least one non-default option if applicable. Goes in test/iproto_parity_test.lua under group iproto/parity/auth. Call shape: local resp = etcd_user_get(req). | Verification-only. Wrapper exists at app/etcd/api.lua. Epic tarantool-etcd-w8q. | open | 3 | task | NULL | NULL | 2026-05-19T14:54:08Z | Eugene Blikh | bigbes@gmail.com | 2026-05-19T14:54:08Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL | |||||||||||||||||||||||
| tarantool-etcd-zws | b99aec7b0025f26f4e59b5bf3e6287ee00f117d8f119775c13dcfbb23132d00e | Replica route: revision alignment with upstream | In replica mode the local global revision sequence (box.sequence in revision.lua) must mirror upstream's revisions exactly so that Range/Watch reads return etcd-consistent create_revision/mod_revision/header.revision. Work: - While replica mode is active, the local revision allocator must NOT mint its own revisions for replicated writes; it must set revision = the upstream mod_revision carried by each Range/Watch event. - Decide handling of the box.sequence: drive it to upstream's current revision (set, not next()) as events apply, or bypass it entirely for replicated mutations via the *_internal write paths. - Ensure header.revision returned to local clients equals the latest synced upstream revision, and compact_revision tracks upstream compaction. This is cross-cutting with bootstrap + watch-tail; it defines the invariant both must uphold. | revision.lua owns the box.sequence. Replicated writes likely go through put_internal/delete_range_internal with an explicit revision arg to avoid double-allocation. | open | 2 | task | NULL | NULL | 2026-05-20T06:17:55Z | Eugene Blikh | bigbes@gmail.com | 2026-05-20T06:17:55Z | NULL | NULL | 0 | NULL | NULL | NULL | 0 | 0 | 0 | <binary> | 0 | NULL | NULL | NULL | 0 | NULL |