Workers P4 Endprüfung W1: 502/504 beim Warten heißen bei reply, approve-preview und start-build „Kann gesendet sein“
Die Unsicherheits-Meldung (D14) galt nur für status 0. Eine Fehlerseite des Proxys (502, 504) zeigte „Der Hustler-Dienst ist gerade nicht erreichbar.“, obwohl der Dienst weiterarbeitet und die Mail schon hinausgegangen sein kann. workersApi.js exportiert UNCERTAIN_STATUS = [0, 502, 504]; actionErrorText prüft ihn (503, 429, 4xx und 500 bleiben unverändert, ebenso ein Satz des Dienstes unter 502). ACTION_TIMEOUT_MS steigt auf 65 s, damit der Client nicht gleichauf mit dem proxy_read_timeout (60 s) läuft und ein 504 zuerst ankommt. Tests über createWorkersApi mit Fehlerseiten für alle acht Aktionen. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5138efd2bf
commit
1536a3bbc1
4 files changed
+68
-31
No files matched your search
@@ -13,7 +13,9 @@ export const INVALID_ID_TEXT = 'Ungültige Kennung.'
|
||||
export const REQUEST_TIMEOUT_MS = 20000
|
||||
// Zeitgrenze für Pult-Aktionen, die im Dienst länger dauern (Mail senden, Freigabe einreihen, Bau anlegen): nach 20 s als „nicht erreichbar“
|
||||
// abzubrechen, obwohl die Mail gerade hinausgeht, ließe den Menschen ein zweites Mal klicken. Alle anderen Abrufe behalten die kurze Frist.
|
||||
export const ACTION_TIMEOUT_MS = 60000
|
||||
// 65 s liegen bewusst über dem proxy_read_timeout des Proxys (nginx, 60 s): der Client läuft nicht mit nginx um die Wette, eine Zeitüberschreitung
|
||||
// im Proxy kommt als 504 zuerst an (UNCERTAIN_STATUS), erst danach greift die Frist des Clients.
|
||||
export const ACTION_TIMEOUT_MS = 65000
|
||||
// Nach einer 401-Folge (frisches JWT wird ebenfalls abgelehnt oder Appwrite lehnt createJWT ab) wird so lange kein frisches JWT mehr
|
||||
// erzwungen, und lehnt Appwrite createJWT ab (HTTP-Code ab 400, z. B. 429; kein Übertragungsfehler), wird so lange gar kein JWT mehr geholt: Appwrite begrenzt
|
||||
// createJWT je Nutzer, und die Schleifen (5 s / 15 s) würden das Limit binnen Minuten aufbrauchen und damit auch Serverpuls,
|
||||
@@ -26,6 +28,10 @@ export const PULT_STATUS = Object.freeze(['offen', 'in_arbeit', 'gesendet', 'ver
|
||||
const PULT_ACTIONS = Object.freeze(['claim', 'sent', 'discard', 'done', 'reply', 'approve-preview', 'paste', 'start-build'])
|
||||
// Die Aktionen mit der langen Frist (ACTION_TIMEOUT_MS); bei einer Zeitüberschreitung ist offen, ob der Dienst sie ausgeführt hat
|
||||
export const SLOW_PULT_ACTIONS = Object.freeze(['reply', 'approve-preview', 'start-build'])
|
||||
// Status eines Fehlers, bei dem offen bleibt, ob der Dienst die Aktion trotzdem ausgeführt hat (D14): 0 = der Client hat abgebrochen oder die
|
||||
// Verbindung riss, 502 und 504 = der Proxy hat beim Warten aufgegeben (der Dienst arbeitet weiter, die Mail kann hinausgegangen sein). 503 fehlt mit
|
||||
// Absicht: dort gibt es keinen Upstream, die Anfrage hat den Dienst nie erreicht. Dasselbe gilt für 429 (Drosselung) und die Fehler 4xx/500.
|
||||
export const UNCERTAIN_STATUS = Object.freeze([0, 502, 504])
|
||||
|
||||
const BASE = '/api/workers'
|
||||
const EVENTS_LIMIT = 200
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
// Plattform-Antworten schickt der Mensch selbst ab (Plattform) und markiert sie danach als gesendet; Mail-Antworten und die Freigabe
|
||||
// einer Vorschau gehen über den Dienst (api.pultAction), der sie durch das Sende-Tor führt.
|
||||
|
||||
import { SLOW_PULT_ACTIONS } from './workersApi'
|
||||
import { DOWN_TEXT, SLOW_PULT_ACTIONS, UNCERTAIN_STATUS } from './workersApi'
|
||||
import { roleOf } from './workersRoster'
|
||||
|
||||
const MINUTE_MS = 60 * 1000
|
||||
@@ -288,11 +288,14 @@ export function validateReplyText(text) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Meldung der Zeile bei einer gescheiterten Pult-Aktion: der Satz des Dienstes. Eine Zeitüberschreitung oder ein Netzfehler (status 0) bei
|
||||
* reply, approve-preview und start-build heißt nicht „nicht gesendet“: der Dienst kann die Aktion noch ausgeführt haben (D14).
|
||||
* Meldung der Zeile bei einer gescheiterten Pult-Aktion: der Satz des Dienstes. Eine Zeitüberschreitung oder ein Netzfehler (status 0) und die
|
||||
* Fehlerseite des Proxys beim Warten (502, 504) bei reply, approve-preview und start-build heißen nicht „nicht gesendet“: der Dienst kann die
|
||||
* Aktion noch ausgeführt haben (D14, UNCERTAIN_STATUS). Bei 502/504 gilt das nur für die Fehlerseite des Proxys (Meldung DOWN_TEXT); ein Satz
|
||||
* des Dienstes unter demselben Status (502 „Anmeldedienst nicht erreichbar.“ kommt vor der Aktion) bleibt stehen.
|
||||
*/
|
||||
export function actionErrorText(err, action) {
|
||||
if (SLOW_PULT_ACTIONS.includes(action) && err?.status === 0) return UNCERTAIN_TEXT
|
||||
const status = err?.status
|
||||
if (SLOW_PULT_ACTIONS.includes(action) && UNCERTAIN_STATUS.includes(status) && (status === 0 || err.message === DOWN_TEXT)) return UNCERTAIN_TEXT
|
||||
return typeof err?.message === 'string' && err.message !== '' ? err.message : ACTION_FAILED
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user