-
Notifications
You must be signed in to change notification settings - Fork 305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
エンジンが使うポートが割り当てできなければ、他の空いているポートで起動してユーザーに通知する #1267
エンジンが使うポートが割り当てできなければ、他の空いているポートで起動してユーザーに通知する #1267
Conversation
net の createServer はなぜかエラーを検知してくれない... いったん外部ライブラリに頼る
- 外部ライブラリに頼る必要がなくなった - bash 要検証
PRありがとうございます! ご質問に対して、まずVOICEVOXのUX・UIデザインの方針を基準に考えてみました。 となると、原因(すでにポートが使われていること)や、原因の原因(どのプロセスがポートを占有しているか)をユーザーに提示したところで、開発者でもない限り対処することは難しいでしょうから、解決したい問題に対するアプローチにはならないといえます。また、この対処を行ったところで、ある意味でデザイン方針の「操作のために考える必要がないこと」を侵害しています。 であれば、デフォルトポート以外で起動するのが、ユーザーにとって求めている挙動(問題なくVOCIEVOXエンジンが起動して使える状態になり、ユーザーがコンテンツを作り始められる)になり、ユーザーにとっての不快感排除、そして現状のVOICEVOXが抱えている問題の解決策になるといえます。 次に、ユーザーに何を通知するか(もしくは通知しないか)を考えます。 |
コメントありがとうございます UX・UIのデザインの方針ももう一度読んでみました
と表示します (バツボタンより, 5秒ほどで消えるのが望ましいかな) ところで, ログには ↓ のような形式で十分でしょうか? すでに割り当てられていたとき
割り当てられてないとき
|
あまり詳しくないのですが気になることがあります。 まずWindowsにポートを使われないように予約する機能があるらしくその場合は使用しているプロセスがなくても起動できない可能性があるみたいです。 あと自分は持っていないので試せないのですがmacOSでは |
- コメントを日本語にした - TODOつけた
- Typo: Alterative -> Alternative
Re: #1267 (comment) 貴重な情報ありがとうございます! 再起動後のPCで試しに該当のコマンドを叩いてみました.
50000 - 50059 番ポートは, 管理されている(?) 除外ポートで, 予約されていることになっていましたが, 50021番も50022番も普通に割り当て (エンジンを動かすこと) ができました. MacOS の挙動も了解しました. 他のコマンドを探してみます. |
- Fix: トーストの表示の仕方もちょっと変更
- Fix: Toastをプレーンからquasarへ - Fix: Toast系統のステート削除 - Fix:
- Add: タイトルバーに代替ポートを表示 - Add: トーストにアクション追加 - Enh: トーストの色変更 - Fix: getter -> action
Re: #1267 (comment) どうやら, MacOS でも rootなしで |
UI差分について
代替ポートを使ってない場合は通常と変わりません. 色や配置についてお気づきの点があればお教えくださいー! Footnotes
|
ログ形式の差分について通常時 [info] Starting 1 engine/s...
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Start launching
+ [info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Checking whether port 50021 is assignable...
+ [info] PORT 50021: Getting process id...
+ [info] PORT 50021: Running command: "netstat -ano"
+ [info] PORT 50021: Assignable; Nobody uses this port!
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Starting process
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d mode: CPU 50021番が割り当てられないとき (代替ポート: 50022番) [info] Starting 1 engine/s...
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Start launching
+ [info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Checking whether port 50021 is assignable...
+ [info] PORT 50021: Getting process id...
+ [info] PORT 50021: Running command: "netstat -ano"
+ [warn] PORT 50021: Nonassignable; pid=23792 uses this port!
+ [info] PORT 50021: Getting process name from pid=23792...
+ [info] PORT 50021: Found process name: node.exe
+ [warn] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Port 50021 has already been assigned by node.exe (pid=23792)
+ [info] PORT 50021: Find another assignable port from 50021...
+ [info] PORT 50021: Trying whether port 50022 is assignable...
+ [info] PORT 50022: Getting process id...
+ [info] PORT 50022: Running command: "netstat -ano"
+ [info] PORT 50022: Assignable; Nobody uses this port!
+ [warn] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Applied Alternative Port: 50021 -> 50022
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Starting process
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d mode: CPU 代替ポートが見つからない場合 [info] Starting 1 engine/s...
[info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Start launching
+ [info] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Checking whether port 50021 is assignable...
+ [info] PORT 50021: Getting process id...
+ [info] PORT 50021: Running command: "netstat -ano"
+ [warn] PORT 50021: Nonassignable; pid=33488 uses this port!
+ [info] PORT 50021: Getting process name from pid=33488...
+ [info] PORT 50021: Found process name: node.exe
+ [warn] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Port 50021 has already been assigned by node.exe (pid=33488)
+ [info] PORT 50021: Find another assignable port from 50021...
+ [info] PORT 50021: Trying whether port 50022 is assignable...
+ [info] PORT 50022: Getting process id...
+ [info] PORT 50022: Running command: "netstat -ano"
+ [warn] PORT 50022: Nonassignable; pid=30324 uses this port!
... 代替ポートの探索を続ける ...
+ [warn] PORT 50021: No alternative port found! 50021...50121
+ [error] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: No Alternative Port Found
exit(1) します
どのくらい探索するかはここに書いてあります. voicevox/src/background/portManager.ts Lines 110 to 134 in 78b9f80
ダイアログも含めて, お気づきの点があればお教えくださいー! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTMです!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
コマンド実行から設定、バックグラウンドプロセス、エンジンの理解にVue+Vuexと、完全に総合格闘技な中かなり確度の高いプルリクエストだと思いました!!
細かい点についてとやかくコメントしてしまったのですが、優先度高くなおしてほしい点はほとんどなかった感じです。
もしVueに興味があれば、くらいのコメントが多いです・・・!!
レビュー反映しましたー 確認よろしくお願いします! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!!
ちょくちょくリファクタリングできそうな点があるかもと思いました!!
もしよかったらリファクタリングにチャレンジしてみてください! 良い経験になるんじゃないかなと・・・!
マージありがとうございます!!! あと1つだけ, おそらくお読み飛ばされている返信があるので, リンクを貼っておきます! 良い経験となりました! ありがとうございました. |
すみませんコメント忘れていたので追加しました・・・! |
Linux (Ubuntu 22.04 + node v16.17.0 on nvm) でこのPRによって動作しないという報告がされています. 1 voicevox/src/background/portManager.ts Lines 43 to 57 in 3a5f7e9
どうやら, 上のコードの execFileSync まわりに, Node.js のバグ (nodejs/node #29466, nodejs/node #43345) があるようです.
ただ, 情報ありがとうございました! thx! :
Footnotes
|
ちょっとポート周りでいくつかissueができたのでメモ&共有です! @y-chan
( @sabonerune さん本当にありがとうございます 🙇 ) 特に最後がかなりの強敵で、エンジン起動・マルチエンジン・プロセス間通信・ポート周りの複合的な課題なので凄まじいです 😇 @wappon-28-dev さん |
そちらこそ検証ありがとうございます…! マルチエンジンやエンジン (+engineInfo) のライフサイクルへの私の理解が足りなかったようで, 私のPRによってたくさん Issues ができてしまい, こちらこそ申し訳ないです…🥲 私が行う予定だったリファクタリングのものと, @sabonerune さんが作ってくださった Issues とでいくつか共通点があったので, 以下はそのメモです:
@sabonerune さん もしお手空きでしたら, #1308, #1310 にお取組みいただけませんか…? 上のリストの 2, 3, 4 については, 私の手が空いたら, 今取り組まれている PR の様子を見ながらリファクタリングの PR を送りたいと思います! |
Co-authored-by: sabonerune <102559104+sabonerune@users.noreply.github.com>
内容
エンジンが使うポートが割り当てできなければ、他の空いているポートで起動してユーザーに通知します
方針
おそらくポートが割り当てできなかった場合は, ↓ の部分が exit 1 で終了して
voicevox/src/background/engineManager.ts
Lines 252 to 254 in 1a0532c
↓ にエラーダイアログが出てくる仕様になってると思います
voicevox/src/background/engineManager.ts
Lines 275 to 289 in 1a0532c
なので, spawn の前にポートが割り当てられるかを確認して, もし割り当てられなかったら...
engineInfo
のhost
に他の空いているポートを書き換えるをしたいと思います
関連 Issue
close #1252
ref VOICEVOX/voicevox_engine#634 (エディターがログを出すけど一応)
ref #1189
スクリーンショット・動画など
なし
その他
なし