main · last commit
1 month ago ·
2npkec0r
tarantool-etcd-vru SETTINGS_MAX_CONCURRENT_STREAMS advertised as 100; etcd advertises MaxUint32
Lined Up
bd update tarantool-etcd-vru --claim
bd close tarantool-etcd-vru
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-07-17T13:19:35Z |
| Updated | 2026-07-17T13:19:35Z |
lib/nghttp2/grpc.lua:49-54 hardcodes {MAX_CONCURRENT_STREAMS, 100} in DEFAULT_SETTINGS, submitted on every connection (grpc.lua:381-385); lib/nghttp2/server.lua:18 carries the same 100. etcd's DefaultMaxConcurrentStreams = math.MaxUint32 (verified at server/embed/config.go:68), i.e. effectively unlimited since 3.2, tunable via --max-concurrent-streams.
opts.session_options (grpc.lua:373) only reaches the peer-side knob (session.lua:260-261) — it never overrides DEFAULT_SETTINGS, so there is currently no way to raise this from config.
Impact: past 100 concurrent streams on one connection (in-flight unary + Watch/Lease/Lock/Election all multiplex onto a single clientv3 connection), further streams are queued or REFUSED_STREAM where etcd never throttles. Scale-dependent: harmless for small deployments, a hard ceiling for watch-heavy ones.
Raise the default to 0xFFFFFFFF and expose grpc.max_concurrent_streams in roles_cfg, wiring it through to DEFAULT_SETTINGS rather than the peer-side knob. Check whether our per-stream fiber model imposes a real resource ceiling that 100 was silently protecting — if so, the right number may not be MaxUint32, and that reasoning belongs in docs/TODO.md.
Server advertises the configured value (default effectively unlimited); >100 concurrent streams on one connection all proceed; role option documented.
No outgoing dependencies.
Nothing depends on this issue.
| id | tarantool-etcd-vru |
| content_hash | acf76de231548d849879d27ab87990e26de3591d1efb476d9744376f2e7c1a50 |
| title | SETTINGS_MAX_CONCURRENT_STREAMS advertised as 100; etcd advertises MaxUint32 |
| description | lib/nghttp2/grpc.lua:49-54 hardcodes {MAX_CONCURRENT_STREAMS, 100} in DEFAULT_SETTINGS, submitted on every connection (grpc.lua:381-385); lib/nghttp2/server.lua:18 carries the same 100. etcd's DefaultMaxConcurrentStreams = math.MaxUint32 (verified at server/embed/config.go:68), i.e. effectively unlimited since 3.2, tunable via --max-concurrent-streams. opts.session_options (grpc.lua:373) only reaches the peer-side knob (session.lua:260-261) — it never overrides DEFAULT_SETTINGS, so there is currently no way to raise this from config. Impact: past 100 concurrent streams on one connection (in-flight unary + Watch/Lease/Lock/Election all multiplex onto a single clientv3 connection), further streams are queued or REFUSED_STREAM where etcd never throttles. Scale-dependent: harmless for small deployments, a hard ceiling for watch-heavy ones. |
| design | Raise the default to 0xFFFFFFFF and expose grpc.max_concurrent_streams in roles_cfg, wiring it through to DEFAULT_SETTINGS rather than the peer-side knob. Check whether our per-stream fiber model imposes a real resource ceiling that 100 was silently protecting — if so, the right number may not be MaxUint32, and that reasoning belongs in docs/TODO.md. |
| acceptance_criteria | Server advertises the configured value (default effectively unlimited); >100 concurrent streams on one connection all proceed; role option documented. |
| notes | |
| status | open |
| priority | 2 |
| issue_type | bug |
| assignee | NULL |
| estimated_minutes | NULL |
| created_at | 2026-07-17T13:19:35Z |
| created_by | Eugene Blikh |
| owner | bigbes@gmail.com |
| updated_at | 2026-07-17T13:19:35Z |
| 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-vru |
| label | etcd-changelog-sweep |
| id | 019f703b-7d29-7e7e-8518-56f3eb7e56c4 |
| issue_id | tarantool-etcd-vru |
| event_type | created |
| actor | Eugene Blikh |
| old_value | |
| new_value | |
| comment | NULL |
| created_at | 2026-07-17T16:19:34Z |
| id | 019f703b-7d2a-76d2-8301-a41cabff3edd |
| issue_id | tarantool-etcd-vru |
| event_type | label_added |
| actor | Eugene Blikh |
| old_value | NULL |
| new_value | NULL |
| comment | Added label: etcd-changelog-sweep |
| created_at | 2026-07-17T16:19:34Z |
No comments.