Pojistka, která se sama vypnula

Díl 8 ze 8 — ./blog.sh v1.1

Nasazení tohoto webu má dvě pojistky. Když má sestavení náhle mnohem méně souborů, než je naživo, nebo mnohem méně bajtů, nasazení se zastaví. Existují proto, že rozbité sestavení vypadá pro rsync --delete přesně jako záměrné, a statický web je vždy jen jednu sebejistou synchronizaci od vymazání.

V 1.0 se uměly samy vypnout. Trvale. Potichu. Tady je jak, protože tvar téhle chyby je užitečnější než oprava.

Reference byla špatná věc

Pojistky porovnávaly nové sestavení s manifestem nasazení – záznamem toho, co je na cíli. Rozumné, dokud nahrání neselže. Neúspěšné nahrání nechá manifest mimo skutečnost a pojistka měřící proti záznamu, o kterém ví, že je špatně, by spustila poplach při každém dalším běhu.

Takže tam byla značka: po neúspěšném běhu pojistky odvolat, dokud nepřijde čistý běh a referenci neobnoví.

Už to vidíš. Když je selhání trvalé – soubor, který hosting pořád odmítá, prošlé přihlašovací údaje, cíl, který už neexistuje – žádný čistý běh nikdy nepřijde. Značka se nikdy nezvedne. Pojistky jsou vypnuté a nic to neříká. Sestavení, které se zhroutilo ze 7 500 souborů na hrstku, by se věrně zrcadlilo, --prune včetně.

Opravou bylo přestat měřit cíl

Teď porovnávají sestavení s posledním sestavením, které bylo přijato, zaznamenaným dřív, než se pohne první bajt. Tomu číslu je jedno, jestli nahrání pak uspělo, selhalo, nebo zemřelo v půli – takže už není co odvolávat a žádná značka, která by se mohla zaseknout.

Reference přestala být „co je tam venku" a stala se „s čím jsem naposledy souhlasil". Nic jiného se měnit nemuselo.

Ze stejné revize vyšly tři další věci

Spouštěly se také tehdy, kdy neměly. Dvacet procent ze sestavení o 32 souborech je šest souborů, takže publikace dvou příspěvků naráz mohla přerušit nasazení – uvnitř toku, který za tebe spouští ./blog.sh a který nemá jak předat --force. Procenta teď nesou absolutní spodní hranice.

Bajty se hlídají v obou směrech. Týž počet souborů s každou stránkou skoro prázdnou býval neviditelný. Pokles bajtů nasazení zastaví; nárůst bajtů se jen zmíní, protože připojení médií je psaní, ne závada.

Prázdné sestavení se odmítne rovnou. S prázdným manifestem dřív proplulo každou kontrolou, která existovala.

Proč to sepisovat

Protože „našli jsme chybu" má menší cenu než „tady je úvaha, která ji vytvořila". Ta chyba nebyla nedbalost. Byla to záplata, která vyřešila problém před sebou a vytvořila horší za sebou, a přežila, protože způsobem selhání bylo ticho.

Poučení, které si nechávám: bezpečnostní mechanismus, který jde vypnout tím, před čím chrání, není bezpečnostní mechanismus. Je to doporučení.

Komentáře