pytest-dev / pytest-dev/execnet

Improve handling of execnet.gateway_bootstrap.HostNotFound

オープン
#81 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
102
フォーク
47
PR マージ指標
30日以内にマージされた PR はありません

説明

If a node is down the output is rather verbose:

gw0 Issh_exchange_identification: Connection closed by remote host
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "…/Vcs/execnet/execnet/gateway_bootstrap.py", line 45, in bootstrap_exec
INTERNALERROR>     s = io.read(1)
INTERNALERROR>   File "…/Vcs/execnet/execnet/gateway_base.py", line 389, in read
INTERNALERROR>     "expected %d bytes, got %d" % (numbytes, len(buf)))
INTERNALERROR> EOFError: expected 1 bytes, got 0
INTERNALERROR> 
INTERNALERROR> During handling of the above exception, another exception occurred:
INTERNALERROR> 
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/_pytest/main.py", line 176, in wrap_session
INTERNALERROR>     config.hook.pytest_sessionstart(session=session)
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/hooks.py", line 258, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/manager.py", line 67, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/manager.py", line 61, in <lambda>
INTERNALERROR>     firstresult=hook.spec_opts.get('firstresult'),
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/callers.py", line 201, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/callers.py", line 76, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/pluggy/callers.py", line 180, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/xdist/dsession.py", line 81, in pytest_sessionstart
INTERNALERROR>     nodes = self.nodemanager.setup_nodes(putevent=self.queue.put)
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/xdist/workermanage.py", line 67, in setup_nodes
INTERNALERROR>     nodes.append(self.setup_node(spec, putevent))
INTERNALERROR>   File "…/project/.venv/lib/python3.6/site-packages/xdist/workermanage.py", line 71, in setup_node
INTERNALERROR>     gw = self.group.makegateway(spec)
INTERNALERROR>   File "…/Vcs/execnet/execnet/multi.py", line 128, in makegateway
INTERNALERROR>     gw = gateway_bootstrap.bootstrap(io, spec)
INTERNALERROR>   File "…/Vcs/execnet/execnet/gateway_bootstrap.py", line 98, in bootstrap
INTERNALERROR>     bootstrap_exec(io, spec)
INTERNALERROR>   File "…/Vcs/execnet/execnet/gateway_bootstrap.py", line 50, in bootstrap_exec
INTERNALERROR>     raise HostNotFound(io.remoteaddress)
INTERNALERROR> execnet.gateway_bootstrap.HostNotFound: xdistnode1

I think this should be caught and turned into a proper error message.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず execnet/gateway_bootstrap.py、特に bootstrap_exec と bootstrap を読み、報告された HostNotFound パスをエントリーポイントとして使用します。停止している node で失敗を再現し、結果が詳細な INTERNALERROR traceback ではなく、簡潔で適切なエラーメッセージになることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
distributed-systems
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。