Skip to content
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

refactor: エンジン情報マネージャーとエンジンプロセスマネージャーを分ける #2260

Conversation

Hiroshiba
Copy link
Member

内容

EngineManagerが1000行を超えて肥えていたのが気になったので分離できないか考えてみました。
情報を管理する部分と、プロセスを管理する部分があったのでそこで分けてみました。

元コードと移動先の表

移動先
EngineInfo関連のコード EngineInfoManager
プロセス起動・終了などのコード EngineProcessManager
エンジンディレクトリのファイル構造に関する知識 EngineInfoManager
代替ポート情報 EngineInfoManager

関連 Issue

の一環のリファクタリングです。

その他

@Hiroshiba Hiroshiba requested a review from a team as a code owner September 7, 2024 02:46
Comment on lines -915 to +927
await engineManager.restartEngine(engineId);
// TODO: setEngineInfosからexportFileはロックしたほうがより良い
runtimeInfoManager.setEngineInfos(engineManager.fetchEngineInfos());
await engineProcessManager.restartEngine(engineId);

// ランタイム情報の更新
// TODO: setからexportの処理は排他処理にしたほうがより良い
runtimeInfoManager.setEngineInfos(engineInfoManager.fetchEngineInfos());
Copy link
Member Author

@Hiroshiba Hiroshiba Sep 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

処理は変わってないです。
「ロックしたほうがより良い」の意味が分かりづらかったので、ロック→排他処理に置き換えました。

Copy link
Member Author

@Hiroshiba Hiroshiba Sep 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このファイルは以前のEngineManagerからのコード移動だけになってるはず。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

現状特に何も管理していないのにManagerになってたので、Helperに変更してみました。

Comment on lines +181 to +195
/**
* 代替ポート情報を更新する。
* エンジン起動時にポートが競合して代替ポートを使う場合に使用する。
*/
updateAltPort(engineId: EngineId, port: number) {
const engineInfo = this.fetchEngineInfo(engineId);
const url = new URL(engineInfo.host);
this.altPortInfos[engineId] = {
from: Number(url.port),
to: port,
};

url.port = port.toString();
engineInfo.host = url.toString();
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あ、ここの関数だけは新しく作りました。
(EngineProcessManager側から叩けないといけないので)

@Hiroshiba
Copy link
Member Author

@sabonerune この分け方に関して微妙な点とか思いついたらご教示いただけると・・・! 🙇

@sabonerune
Copy link
Contributor

多分分け方自体は問題ないと思います。
問題はこれらのマネージャーはそれぞれ相互に作用する(vvppを操作する前にエンジンキルをする必要があるし、エンジンをキルしたら情報を更新しなければならないという感じ)ものなのでこれらをまとめて操作するクラスがほしいかもしれません。

@Hiroshiba
Copy link
Member Author

@sabonerune ありがとうございます!!

問題はこれらのマネージャーはそれぞれ相互に作用する(vvppを操作する前にエンジンキルをする必要があるし、エンジンをキルしたら情報を更新しなければならないという感じ)ものなのでこれらをまとめて操作するクラスがほしいかもしれません。

なるほどです!!
確かに一括してエンジン系の操作を担うクラスなり関数群なりもいていい気がします!!

ちなみにそれってこのプルリクエストで絶対ないといけないとより、将来そういうのがあった方がいいよねって感じ・・・で認識合ってそうでしょうか 👀

@Hiroshiba
Copy link
Member Author

たーーーーーぶん大丈夫だと思うのでマージしたいと思います!!レビューありがとうございます!

エンジン周りとvvpp周りを含めて管理するクラス(もしくは関数群)を作ってみようと思います!!

@Hiroshiba Hiroshiba merged commit 8120d29 into VOICEVOX:main Sep 13, 2024
9 checks passed
@Hiroshiba Hiroshiba deleted the エンジン情報マネージャーとエンジンプロセスマネージャーを分ける branch September 13, 2024 16:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants