Dix règles d'or pour les filtres de sortie.
Le contenu en Anglais non traduit se trouve ici.
Voilà les règles que doivent suivre à la lettre les filtres de sortie :
- Les filtres de sortie ne devraient pas passer de brigades vides le long de la chaine de sortie, mais devraient être tolérantes sur l’arrivée de brigades vides.
- Les filtres de sortie doivent passer tous les seaux de métadonnées (
metadata buckets
) le long de la chaine de sortie ; les seaux de vidages (FLUSH buckets
) devraient être respectés en passant tous les seaux en attentes le long de la chaine de sortie. - Les filtres de sortie devraient ignorer tous les seaux qui suivent un seaux de fin de fichier (
EOS buckets
). - Les filtres de sortie doivent traiter une quantité fixe de données, à la fois, afin de s’assurer que la consommation mémoire n’est pas proportionelle à la taille du contenu qui est filtré.
- Les filtres de sortie devraient ignorer les types de seaux, et doivent être capables de traiter des seaux de type inconnu.
- Après avoir appelé
ap_pass_brigade
pour faire suivre une brigade le long de la chaine de filtres, les filtres de sortie devraient appelerapr_brigade_cleanup
pour s’assurer que la brigade est vide avant de s’en resservir ; les filtres ne devraient jamais utiliserapr_brigade_destroy
pour « détruire » des brigades. - Les filtres de sortie doivent mettre de côté les seaux qui sont destinés à être gardés plus longtemps que la durée du filtrage.
- Les filtres de sortie ne doivent pas ignorer la valeur de retour de
ap_pass_brigade
, et doivent renvoyer les erreurs appropriées en retour, à la chaine de filtres. - Les filtres de sortie doivent seulement créer un nombre fixe de brigades de seaux pour chaque réponse, plutôt que une par invocation.
- Les filtres de sortie devraient en tout premier lieu essayer des lectures non bloquantes sur chaque seau, et envoyer un buffer de vidage (
FLUSH bucket
) le long de la chaine de filtres si la lecture doit être faite à nouveau, et de manière bloquante, avant de recommencer une lecture bloquante.
Sachant que la règle 9 n’est pas très claire pour moi, je vous la relivre en Anglais :
Output filters must only create a fixed number of bucket brigades for each response, rather than one per invocation.