Skip to content

fix(client): Node.js 26.5.1 未満を fail-fast し HTTP/2 starvation の再発を防ぐ #152

Description

@scottlz0310-user

背景

mcp-gateway#204 で、Node.js 26 の組み込み undici が HTTP/2 上で長寿命 SSE GET と body 付き POST を併用した際、POST を dispatch せずタイムアウトまで starvation させる問題が確認された。

上流では nodejs/undici#5538 が修正され、undici v8.8.0 以降に収録済み。Node.js では v26.5.1 が undici 8.9.0 を bundle した最初のリリースである。

このリポジトリの main は既に以下を Node.js 26.5.1 へ更新済み:

一方、公開済み v0.5.0 は engines.node >=26.5.0 のため、未修正の Node.js v26.5.0 / undici 8.7.0 でも要件を満たす。また、engines は package manager の設定によっては警告に留まり、CLI の実行自体を止めない。

mcp-gateway が将来 HTTP/2 を既定有効へ戻した場合、未修正 runtime で subscriber を実行すると、従来どおり約 60 秒の timeout と副次的な 502 が再発し得る。

方針

  1. 実際の subscribe / call 処理へ入る前に Node.js runtime を検証し、v26.5.1 未満ではネットワーク接続を開始せず明示的に失敗する。
  2. package.json#engines.node >=26.5.1、CI、Docker の現在値を維持する。
  3. Node.js 26.5.1 要件の理由と mcp-gateway の h2 互換性検証結果を CHANGELOG / README に記録する。
  4. patch release を公開し、Squirrel Notifier ホストが修正版を取得できる状態にする。

クライアント側で allowH2: false を固定する回避策は追加しない。上流修正済みであり、runtime floor を一元化する方が将来の HTTP/2 利用を妨げず、保守対象も増やさないため。

受け入れ条件

  • Node.js v26.5.1 未満で subscribe / call を実行すると、ネットワーク接続前に原因と最低必要バージョンを含むエラーで終了する
  • unsupported runtime のテストを、実 runtime の切り替えに依存しない形(version 判定ロジックへの依存性注入)で追加する
  • --help / --version は unsupported runtime でも診断目的で利用できる
  • package.json#engines.node、CI、Docker が v26.5.1 以上で揃っている
  • CHANGELOG / README に Node.js 26.5.1 が必要な理由(undici h2 starvation 修正)と関連 Issue を記載する
  • patch version を publish し、npm package と GitHub Release の双方で engines.node >=26.5.1 を確認する
  • 公開 package を Node.js v26.5.1 で実行し、MCP_GATEWAY_ENABLE_HTTP2=true の TLS gateway 経由で subscribe → notification → re-read → unsubscribe が成功する
  • 検証結果を chore: undici の h2 修正が Node に行き渡ったら TLS リスナーの HTTP/2 既定を再検討する mcp-gateway#206 に共有する

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions