Skip to content

起動できずに戻した版を、次の起動でまた適用しに行く #76

Description

@limit7412

何が起きるか

PR #75 (issue #53) で、置き換えた App が起動できなかった場合に退避しておいた一式へ戻すようにした。戻すときに取得も捨てるので、その回はそこで終わる。

ただし捨てたことを覚えていない。旧版で開き直した App は、次の確認 (起動 30 秒後、以後 1 日ごと) で同じ配布物を見つけ、また取得する。適用は次の起動か「再起動して適用」を要するため放っておいて回り続けはしないが、起動のたびに 1 往復を空振りする

  1. 起動する
  2. 取得しておいた一式を適用する
  3. 起動できずに戻される
  4. 旧版で開き直る
  5. 30 秒後の確認が同じ配布物をまた取得する
  6. 次の起動で 2 へ戻る

数十〜百数十 MB の取得を毎回繰り返すことになる。壊れた配布物が公開されたまま新しい版が出ないと、この状態が続く。

案 A: 起動できなかったタグを置き場所へ記録し、TryLoadVerified がそのタグの取得を通さない。#48 に展開の失敗を数える仕組み (ForgetExtractFailures) があり、そこに寄せられる。記録は Discard() で消えては困るので、置き場所の寿命をどう扱うかを決める必要がある。

案 B: 記録ではなく、取得の側で止める。UpdateManager が「このタグは起動できなかった」を設定へ持ち、確認の結果から除く。設定に載るので、利用者が消せる (手で直した後に上げ直せる) 利点がある。

案 C: 現状のまま。壊れた配布物は普通すぐに差し替えられるので、その間の空振りは受け入れる。

実害の見積もり

起こる条件は狭い。リリースの配布物が「digest は通るが起動できない」形で公開される必要がある。#46 でタグを決めてから -p:Version 付きでビルドする順に並べ替えてあり、#48 で展開した一式の版がタグと合うかも見ているため、ありがちな取りこぼしはそこで落ちる。

一方で、起きたときは利用者の回線を毎起動で消費する。案 A か B のどちらかは入れておきたい。

前提

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions