Begrens en reconcile alle HTTP-mutaties tijdens releasepublicatie #2312

Closed
opened 2026-10-06 01:47:46 +00:00 by brenno · 1 comment
Owner

Probleem

De publicatiejob heeft geen harde tijdslimiet en meerdere release-API- en Debian-calls hebben geen connect- of responstime-out. Een endpoint dat wel TCP accepteert maar niet antwoordt kan de job uren laten hangen. Wanneer een server een mutatie accepteert maar de verbinding voor het antwoord verbreekt, rapporteert de run rood terwijl de externe toestand al gewijzigd kan zijn.

Bewijs

  • .forgejo/workflows/release.yml:622-632 heeft geen timeout-minutes.
  • Release-API-calls op 727-736 en 753-858 missen begrensde curl-deadlines.
  • scripts/publish_debian_package.sh:48-63 mist die grenzen eveneens.
  • Dezelfde workflow erkent bij de Windowsroute op regels 465-472 al dat een kale curl tot de runnerlimiet kan hangen.

Gewenst gedrag

  • Geef de job en elke netwerkcall een vaste deadline.
  • Reconcile na een onzekere POST of PUT eerst read-only op tag, assetnaam en SHA of package-SHA.
  • Maak geen tweede schrijver zolang de eerste mutatie mogelijk is gelukt.
  • Meld duidelijk timeout, onbekende externe toestand of bevestigde mislukking.

Regressietoets

Test een blackhole-endpoint en een endpoint dat de mutatie opslaat maar vóór het antwoord verbreekt. Beide routes eindigen begrensd en zonder dubbele publicatie.

## Probleem De publicatiejob heeft geen harde tijdslimiet en meerdere release-API- en Debian-calls hebben geen connect- of responstime-out. Een endpoint dat wel TCP accepteert maar niet antwoordt kan de job uren laten hangen. Wanneer een server een mutatie accepteert maar de verbinding voor het antwoord verbreekt, rapporteert de run rood terwijl de externe toestand al gewijzigd kan zijn. ## Bewijs - .forgejo/workflows/release.yml:622-632 heeft geen timeout-minutes. - Release-API-calls op 727-736 en 753-858 missen begrensde curl-deadlines. - scripts/publish_debian_package.sh:48-63 mist die grenzen eveneens. - Dezelfde workflow erkent bij de Windowsroute op regels 465-472 al dat een kale curl tot de runnerlimiet kan hangen. ## Gewenst gedrag - Geef de job en elke netwerkcall een vaste deadline. - Reconcile na een onzekere POST of PUT eerst read-only op tag, assetnaam en SHA of package-SHA. - Maak geen tweede schrijver zolang de eerste mutatie mogelijk is gelukt. - Meld duidelijk timeout, onbekende externe toestand of bevestigde mislukking. ## Regressietoets Test een blackhole-endpoint en een endpoint dat de mutatie opslaat maar vóór het antwoord verbreekt. Beide routes eindigen begrensd en zonder dubbele publicatie.
Author
Owner

Release v0.6.14 leverde op 2026-10-06 een nieuw concreet geval: de merge-POST van PR #2293 eindigde met curl exit 56 (verbinding tijdens ontvangst verbroken). De operatie was niet uitgevoerd, maar het script wist dat pas niet: het stopte alleen. Forgejo meldde daarna PR open, merged=false, head b97437904 en mergeable=false. Voor merge moet de reconciliatie na iedere transportfout dus PR-state, exact head_commit_id en aanwezigheid op main toetsen; alleen bij bewezen niet-uitgevoerd mag een begrensde retry volgen. Daarnaast mag bij mergeable=false überhaupt geen POST volgen.

Release v0.6.14 leverde op 2026-10-06 een nieuw concreet geval: de merge-POST van PR #2293 eindigde met curl exit 56 (verbinding tijdens ontvangst verbroken). De operatie was niet uitgevoerd, maar het script wist dat pas niet: het stopte alleen. Forgejo meldde daarna PR open, merged=false, head b97437904 en mergeable=false. Voor merge moet de reconciliatie na iedere transportfout dus PR-state, exact head_commit_id en aanwezigheid op main toetsen; alleen bij bewezen niet-uitgevoerd mag een begrensde retry volgen. Daarnaast mag bij mergeable=false überhaupt geen POST volgen.
brenno 2026-10-06 20:50:38 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2312
No description provided.