fix(git): haengengebliebene Teil-Abrufe einmal nachschlagen
CI / pruefen (pull_request) Canceled after 0s
CI / pruefen (pull_request) Canceled after 0s
Behebt florian.wilde/nebula#23. Beobachtet an der laufenden Instanz: zwei von acht Teil-Abrufen liefen in eine Zeitueberschreitung nach 15 s, waehrend dieselben Aufrufe von aussen einzeln in 80 ms antworteten. Nicht die Endpunkte sind langsam - die Achterrunde erwuergt sich gelegentlich selbst. Daraus folgt die Maßnahme, und zwar genau diese: was haengen bleibt, bekommt einen zweiten Versuch, und der laeuft NICHT wieder im Schwung mit. Die Nachschlaege haengen an einer Kette und gehen nacheinander hinaus. Die Aufrufstellen in den drei Clients bleiben unberuehrt - hol() liefert weiterhin den endgueltigen Wert. Das war der Grund, es in Teilabrufe zu loesen statt hinter dem Promise.all: dort haette jeder Client acht Variablen neu zuweisen muessen. ZWEI GRENZEN, BEIDE ABSICHTLICH Nachgeschlagen wird nur bei 408 und bei 0 - Zeitueberschreitung und eine Verbindung, die gar nicht zustande kam. Ein 403 wird durch Wiederholen nicht besser, ein 429 durch sofortiges Wiederholen schlimmer, ein 404 bleibt ein 404. Und hoechstens zweimal je Abgleich. Acht Zeitueberschreitungen zu je 15 Sekunden waeren zwei Minuten, in denen "Jetzt synchronisieren" wie ein Absturz aussieht. Wer weg ist, soll schnell als weg erkannt werden. Klappt auch der zweite Versuch nicht, steht das am Repository - mit dem Vermerk "(auch im zweiten Versuch)", damit erkennbar bleibt, dass es kein Zufall war. NICHT GEMACHT: die acht Aufrufe entzerren. Das waere eine Vermutung ueber die Ursache. Bleibt das Problem, sagt der Vermerk genau das, und dann ist die Entzerrung dran. AM RANDE BEHOBEN Den beiden afterEach-Bloecken in http.test.ts fehlte restoreAllMocks. Die Spies zaehlten ueber Tests hinweg weiter; aufgefallen, weil die neuen Pruefungen an Aufrufzahlen haengen und statt 2 gleich 10 sahen. Gegengeprobt: mit abgeschaltetem Nachschlag fallen vier der sechs neuen Tests - die beiden, die das Ausbleiben pruefen, bleiben gruen. Refs #23
This commit is contained in:
@@ -559,6 +559,15 @@ Diese Listen werden gleichzeitig geholt, und einzelne davon können scheitern, w
|
||||
der Rest durchgeht — ein 403 wegen fehlender Scopes, ein Rate-Limit, eine
|
||||
Zeitüberschreitung.
|
||||
|
||||
**Ein zweiter Versuch, bevor etwas als fehlend gilt.** Zeitüberschreitungen und
|
||||
Verbindungen, die gar nicht zustande kamen, werden einmal nachgeschlagen — einzeln
|
||||
statt im Schwung, weil genau das der beobachtete Fall war: zwei von acht Aufrufen
|
||||
liefen in eine Zeitüberschreitung nach 15 Sekunden, während dieselben Aufrufe einzeln
|
||||
in 80 Millisekunden antworteten. Nachgeschlagen wird höchstens zweimal je Abgleich —
|
||||
acht Zeitüberschreitungen hintereinander wären zwei Minuten. Bei `403`, `404` und `429`
|
||||
gibt es keinen zweiten Versuch: fehlende Rechte werden durch Wiederholen nicht besser,
|
||||
ein Rate-Limit wird schlimmer.
|
||||
|
||||
**Ein gescheiterter Abruf ist keine leere Liste.** Der Unterschied steht am Snapshot: zu
|
||||
jedem Feld, das nicht geholt werden konnte, wird der Grund samt HTTP-Status festgehalten.
|
||||
Daraus folgt dreierlei:
|
||||
|
||||
Reference in New Issue
Block a user