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

設定ファイルの保存をアトミック操作にする #2082

Closed
Hiroshiba opened this issue May 15, 2024 · 2 comments · Fixed by #2098
Closed

設定ファイルの保存をアトミック操作にする #2082

Hiroshiba opened this issue May 15, 2024 · 2 comments · Fixed by #2098
Labels
優先度:中 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上

Comments

@Hiroshiba
Copy link
Member

内容

設定ファイルの保存はConfigManagerで行われていて、それはファイルに直接書き込む形で実装されています。

protected async save(config: ConfigType & Metadata) {
await fs.promises.writeFile(
this.configPath,
JSON.stringify(config, undefined, 2),
);
}

この操作は割と危なくて、何かしらの原因で途中で書き込みが中断してしまうことがあると、中途半端な値が保存されて設定ファイルが壊れます。
実際にそれが原因かもしれない不具合報告も見つかりました。

設定ファイルに関してはプリセットが保存されていたりとクリエイターにとって割と重要なポジションを占めるので、優先度ラベルを高めに設定しています。

Pros 良くなる点

バグが起こりにくくなる

実現方法

一度保存する先のパス+.tmpみたいなファイルに書き出した後、moveFileでファイルを上書きすれば OK。
moveFileの使い方はこんな感じ

await moveFile(outputDir, engineDirectory);

その他

直接ファイルを書き込んでいるところはいくつかあるので、一度同じディレクトリの.tmpに書き込んだ後moveFileする便利関数を作って使いますと便利そう。

処理としてはそんなに難しくないと思うのでぜひ気軽にコミットにチャレンジしてみてください!

@RikitoNoto
Copy link
Contributor

RikitoNoto commented May 25, 2024

@Hiroshiba
初めまして、こちらのissueぜひ対応させていただきたいです!

一度同じディレクトリの.tmpに書き込んだ後moveFileする便利関数を作って使いますと便利そう。

これは作るとしたら、src/helpers/にファイル操作用の新規ソース作成するような形でよろしいでしょうか?

@Hiroshiba
Copy link
Member Author

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

これは作るとしたら、src/helpers/にファイル操作用の新規ソース作成するような形でよろしいでしょうか?

そちらでも問題ないですが、今回の場合は使われる場所が(今のところ)src/backend/electron/だけなので、ここに作っちゃうのも良いかもです・・・!

Hiroshiba pushed a commit that referenced this issue May 27, 2024
#2082 tempファイル作成後に設定ファイルを書き込むよう修正
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
優先度:中 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants