何が起きるか
PR #75 (issue #53) で、置き換えた App が起動できなかった場合に退避しておいた一式へ戻すようにした。戻すときに取得も捨てるので、その回はそこで終わる。
ただし捨てたことを覚えていない。旧版で開き直した App は、次の確認 (起動 30 秒後、以後 1 日ごと) で同じ配布物を見つけ、また取得する。適用は次の起動か「再起動して適用」を要するため放っておいて回り続けはしないが、起動のたびに 1 往復を空振りする。
- 起動する
- 取得しておいた一式を適用する
- 起動できずに戻される
- 旧版で開き直る
- 30 秒後の確認が同じ配布物をまた取得する
- 次の起動で 2 へ戻る
数十〜百数十 MB の取得を毎回繰り返すことになる。壊れた配布物が公開されたまま新しい版が出ないと、この状態が続く。
案
案 A: 起動できなかったタグを置き場所へ記録し、TryLoadVerified がそのタグの取得を通さない。#48 に展開の失敗を数える仕組み (ForgetExtractFailures) があり、そこに寄せられる。記録は Discard() で消えては困るので、置き場所の寿命をどう扱うかを決める必要がある。
案 B: 記録ではなく、取得の側で止める。UpdateManager が「このタグは起動できなかった」を設定へ持ち、確認の結果から除く。設定に載るので、利用者が消せる (手で直した後に上げ直せる) 利点がある。
案 C: 現状のまま。壊れた配布物は普通すぐに差し替えられるので、その間の空振りは受け入れる。
実害の見積もり
起こる条件は狭い。リリースの配布物が「digest は通るが起動できない」形で公開される必要がある。#46 でタグを決めてから -p:Version 付きでビルドする順に並べ替えてあり、#48 で展開した一式の版がタグと合うかも見ているため、ありがちな取りこぼしはそこで落ちる。
一方で、起きたときは利用者の回線を毎起動で消費する。案 A か B のどちらかは入れておきたい。
前提
何が起きるか
PR #75 (issue #53) で、置き換えた App が起動できなかった場合に退避しておいた一式へ戻すようにした。戻すときに取得も捨てるので、その回はそこで終わる。
ただし捨てたことを覚えていない。旧版で開き直した App は、次の確認 (起動 30 秒後、以後 1 日ごと) で同じ配布物を見つけ、また取得する。適用は次の起動か「再起動して適用」を要するため放っておいて回り続けはしないが、起動のたびに 1 往復を空振りする。
数十〜百数十 MB の取得を毎回繰り返すことになる。壊れた配布物が公開されたまま新しい版が出ないと、この状態が続く。
案
案 A: 起動できなかったタグを置き場所へ記録し、
TryLoadVerifiedがそのタグの取得を通さない。#48 に展開の失敗を数える仕組み (ForgetExtractFailures) があり、そこに寄せられる。記録はDiscard()で消えては困るので、置き場所の寿命をどう扱うかを決める必要がある。案 B: 記録ではなく、取得の側で止める。
UpdateManagerが「このタグは起動できなかった」を設定へ持ち、確認の結果から除く。設定に載るので、利用者が消せる (手で直した後に上げ直せる) 利点がある。案 C: 現状のまま。壊れた配布物は普通すぐに差し替えられるので、その間の空振りは受け入れる。
実害の見積もり
起こる条件は狭い。リリースの配布物が「digest は通るが起動できない」形で公開される必要がある。
#46でタグを決めてから-p:Version付きでビルドする順に並べ替えてあり、#48で展開した一式の版がタグと合うかも見ているため、ありがちな取りこぼしはそこで落ちる。一方で、起きたときは利用者の回線を毎起動で消費する。案 A か B のどちらかは入れておきたい。
前提