Trackers and Announces FR - Kheopsian/Hydranos GitHub Wiki
S'applique à Hydranos 4.4.
Pour tous ceux qui seedent sur des trackers avec Hydranos, privés avant tout : l'onglet Trackers, la modification de la liste de trackers d'un torrent, et ce qu'Hydranos envoie à un tracker et quand : quels réglages s'appliquent par hôte, quel événement part à chaque étape, et ce qu'il ajoute autour des annonces (un scrape pour les torrents pas encore annoncés, stopped à la suppression et lors d'un arrêt propre).
Ce qui distingue en général les moteurs race et hoard : Moteurs : race & hoard. Obligations de seed et drain : Drain race & graduation. Vocabulaire : Concepts & glossaire.
L'onglet Trackers affiche une ligne par hôte de tracker (par exemple tracker.example.org), et non une ligne par URL. Une ligne apparaît quand :
- un torrent du catalogue nomme cet hôte, qu'il lui ait déjà été annoncé ou non (vous pouvez donc définir une passkey avant la première annonce) ;
- ou une annonce vers lui a réussi ou échoué ;
- ou vous avez enregistré pour lui une passkey ou une famille IP d'annonce.
Les lignes cumulent tous les moteurs de cette instance. Le décompte du catalogue utilise l'hôte tel qu'il est écrit dans l'URL, mais les erreurs, les auto-vérifications, le disjoncteur et la correspondance passkey/famille utilisent l'hôte en minuscules : un Tracker.Example.org en échec affiche ses erreurs sur une ligne tracker.example.org distincte.
| Colonne | Ce qu'elle affiche |
|---|---|
| Tracker | l'hôte |
| Torrents | le nombre de torrents du catalogue qui nomment cet hôte (un torrent qui a l'hôte dans deux paliers compte une fois) |
| Statut (Status) |
ok (une annonce a reçu une réponse), not announced (nommé par un torrent, jamais annoncé), error. Une étiquette de verdict d'auto-vérification peut suivre (voir plus bas). Quand le tracker a un problème, une gravité remplace toute la cellule, verdict compris : needs action (rouge), unreachable (orange) ou acknowledged (atténué) |
| Passkey |
set si un remplacement de passkey existe, - sinon |
| Min seed | l'obligation de seed : 48h, 0h ou - (non déclarée) |
| Announce | la famille IP : auto, v4 ou v6
|
| Erreurs (1 h) (Errors (1h)) | les échecs d'annonce des 60 dernières minutes par classe, par ex. timeout x12, rate_limited x3 ; cliquez dessus pour ouvrir le détail des erreurs |
| Actions | Mute / Unmute, Masquer (Hide) / Afficher (Unhide), Edit |
Règles de gravité :
-
needs action (rouge) : le tracker a rejeté la passkey (
invalid_passkey), ou l'auto-vérification n'a pas trouvé cette instance dans la liste de pairs d'une famille d'adresses (v4_missing,v6_missing) ou des deux (absent). -
unreachable (orange) : erreurs
rate_limited,timeout,dnsouconnect. - Les torrents que le tracker ne connaît plus (
unknown_torrent) ne sont pas comptés comme une panne : il n'y a rien à corriger côté tracker.
L'onglet porte un badge rouge ou orange indiquant le nombre de trackers rouges ou orange, compté en trackers distincts sur l'ensemble des moteurs (un tracker rouge à la fois sur race et sur hoard compte une fois ; le rouge l'emporte sur l'orange). Chaque moteur alimente les compteurs d'erreurs, les gravités et le badge, moteurs supplémentaires compris (voir Supervision & journaux).
Auto-vérification : un seed ne demande normalement aucun pair à un tracker. Une annonce de seed sur 64 (un seul compteur pour tout le processus) demande 50 pairs et note si l'adresse de cette instance figure dans la liste. Tant qu'un hôte n'a pas de verdict, chaque annonce de seed vers lui demande 50 pairs, de même qu'un seed trouvé absent des deux familles. Le verdict (ok, unknown, v4_missing, v6_missing, absent) est une étiquette dans la cellule Statut (Status) ; son âge et la taille de l'essaim sont dans l'info-bulle de l'étiquette. unknown n'est pas une erreur et s'affiche en gris : un tracker peut exclure le pair demandeur de sa propre réponse, donc une absence seule ne prouve rien ; c'est v4_missing / v6_missing (une famille vue, pas l'autre) qui signale un problème.
Cliquer sur un nombre de la colonne Erreurs (1 h) (Errors (1h)) ouvre Errors in the last hour: <host> : par moteur et par classe, les messages du tracker lui-même (URL et passkeys masquées), le nombre, l'âge, l'événement et le torrent. Pour le moteur hoard, Show the torrents ouvre l'onglet Hoard filtré sur ce tracker et cette erreur.
Il existe deux jeux distincts de noms de classes :
| Où | Classes |
|---|---|
| Onglet Trackers, Erreurs (1 h) (Errors (1h)) (côté annonce) |
rate_limited, timeout, invalid_passkey, unknown_torrent, dns, connect, http_error, udp_proxied, other. Quand les deux familles d'adresses ont échoué, seul le message IPv4 est classé. udp_proxied est un refus d'Hydranos lui-même, pas une faute du tracker : un tracker udp:// d'un moteur dont les annonces passent par un proxy (voir Trackers UDP) ; la cellule Erreurs (1 h) l'affiche sous la forme de la phrase complète de ce refus, le nom de classe apparaît dans le détail des erreurs (et dans l'info-bulle de la ligne seulement quand le tracker est aussi marqué needs action, unreachable ou acknowledged). |
| Listes Race et Hoard, filtre d'erreur (côté torrent) | Mort chez le tracker (Dead on the tracker), Passkey invalide (Bad passkey), Quota atteint (Rate-limited), Tracker injoignable (Tracker unreachable), Autre erreur (Other error) |
La classe côté torrent est la dernière erreur de chaque torrent, effacée par la prochaine annonce réussie : c'est un état courant, pas un historique.
Cliquez sur Edit sur une ligne, ou sur + Hôte manuel (+ Manual host) pour un hôte qui n'a pas encore de ligne. Le formulaire contient :
| Champ | Signification |
|---|---|
| Hôte (Host) | l'hôte du tracker tel qu'il apparaît dans la colonne Tracker, par ex. tracker.example.org
|
| Passkey | la passkey à utiliser pour cet hôte. Vide = laisser inchangée celle qui est enregistrée. Effacer la passkey (Clear passkey) la supprime |
| Minimum seed | les heures de seed que ce tracker exige. Vide = non déclarée (le drain ne supprimera pas). 0 = le tracker n'exige rien. + Hôte manuel (+ Manual host) s'ouvre avec le champ vide |
| Announce |
auto, v4 only ou v6 only
|
Enregistrer (Save) écrit les trois réglages dans le fichier de configuration et les applique à chaud. Chaque torrent prend en compte une nouvelle passkey ou famille IP à sa propre prochaine annonce, si bien qu'un changement se propage sur un intervalle (30 minutes par défaut) ; faites Re-annoncer (Reannounce) sur un torrent pour vérifier tout de suite.
Comment chaque réglage est mis en correspondance avec les URL de trackers d'un torrent :
-
Passkey : correspond à l'hôte lui-même ou à n'importe lequel de ses sous-domaines (
tracker.example.orgcouvre aussiannounce.tracker.example.org). Quand plusieurs clés correspondent, la plus longue l'emporte. Ce n'est pas une recherche de sous-chaîne. La passkey remplace le dernier segment du chemin de l'URL, de sorte quehttps://tracker.example.org/announce/OLDKEYest annoncé commehttps://tracker.example.org/announce/0123456789abcdef. Seul un chemin dont le dernier segment est exactementannounce(ou vide) est laissé tel quel. La query string est conservée mais pas lue :https://tracker.example.org/announce.php?passkey=OLDdevienthttps://tracker.example.org/0123456789abcdef?passkey=OLD; ne définissez donc pas de remplacement pour un tracker qui porte sa passkey dans la query. -
Announce (famille IP) : même règle hôte-ou-sous-domaine.
autoenvoie une annonce par famille d'adresses, avec le même peer id, et fusionne les réponses. Fixez un hôte surv4ouv6si le tracker ne vous voit que dans une famille.autoest enregistré comme « aucune entrée ». -
Minimum seed : hôte exact uniquement, et seul compte l'hôte de la première URL de tracker du torrent. Cela ne change pas ce qui est annoncé : cela indique au drain race quand un torrent race peut être supprimé. Vide (non déclarée) protège le torrent de la suppression ;
0le libère. Détails dans Drain race & graduation.
L'aide sous Hôte (Host) le dit : tel qu'affiché dans la colonne Tracker ; passkey et famille IP couvrent aussi ses sous-domaines (as shown in the Tracker column; passkey and IP family also cover its subdomains).
Un moteur avec enable_ipv6 = false n'annonce qu'en IPv4, quelle que soit la famille de l'hôte (auto et v6 only compris). Voir Réseau : ports & redirection.
-
Mute garde la ligne et retire le tracker des compteurs rouge/orange et du badge de l'onglet (statut
acknowledged). - Masquer (Hide) retire la ligne du tableau et du badge. Le tracker reçoit toujours les annonces. Les lignes masquées sont listées sous Trackers masques (Hidden trackers), avec Afficher (Unhide) par ligne et Unhide all.
-
Hide unconfigured trackers holding fewer than [10] torrents + Hide them masque tous les trackers sous ce nombre qui n'ont ni passkey ni famille autre que
auto(les trackers publics intégrés à des fichiers.torrentégarés). Un hôte doté d'une passkey ou d'une famille IP n'est jamais masqué de cette façon.
La carte Statistiques par tracker (Per-tracker stats) ventile le trafic par hôte de tracker et par moteur (↑ rate, ↓ rate, Pairs (Peers), Actifs/Total (Active/Total), Seedsize (Seed size), ↑ total / ↓ total cumulés, Ratio). Graphique du tracker (Tracker chart) trace l'envoi d'un tracker dans le temps (hoard ↑, race ↑).
L'onglet écrit ces tables dans default.toml (les clés sont des hôtes de trackers, les valeurs des chaînes) :
[announce_passkeys]
"tracker.example.org" = "0123456789abcdef"
[announce_ip_modes]
"tracker.example.org" = "v4"
[announce_min_seed_hours]
"tracker.example.org" = "72"[announce_muted] et [announce_hidden] prennent "tracker.example.org" = "1".
Depuis la 4.4, Config › Paramètres avancés (default.toml) (Advanced settings (default.toml)) peut aussi modifier les entrées existantes de ces cinq tables (passkeys et familles IP dans le sous-onglet Trackers et réseau (Trackers & Network), les trois autres dans Other ; une clé d'hôte entre guillemets est mise en correspondance par son nom nu). Il ne peut pas ajouter d'hôte : utilisez pour cela l'onglet Trackers. Un tel enregistrement répond qu'un redémarrage est nécessaire. Les changements faits depuis l'onglet Trackers ou ses routes d'API s'appliquent à chaud. Chacun de ces enregistrements relit aussi tout le fichier dans la configuration en cours, modifications manuelles comprises, mais redémarrer est la façon fiable d'appliquer une modification manuelle. Valeurs par défaut et toutes les autres clés : Config : démon, auth & global.
Les mêmes actions via l'API REST (toutes exigent la clé API, voir API REST) :
curl -X POST -H "X-Api-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"host":"tracker.example.org","passkey":"0123456789abcdef"}' \
http://hydranos.example.org:8199/api/announce/passkeysMême forme pour POST /api/announce/ip-modes ({"host","mode":"v4"}) et POST /api/announce/min-seed ({"host","hours":72}). Une passkey vide supprime le remplacement ; {"host":"…","clear":true} sur min-seed la rend de nouveau non déclarée. POST /api/announce/mute prend {"host","muted"} et POST /api/announce/hidden prend {"host","hidden"} ou {"hosts":[…],"hidden":true}. GET /api/trackers renvoie les lignes de l'onglet ; GET /api/announce/health et GET /api/announce/errors?host=… renvoient les gravités et le détail des erreurs.
Ouvrez le panneau de détail d'un torrent. La carte Trackers affiche :
- Announced as : le peer id avec lequel ce torrent a annoncé pour la dernière fois, et quand (avant la première annonce : Not announced yet since this engine started et l'id qu'il utilisera). Une ligne Next announce n'apparaît que si le prochain peer id diffère, ce qui n'arrive pas en usage normal.
- le tableau Tracker, Statut (Status), Last, Suivant (Next), Scrape. Statut vaut
OK,pas encore annoncé(not announced yet) ou le message d'erreur. Last et Suivant (Next) sont la dernière annonce réussie et la prochaine prévue (ou une estimation tirée de la file juste après le démarrage). Scrape affiche seeders/leechers (12s/3l), tirés des réponses d'annonce ou, pour un torrent auquel aucun tracker n'a encore répondu, d'un scrape (voir Scrape pour les torrents pas encore annoncés).
Ces valeurs sont celles du torrent, pas de chaque URL : toutes les lignes affichent la même chose, si bien qu'une URL de secours morte paraît en bonne santé. Les erreurs par hôte de l'onglet Trackers permettent de les distinguer.
Edit trackers ouvre une zone de texte :
- une URL par ligne ;
- une ligne vide commence un nouveau palier (tier). Les paliers sont essayés dans l'ordre (voir Annonces race et hoard plus bas) ;
- schémas acceptés :
http://,https://(exigent un hôte) etudp://(exige un hôte et un port, par ex.udp://tracker.example.org:6969/announce). Tout le reste est refusé avec une erreur. Les URL sont rognées, pas réécrites ; - l'éditeur indique la copie de quel moteur vous modifiez (
Engine: race, par exemple).
Save trackers remplace toute la liste (une liste identique répond No change to save.). Un tracker ajouté reçoit son propre started à la prochaine annonce du torrent, pas au moment de l'enregistrement.
À savoir :
-
Survit à un redémarrage. Save trackers écrit aussitôt la nouvelle liste dans l'état de reprise du moteur (voir Architecture), et cet état l'emporte sur le
.torrentau démarrage. Le.torrentstocké n'est pas réécrit. - Un torrent ajouté à l'instant peut refuser une modification avec this torrent has no stored .torrent yet ; réessayez un peu plus tard.
- Une seule copie. Si le même torrent est dans plusieurs moteurs, la modification s'applique au premier moteur qui le détient (race, puis hoard, puis les moteurs supplémentaires).
- Lignes distantes : la modification ne cherche que dans les moteurs locaux : elle change la copie locale s'il y en a une, et échoue avec torrent not found sinon ; la copie du nœud n'est jamais modifiée (voir Nœuds & plusieurs machines).
Via l'API REST :
# Read the live list (also returns engine and peer id state)
curl -H "X-Api-Key: YOUR_API_KEY" \
http://hydranos.example.org:8199/api/torrents/<info_hash>/trackers
# Add one URL as a new tier
curl -X POST -H "X-Api-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"op":"add","urls":["udp://tracker.example.org:6969/announce"]}' \
http://hydranos.example.org:8199/api/torrents/<info_hash>/trackersop vaut add (chaque URL dans un nouveau palier, doublons ignorés), remove (les paliers vides disparaissent), replace (from → to, erreur si from est absent) ou set (avec tiers, un tableau de tableaux). La réponse est {"trackers": <tiers>, "changed": true|false}. Les routes torrents/addTrackers et torrents/removeTrackers du shim qBittorrent passent par le même chemin (voir Shim qBittorrent & automatisation).
Ce que chaque moteur envoie dans ses annonces :
| Élément | Valeur en 4.4 |
|---|---|
| Peer id |
-HY et la version, un caractère base 36 par composant (-HY4400- pour la 4.4.0), suivi de 12 lettres et chiffres aléatoires. Tiré une fois par moteur au démarrage : chaque moteur annonce le sien, et un redémarrage en tire un nouveau |
| User-Agent |
Hydranos/4.x.y (la version en cours d'exécution) |
key |
8 caractères hexadécimaux, stable pendant toute la vie du processus, change au redémarrage |
port |
le port sur lequel le moteur écoute maintenant (16171 pour race, 16172 pour hoard par défaut), changement à chaud compris ; derrière un tunnel WireGuard géré, le port que le tunnel redirige |
uploaded / downloaded
|
comptés à partir de zéro à chaque started, jamais des totaux cumulés (voir Ce qu'un redémarrage coûte à votre ratio) |
left |
calculé à partir des pièces détenues |
numwant |
200 pendant le téléchargement. En seed : 0, ou 50 dans les cas listés sous Auto-vérification |
compact |
1 |
event |
started, completed ou stopped, ou absent pour une annonce périodique |
trackerid |
renvoyé si le tracker a envoyé un tracker id
|
ip |
envoyé seulement quand l'announce_ip du moteur est défini (HTTP ip=, et le champ UDP ip pour une adresse IPv4) ; vide = non envoyé, le tracker garde l'adresse source |
Une annonce HTTP a un délai d'expiration de 15 s. Hydranos comprend interval, min interval, peers / peers6, complete / incomplete, failure reason, warning message (journalisé), tracker id et le retry in de BEP 31.
-
Famille IP : avec
auto, une annonce part par famille d'adresses ; se règle par hôte dans l'onglet Trackers. - Peer id vis-à-vis des pairs : chaque moteur annonce et fait ses handshakes (entrants et sortants) avec son propre peer id, donc le pair que liste un tracker est bien le pair qui se connecte.
-
Quel chemin réseau : les annonces d'un moteur sortent par le même chemin que ses pairs : épinglées à son
bind_interfacesous Linux (ou à son tunnel WireGuard géré), via sonannounce_proxys'il est défini, sinon via son proxy SOCKS5 de pairs (socks5h://, le nom du tracker résolu par le proxy).TYPHON_ANNOUNCE_PROXYn'est qu'un repli pour un moteur qui n'a ni l'un ni l'autre. Une URL de proxy illisible fait échouer l'annonce (announce proxy … is not usable) ; elle ne retombe jamais sur une annonce directe. Détails : VPN & sortie réseau et WireGuard géré. -
Annonces retenues : un moteur retenu au démarrage (
start_paused) ou qui attend son port redirigé (Gluetun, WireGuard géré) n'annonce rien, et revérifie environ une fois par minute. -
Pas d'usurpation de client. Hydranos ne présente jamais le peer id ni le User-Agent d'un autre client. Une ancienne table
[announce_clients]est supprimée au premier démarrage d'une 4.3 ou ultérieure, ce qui arrête une fois les torrents de ces trackers : redémarrez-les après la mise à jour.
La requête complète, avec la spécification de chaque champ, se trouve dans BITTORRENT-CONFORMANCE.md. Son exemple montre la 4.2.4 (-HY4240-), et trois de ses passages sont périmés en 4.4 : le « we never scrape » de BEP 48 et la section sur le scrape (voir plus bas), et « Magnet links are not resolved » (les magnets sont résolus).
flowchart LR
CAT["Catalogue du moteur<br/>relu toutes les 10 s"] --> ADM["Quota d'admission<br/>max(total x 10 / 1800, 100) par 10 s"]
ADM --> Q["File par hôte du premier tracker<br/>concurrence adaptative de 4 à 2048"]
BUMP["Événements et Re-annoncer manuel"] --> Q
Q --> HELD{"Moteur retenu ?<br/>start_paused ou port pas encore connu"}
HELD -- "oui, nouvelle vérification dans 1 min environ" --> Q
HELD -- "non" --> BRK{"Disjoncteur de l'hôte ouvert ?<br/>5 échecs = pause de 10 min"}
BRK -- "oui" --> SKIP["Tracker sauté pour ce passage"]
SKIP --> RES
BRK -- "non" --> CLI["Annonce HTTP ou UDP"]
CLI --> TRK["Tracker"]
TRK --> RES["Replanification<br/>intervalle plus gigue<br/>race refusé : 5 s"]
RES --> Q
| Étape | Comportement |
|---|---|
| Démarrage | le planificateur attend 5 s, puis commence à annoncer |
| Admission | le catalogue entre progressivement : chaque cycle de 10 s admet max(total × 10 / 1800, 100) nouveaux torrents, répartis sur un intervalle de 30 minutes (sous 18 000 torrents, le plancher de 100 va plus vite). C'est un quota, pas un débit de livraison : les torrents admis attendent ensuite dans les files par hôte au rythme de chaque tracker (concurrence, latence, disjoncteur), si bien que sur un gros catalogue les premières annonces peuvent prendre bien plus de 30 minutes. Jusqu'à sa première annonce, le panneau de détail affiche pas encore annoncé (not announced yet) |
| Intervalle | l'interval du tracker (plafonné à 7 jours), ou son min interval s'il est plus grand, pour race comme pour hoard. Sans lui, 30 minutes. Toute attente inférieure à 60 s est portée à 60 s ; la nouvelle tentative d'enregistrement race (5 s, voir Annonces race et hoard) est la seule attente plus courte |
| Gigue | jusqu'à un dixième de l'attente, au plus 120 s, toujours ajoutée (jamais en avance) |
min interval |
un plancher par tracker. Les annonces planifiées ne le franchissent jamais ; un Re-annoncer (Reannounce) que vous demandez, si. Un completed ou un stopped dû part sans en tenir compte (voir Événements) |
retry in / Retry-After
|
respectés (plafonnés à 24 h), même par une ré-annonce manuelle et par la nouvelle tentative d'enregistrement race. retry in: never arrête ce tracker pour ce torrent jusqu'à un redémarrage ou une suppression (Arrêter puis Démarrer ne l'efface pas). Un completed ou un stopped dû part quand même avant la fin d'un délai retry in / Retry-After (stopped une fois, completed retenté jusqu'à acceptation), mais jamais vers un tracker qui a répondu retry in: never
|
| Concurrence adaptative | comptée par hôte du premier tracker d'un torrent : le torrent y occupe un emplacement pendant tout son passage, ses autres trackers compris. Chaque hôte démarre à 32 annonces en vol, entre 4 et 2048 (4096 par moteur au total). Elle augmente tant que le tracker répond vite, diminue quand la latence monte ou que plus de 2 % des réponses sont des 429 ou que plus de 5 % expirent. Non configurable |
| Disjoncteur | 5 échecs consécutifs vers un hôte mettent cet hôte en pause 10 minutes. Un 429 ou une failure reason compte comme une réponse, pas comme un échec |
| Vérification | rien n'est annoncé pendant la vérification des données d'un torrent (nouvelle tentative après 60 s) |
| Retenu | rien n'est annoncé tant que le moteur est retenu au démarrage (start_paused) ou attend son port redirigé ; nouvelle vérification environ une fois par minute (le plancher de 60 s s'applique) |
Ré-annonce manuelle : Re-annoncer (Reannounce) dans le menu contextuel de la liste Race ou Hoard, ou :
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
http://hydranos.example.org:8199/api/torrents/<info_hash>/reannounceUne ré-annonce manuelle franchit le min interval d'un tracker, mais jamais son retry in / Retry-After. Elle répond {"status":"ok","bumped":true}, in_flight si une annonce est déjà en cours, 429 avec cooldown et retry_after_secs dans les 60 s qui suivent la précédente relance de ce torrent (la vôtre, ou celle que provoque un Arrêter, un Démarrer ou un completed), 429 si la file est pleine, 503 si le moteur n'annonce pas, et 202 avec "status":"queued","bumped":false si le planificateur n'a pas répondu en 5 s. La route torrents/reannounce du shim qBittorrent fait de même pour chaque copie du torrent.
Un moteur de rôle race revient plus tôt que l'intervalle seulement tant qu'un tracker refuse encore un torrent qu'il n'a pas enregistré : voir Annonces race et hoard.
Les événements sont suivis par torrent et par tracker :
sequenceDiagram
participant U as Vous
participant H as Moteur Hydranos
participant T as Tracker
U->>H: Ajout du torrent
Note over H: délai de démarrage 5 s, puis admission<br/>(environ 30 min, la première annonce peut venir plus tard)
H->>T: annonce event=started
loop à chaque intervalle (30 min par défaut, plus gigue)
H->>T: annonce (sans événement)
end
Note over H: fin du téléchargement
H->>T: annonce event=completed (immédiate, retentée jusqu'à livraison)
U->>H: Arrêter
H->>T: annonce event=stopped (tentée une fois)
U->>H: Démarrer
H->>T: annonce event=started (compteurs à zéro)
U->>H: Supprimer
H->>T: annonce event=stopped (tentée une fois, en arrière-plan)
Note over H,T: arrêt propre : stopped à chaque tracker qui a reçu started,<br/>moteurs race d'abord, 5 s au plus
-
started: la première annonce d'une session vers chaque tracker : après un ajout, après un redémarrage, après Démarrer (Start), ou pour un tracker ajouté à la liste. -
completed: dû à chaque tracker ayant vustartedquand la dernière pièce d'un téléchargement est vérifiée ; non envoyé pour un torrent déjà complet au début de sa session (mode seed, revérification, cross-seed). Retenté à chaque annonce jusqu'à livraison, mais seulement en mémoire : un redémarrage avant qu'il n'aboutisse le fait perdre. -
stopped: envoyé immédiatement quand vous faites Arrêter (Stop) sur un torrent, tenté une fois par tracker, à chaque tracker qui a reçustarted. Également envoyé :- quand un torrent est supprimé (depuis l'interface, l'API, le shim qBittorrent, le drain race, une purge race, un workflow ou une limite de partage) : en arrière-plan, une fois par tracker, 20 s au plus, avec les compteurs de la session et le
trackerids'il en a reçu un ; - lors d'un arrêt propre (SIGTERM, Restart depuis l'interface ou l'API, un arrêt pendant le démarrage) : les torrents démarrés de chaque moteur, moteurs de rôle race d'abord, 64 à la fois, en 5 s au total. Ce qui ne part pas à temps est laissé à l'expiration propre au tracker. La ligne de journal
stopped sent to the trackersdonnedepartedetof; - les trackers
udp://sont ignorés quand le moteur aenable_udp_trackers = false.
Il est aussi envoyé quand un torrent passe en erreur parce que ses données ont disparu. Il reste alors silencieux (rien ne revérifie les données) et n'annonce de nouveau
startedqu'après qu'un Vérifier à nouveau (Recheck) que vous lancez a retrouvé les données. Les torrents arrêtés avant un redémarrage n'envoient pas de secondstoppedau démarrage. - quand un torrent est supprimé (depuis l'interface, l'API, le shim qBittorrent, le drain race, une purge race, un workflow ou une limite de partage) : en arrière-plan, une fois par tracker, 20 s au plus, avec les compteurs de la session et le
-
Les événements n'attendent pas le prochain intervalle : le torrent est mis en file pour une annonce immédiate (au plus une fois par minute par torrent).
Non implémenté en 4.4 : un événement
stoppedquand un torrent quitte un moteur par graduation, par un déplacement de données (jobmove_data) ou par Move to engine ›, ou quand Hydranos plante ou est tué — le tracker cesse simplement d'avoir des nouvelles de ce pair et fait expirer l'entrée — si un tracker exige un départ propre, faites Arrêter (Stop) sur le torrent et attendez d'abord l'annonce.
L'uploaded que reçoit un tracker est un total de session, compté depuis le started de cette session. Hydranos ne rapporte uploaded qu'aux annonces, et une nouvelle session (started, compteurs à zéro) commence après chaque redémarrage. Une suppression et un arrêt propre envoient stopped avec les compteurs de la session, donc cet envoi est rapporté. Il n'est pas rapporté (au pire, un intervalle, 30 minutes par défaut, d'envoi par torrent et par tracker) après un crash ou un kill, une graduation, un déplacement de données ou un Move to engine › (ceux-ci ré-ajoutent le torrent ailleurs sans stopped), ni à l'arrêt pour ce qui n'est pas parti dans le budget de 5 s. Les compteurs cumulés d'Hydranos lui-même ne sont pas affectés. Sur un très gros catalogue, faites Arrêter (Stop) sur les torrents qui comptent et attendez leurs annonces avant un arrêt planifié.
Le rôle du moteur décide jusqu'où un passage descend dans la liste des trackers :
| Moteur de rôle race | Moteur de rôle hoard | |
|---|---|---|
| Trackers par passage | tous les trackers de tous les paliers | les trackers dans l'ordre des paliers, en s'arrêtant au premier qui répond (BEP 12) |
| Torrent refusé | retenté toutes les 5 s tant qu'il est encore en téléchargement, qu'aucun tracker ne l'a accepté et qu'au moins un a répondu avec une failure reason (n'importe quelle raison, passkey invalide comprise), pendant registration_retry_minutes (6 par défaut : au plus 72 refus par tracker) ; pas lors d'un passage où un tracker a expiré ou répondu 429. Un retry in / Retry-After le retient quand même |
pas de nouvelle tentative particulière |
| Une fois accepté | l'intervalle du tracker | l'intervalle du tracker |
Cela couvre le cas race où le .torrent arrive avant que le tracker ait enregistré l'upload. La fenêtre de nouvelles tentatives se règle par moteur dans sa section ([race], ou celle d'un moteur supplémentaire de rôle race), lue au démarrage du moteur (redémarrez pour la changer), sans champ dans l'interface :
[race]
registration_retry_minutes = 60 (ou absent) signifie la valeur par défaut, 6 minutes, pas « désactivé ». Le compteur de refus s'arrête à 255, donc toute valeur au-delà de 21 minutes environ se comporte comme 21. La clé n'a aucun effet sur un moteur de rôle hoard. Plus sur les rôles : Moteurs : race & hoard.
Les trackers udp:// reçoivent des annonces (BEP 15, avec BEP 41 pour que le chemin et la passkey atteignent le tracker).
- Interrupteur par moteur :
enable_udp_trackersdans[race],[hoard]ou la table de session d'un moteur supplémentaire. Absent signifie activé. Lu au démarrage du moteur. Désactivé, les URLudp://sont ignorées silencieusement. - Un client UDP pour la route par défaut, plus un par interface sur laquelle un moteur est épinglé : les annonces UDP d'un moteur partent de son
bind_interface(ou de son tunnel WireGuard géré), comme ses annonces HTTP. - La connexion et l'annonce sont chacune tentées deux fois (3 s, puis 5 s), puis l'annonce suivante réessaie, sous le même disjoncteur et les mêmes planchers qu'en HTTP. Les réponses UDP n'ont pas de
min interval; un intervalle de 0 signifie 30 minutes. - Quand les annonces du moteur passent par un proxy (son
announce_proxy, son proxy SOCKS5 de pairs, ou le repliTYPHON_ANNOUNCE_PROXY), les annonces UDP ne sont pas envoyées : elles échouent avecUDP trackers do not go through a SOCKS5 proxy (no UDP ASSOCIATE): they will not be announced while this proxy is active, classeudp_proxied(affichée sous la forme de cette phrase dans la cellule Erreurs (1 h) de l'onglet Trackers), pour que le tracker ne voie jamais votre vraie adresse à côté du proxy (voir VPN & sortie réseau).
Les nombres de seeders et de leechers (la colonne Scrape, les colonnes d'essaim des listes, les num_seeds / num_complete / num_incomplete du shim qBittorrent, les champs num_seeds, swarm_seeds et swarm_leechers des Workflows) viennent des champs complete / incomplete des réponses d'annonce, rafraîchis à chaque annonce. Un torrent auquel aucun tracker n'a encore répondu (en attente dans la file après le démarrage, ou arrêté) afficherait des zéros ; depuis la 4.4, un scrape (BEP 48 en HTTP, BEP 15 en UDP) remplit ces nombres, et seulement eux.
flowchart LR
START["Démarrage du moteur"] --> WAIT["90 s"]
WAIT --> HELD{"Moteur retenu ?<br/>start_paused"}
HELD -- "oui" --> SLEEP["Attente de 300 s"]
HELD -- "non" --> PICK["Jusqu'à 5000 torrents sans réponse d'annonce,<br/>non scrapés dans la dernière heure"]
PICK --> TGT["Premier tracker scrapable dans l'ordre des paliers<br/>dont le disjoncteur d'hôte est fermé"]
TGT --> REQ["50 hash par requête, 2 s d'écart par tracker,<br/>8 trackers à la fois"]
REQ --> FILL["Seeders et leechers enregistrés,<br/>sauf si une annonce a répondu entre-temps"]
FILL --> SLEEP
SLEEP --> HELD
- Une boucle par moteur, à côté de son planificateur d'annonces. Non configurable et impossible à désactiver ; aucune clé n'existe.
-
Quelle URL : en HTTP, le dernier segment du chemin doit commencer par
announce, qui devientscrape(https://tracker.example.org/announce.php?passkey=X→https://tracker.example.org/scrape.php?passkey=X; la query est conservée) ; tout autre chemin n'est pas scrapé. Le remplacement de passkey de l'onglet Trackers s'applique. Un trackerudp://est scrapé sauf sienable_udp_trackers = false. -
Quel chemin : le même que pour les annonces du moteur : son interface, son proxy, rien tant que le moteur est retenu au démarrage (
start_paused) (un moteur qui attend seulement son port redirigé scrape bien : un scrape ne porte aucun port), rien vers un hôte dont le disjoncteur est ouvert, pas de scrape UDP derrière un proxy. - Ce qu'il ne fait pas : il ne compte jamais comme une annonce. Rien de ce qui attend une première annonce (le planificateur, la chronologie race, les lignes et les erreurs de l'onglet Trackers) ne le voit ; il ne démarre et n'arrête rien. Un torrent déjà annoncé n'est jamais scrapé. La première erreur d'un tracker met fin au tour de ce tracker ; les torrents qu'il n'a pas traités sont de nouveau scrapés au plus tôt une heure plus tard.
- Une ligne de journal INFO par passage qui avait des torrents à scraper :
scrape: swarm counts for torrents not announced yetavecfilled.
Il n'existe pas de modification groupée dans le menu contextuel. Utilisez un workflow avec l'action add trackers (add_trackers) : des URL d'annonce et/ou l'URL d'une liste à récupérer (une par ligne, récupérée au plus une fois par jour, 500 URL et 1 Mio maximum), chacune dans un nouveau palier. Elle ne touche jamais un torrent privé. Voir Workflows.
| Symptôme | Cause probable |
|---|---|
La ligne indique not announced longtemps après le démarrage |
le torrent est arrêté, le moteur est retenu (start_paused, ou un port redirigé pas encore connu), ou sa première annonce attend encore dans la file par hôte après l'admission (l'admission se termine en 30 min environ ; sur un gros catalogue, la première annonce peut venir bien plus tard). La colonne Scrape peut déjà afficher des nombres : ils viennent d'un scrape, pas d'une annonce |
needs action avec invalid_passkey
|
mauvaise passkey : définissez-la dans Edit, puis faites Re-annoncer (Reannounce) sur un torrent pour vérifier |
| Passkey enregistrée mais URL inchangée | l'URL se termine par /announce ; modifiez plutôt l'URL de tracker du torrent |
| needs action après avoir défini une passkey | le tracker porte sa passkey dans la query string : le remplacement a écrasé un segment du chemin. Supprimez le remplacement |
| Le tracker UDP ne répond jamais | les annonces du moteur passent par un proxy (classe d'erreur udp_proxied), enable_udp_trackers = false, ou l'URL n'a pas de port |
Plus : Dépannage. Chiffres et journaux d'annonce (announce failed, tracker warning) : Supervision & journaux.