fix(update): 起動できずに戻した配布物を覚え、取りに行かない - #79
Merged
Merged
Conversation
置き換えた一式が起動できなかった場合、退避へ戻して取得を捨てる (issue #53)。 ただし捨てたことを覚えていないため、旧版で開き直した App は次の確認で同じ 配布物をまた見つけ、また取得する。適用は次の起動か「再起動して適用」を要する ので放っておいて回り続けはしないが、起動のたびに数十〜百数十 MB を空振りする。 戻すときに、その配布物を置き場所へ覚えるようにした。取得の側はこれに当たる 候補を取りに行かない。 覚えるのはタグと digest の組である。同じタグへ配布物を上げ直す運用があるので (release.yml の --clobber)、直した一式が同じタグで公開された場合は digest が 変わり、そちらは記録に当たらず取りに行ける。放っておいても直った版で回復する。 記録は取得の記録とは別のファイルに置く。取得を捨てても残す必要があり、 Discard はこれに触らない。読めない場合は「覚えていない」として扱う。読めない ことを理由に更新を止めるほうが損が大きい。空振りは 1 回で済むが、止めると 新しい版が入らなくなる。 画面にも出す。「新しい版が出ています」とだけ出したままだと、いつまでも 取得済みにならない理由が分からない。 Refs #76
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
issue #76 の対応。案 A(起動できなかったタグを置き場所へ記録する)を採った。
何が起きていたか
#53 で、置き換えた一式が起動できなかった場合に退避へ戻して取得を捨てるようにした。ただし捨てたことを覚えていない。旧版で開き直した App は次の確認で同じ配布物をまた見つけ、また取得する。
適用は次の起動か「再起動して適用」を要するため放っておいて回り続けはしないが、起動のたびに数十〜百数十 MB を空振りする。壊れた配布物が公開されたまま新しい版が出ないと、この状態が続く。
変更内容
Core
UpdateStageにRecordStartFailure/IsKnownStartFailureを足した。覚えるのはタグと digest の組である。同じタグへ配布物を上げ直す運用があるので(release.yml の
--clobber)、直した一式が同じタグで公開された場合は digest が変わり、そちらは記録に当たらず取りに行ける。放っておいても直った版で回復するので、記録を消す経路は置いていない。記録は取得の記録 (
staged.json) とは別のファイルに置く。取得を捨てても残す必要があり、Discardはこれに触らない。既にある「展開の失敗の回数」(extract-failures) と同じ形である。読めない場合は「覚えていない」として扱う。読めないことを理由に更新を止めるほうが損が大きい。空振りは 1 回で済むが、止めると新しい版が入らなくなる。
Cli
RollBackFailedStartが、取得を捨てる前にタグと digest を控え、戻しと破棄が通った後に覚える。捨てた後では読めない。戻せなかった場合(終了コード 7)と、戻す条件がそろわなかった場合(終了コード 1)では覚えない。前者は取得を復旧の材料として残すためで、後者はそもそも起動できていたと判断した場合である。
App
UpdateManagerが、覚えている組に当たる候補を取りに行かない。画面にも出す。「新しい版が出ています」とだけ出したままだと、いつまでも取得済みにならない理由が分からない。設定カードの「本体の更新」欄と、自動確認のバルーンの文言を分けた。
検証
Refs #76, #53
Generated by Claude Code