Changeset 7ccdced in Klonkt for src/config


Ignore:
Timestamp:
10/26/2026 01:46:00 PM (27 hours ago)
Author:
Robin <roboburr@…>
Branches:
main
Parents:
bfa3ba3
Message:

Een Delete van wat nog in de rij wacht: intern oplossen

Robins vraag (26-10): "Shouldn't a Delete on an undelivered Create resolve
internally for all unfederated ones?" Ja. bfa3ba3 zorgde er alleen voor dat de
Delete NA de wachtende Create aankwam -- maar de Create kwam dan nog steeds,
en wat gewist was bereikte zo alsnog een server die het nooit had gehad.

Nu haalt een Delete per inbox de wachtende Create en Update van datzelfde
object uit de rij (cancelUndelivered). Bewust alleen wat de inhoud draagt: een
Announce of Add van een gewist object is onschuldig, de ontvanger krijgt een
404 als hij het ophaalt.

Of de Delete zelf dan nog moet, hangt af van of er iets aangekomen KAN zijn.
Daarvoor de nieuwe kolom ap_delivery.tried: een rij die in de rij ging zonder
poging (de inbox wachtte al, of de server zat in zijn backoff) is nooit de deur
uit geweest; dan gaat er voor die inbox helemaal niets ('cancelled'). Is hij
wel geprobeerd, dan kan een time-out na verwerking hem hebben laten aankomen,
en gaat de Delete toch -- onschuldig als ze hem niet kenden. Rijen van voor de
kolom tellen als geprobeerd: dat is de veilige kant.

Daarbij twee directe verzenders die ik in bfa3ba3 had gemist, nu ook langs
deliverNowOrQueue: het bewerken van een antwoord (deliverOutboxUpdate -- een
Update vóór de wachtende Create wordt genegeerd, waarna de Create de oude tekst
brengt) en guardian-activiteiten (deliverToActor).

test/direct-sends-queue.test.js, nu negen toetsen: het gewiste antwoord dat
wachtte komt nooit aan (en de Delete gaat wel, want het was geprobeerd), een
nooit geprobeerd en gewist antwoord laat niets vertrekken, alleen Create en
Update van dat object en die inbox, en de bewerking en de guardian-activiteit
wachten. Acht mutaties apart gedraaid, elk gevangen; één (ook andere soorten
weghalen) eerst niet, waarop de bedoelde grens in de toets is vastgelegd.
Volledige suite 1380 groen.

Co-Authored-By: Claude Opus 5.5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/config/database.js

    rbfa3ba3 r7ccdced  
    895895  // Rijen van voor deze kolom krijgen hun host hier, eenmalig.
    896896  ensureColumn('ap_delivery', 'host', 'TEXT');
     897  // Is deze rij al eens geprobeerd? Dan KAN hij aangekomen zijn, ook al gaf het
     898  // een fout (een time-out nadat de ander hem verwerkte). Een Delete voor iets
     899  // dat nooit de deur uitging, hoeft niet; voor iets dat misschien aankwam wel.
     900  // Standaard 1: van rijen van voor deze kolom weten we het niet, en dan is
     901  // "misschien aangekomen" de veilige kant. Nieuwe rijen zeggen het zelf.
     902  ensureColumn('ap_delivery', 'tried', 'INTEGER DEFAULT 1');
    897903  try {
    898904    const zonder = db.prepare('SELECT id, inbox FROM ap_delivery WHERE host IS NULL').all();
Note: See TracChangeset for help on using the changeset viewer.