Skip to content

FR Bridge Depannage

wanoo edited this page Oct 23, 2026 · 1 revision

Dépannage du Bridge et des connecteurs

English · Type : dépannage · Public : administrateur · Contexte : Reality Bridge · Statut : prête · S'applique depuis : 4.1.20

Le Reality Bridge, profil local (SQLite) · contrat : stable · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Node 22.13+ avec node:sqlite, sous Ubuntu ; Chromium et WebKit de bout en bout · vérifications automatiques : jobs reality, reality-xcheck ; plan de CI reality ; 2 fichiers de tests · passes humaines : aucune · limites connues : aucune listée sur cette page

Le Reality Bridge, profil distributed (Postgres) · contrat : expérimental · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Postgres 16 en CI ; Le profil de qualification : HTTPS, trois instances (ops/qualify/) · vérifications automatiques : jobs bridge-postgres, deployment-smoke ; plan de CI reality ; 1 fichier de tests · passes humaines : bridge-postgres-https pas faite (#77) · limites connues : aucune listée sur cette page

Les connecteurs (email, Telnet, SSH, Open Badges) · contrat : expérimental · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Node 22 sous Ubuntu (Telnet et SSH pas sous Windows) · vérifications automatiques : jobs connectors, connector-archive-e2e ; plan de CI reality ; 3 fichiers de tests · passes humaines : connectors-real-security pas faite (#79) · limites connues : aucune listée sur cette page

Ce que veulent dire les codes d’erreur d’un Reality Bridge, et quoi faire. Le Bridge est le serveur qui porte les signaux du monde réel (un e-mail, un badge, un terminal) jusqu’au jeu d’un joueur ; ses connecteurs envoient ces signaux. Cette page traite des réponses du Bridge lui-même, pas de celles du Studio hébergé, qui a des codes de mêmes numéros.

Le Bridge répond 409

Une 409 du Bridge veut dire « c’est déjà fait », jamais « votre copie est périmée » :

  • {"error": "pairing", "message": "already confirmed"} sur POST /v1/pairings/<code>/confirm : le code d’appairage a déjà été confirmé, par ce connecteur ou par un autre. Deux connecteurs qui confirment le même code en même temps : l’un gagne, l’autre reçoit cette 409. Le joueur est appairé ; rien à refaire.
  • {"error": "duplicate", …"this run was submitted already (the first submitter keeps it)"} sur POST /v1/runs : le même run de speedrun a été envoyé deux fois, et le second est refusé au moment d’entrer dans la file. Le premier envoi garde sa place dans la file ; il n’est classé qu’une fois que le worker des speedruns l’a trouvé valide.
  • {"error": "trust", …"only a run the worker found valid can be moderated"} : un modérateur a voulu valider un run que le worker des speedruns n’a pas trouvé valide.

Aucune ne perd de données : la première action tient. Pour le vérifier, lisez le journal du Bridge (des lignes JSON sur sa sortie standard) : "event":"pairing.confirmed" avec le playerId pour l’appairage, "event":"run.submitted" (puis run.verified) pour le run. Le Bridge n’a pas de route d’opérateur qui lise l’état d’un appairage. N’appelez jamais GET /v1/pairings/<code> pour vérifier : c’est la récupération unique du joueur, et l’appeler remet, et consomme, la capacité du joueur.

Le Bridge répond 503

  • {"error": "busy", "message": "the store is busy: try again in a second"}, avec Retry-After: 1 : un autre processus a gardé le verrou d’écriture du stockage plus longtemps que la requête ne pouvait attendre (SQLite). Rien n’a été écrit ; renvoyez-la.
  • GET /readyz répond 503 {"status": "unavailable"} : le stockage ne répond pas. Regardez d’abord la base.
  • Depuis la 4.1.20, un Bridge qui perd son bail de maintenance (non renouvelé, ou la connexion à la base qui tient son verrou est tombée) retient ses écritures, qui répondent 503, et échoue à /readyz jusqu’à ce qu’il reprenne un bail (sa ligne de journal maintenance.lease.lost dit pourquoi).

Le même événement est arrivé deux fois

Un connecteur peut envoyer deux fois le même signal (une nouvelle tentative après un délai dépassé, un redémarrage). Le Bridge ne l’accepte qu’une fois : POST /v1/signals répond 202 la première fois, et 200 avec duplicate pour un dedupeKey déjà accepté. La sauvegarde du joueur garde la séquence des signaux appliqués, donc un signal n’est jamais appliqué deux fois dans le jeu.

Un connecteur est en panne

  • Le jeu continue : un joueur hors ligne, ou sans signal, continue de jouer ; ce qui arrive plus tard s’applique à son arrivée.
  • Un connecteur lancé avec un port health répond à GET /health par 200 quand tout va bien, 503 sinon, avec un detail ; GET /metrics sur le même port donne ses compteurs.
  • Un connecteur e-mail laisse un message non lu quand le Bridge l’a refusé pour une raison passagère (Bridge absent ou occupé, quota) : il est relu au relevé suivant. Un message refusé pour de bon est marqué lu et signalé, pour que vous le regardiez. Au-delà d’un quota, le Bridge répond 429 : le connecteur le voit, rien n’est perdu en silence.

Modifier la source de cette page · Signaler une erreur

Accueil

Index (6)
Démarrer (6)
Jouer (9)
Installer (17)
Créer un jeu (55)
Moteur (4)
Studio local (24)
Studio d'équipe (21)
Clever Cloud (23)
Reality Bridge et connecteurs (16)
Contribuer (25)
Référence (7)

Clone this wiki locally