Suivi — Commentaires Note commentaire

#2061 Posté par  (site web personnel) . État de l’entrée : corrigée. Assigné à Benoît Sibaud. Licence CC By‑SA.
Étiquettes : aucune
1
27
mar.
2023

Je n'ai pas trouvé de page qui parle de ce sujet, mais il me semblait que la note d'un commentaire est égal à sa note par défaut, pondérée par les valeurs entre parenthèses, tant que la valeur absolue ne dépasse pas 10. Or, à la date du 27 mars 2023 à 14h50, le commentaire https://linuxfr.org/nodes/130706/comments/1919432 est noté (je copie) : Évalué à 6 (+5/-0). Sachant que, depuis un certain temps déjà, la note par défaut de mes commentaires est de 2, la note ne devrait-elle être de 7 ?

  • # Étrange

    Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

    Je n'ai pas accès à la production pour voir ce qui s'est passé, mais c'est effectivement étrange: si on regarde la liste de tous tes commentaires: https://linuxfr.org/users/epeios/comments

    Seul la première page contient le détail des votes: ça, c'est normal, c'est stocké uniquement temporairement dans Redis si je me souviens bien.

    Dans tous les commentaires qui ont encore le détail, seul celui que tu as pointé à une différence entre les + et - qui est différent de 2.

    Je ne sais pas pourquoi, je voulais juste partager ce constat.

    • [^] # Re: Étrange

      Posté par  (site web personnel) . Évalué à 3 (+0/-0).

      Les différents "POST /nodes/130706/comments/1919432/relevance/for HTTP/2.0" dans les logs comparés avec les entrées dans Redis :

      [24/Mar/2023:20:09:08 +0100] 200 // ok en base
      [24/Mar/2023:21:37:40 +0100] 200 // ok en base
      [25/Mar/2023:12:23:26 +0100] 200 // ok en base
      [26/Mar/2023:10:15:22 +0200] 200 // ok en base
      [27/Mar/2023:03:24:19 +0200] 502 // échec? (sauvegarde de la base ?)
      [27/Mar/2023:03:24:41 +0200] 200 // ok en base (réessai)
      [28/Mar/2023:00:15:10 +0200] 200 // ok en base
      
      • [^] # Re: Étrange

        Posté par  (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 30 mars 2023 à 07:56.

        On retrouve bien le +6 côté redis donc. Reste à savoir pourquoi 2+6=7 ?

        Évalué à 7 (+6/-0).

        • [^] # Re: Étrange

          Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

          la ligne d'échec ?

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

          • [^] # Re: Étrange

            Posté par  (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 31 janvier 2026 à 19:37.

            Hypothèse:

            • score initial de 2 (confirmé par le second commentaire de l'auteur qui n'a pas été noté sur la capture Archive.org https://web.archive.org/web/20230331224205/https://linuxfr.org/users/epeios/journaux/lilypond-frescobaldi-aka-en-avant-la-musique )
            • « Évalué à 7 (+6/-0). » on a +7 comme score calculé final côté SQL, et 6 fois +1 côté Redis
            • il n'y a pas de transaction sur l'ensemble Redis+SQL, et ça commence par Redis
            • 6 incrémentations stockées (à l'époque) côté redis et 5 côté SQL
            • ça laisse supposer que une requête a complètement échoué à cause de la sauvegarde de la base (donc sans changement ni côté Redis ni côté SQL), et le réessai partiellement (ça m'étonne un peu qu'une table verrouillée par exemple n'ait pas donné une erreur niveau HTTP mais je n'ai pas mieux comme explication), entraînant un décalage de 1 entre Redis et SQL. (voir plus bas)

            Et de toute façon on peut clore ce ticket, parce qu'on n'ira pas guère plus loin. en fait si

            • [^] # Re: Étrange

              Posté par  (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 31 janvier 2026 à 19:20.

              Par acquis de conscience, j'ai regardé les requêtes relevance/for et /against des trois derniers mois (pour les infos Redis) qui ont fini en HTTP 502 :

              • deux fois sur des commentaires qui ont fini « Évalué à 10 (+18/-3). » et « Évalué à 10 (+18/-0). », bref score plafond atteint donc ça ne va pas nous aider

              • https://linuxfr.org/nodes/140975/comments/2005612 « Évalué à 6 (+5/-1) » (l'auteur poste à 3 par défaut si on regarde ses 6 autres commentaires du même contenu). -> On a aussi une erreur de comptage, avec score initial de 3, SQL final de 6, avec côté Redis 5x +1 et 1x -1. Il manque un incrément côté SQL aussi. Possiblement au milieu d'opération d'adminsys (c'est la date de la migration redis et mariadb d'un conteneur à l'autre). En tout cas on voit l'absence de transaction : l'incrément Redis est passé, pas celui côté Redis. On a inventé le demi-point dans les notes ?

              [14/Nov/2025:23:34:10 +0100] "POST /nodes/140975/comments/2005612/relevance/for HTTP/1.0" 200
              [15/Nov/2025:08:15:05 +0100] "POST /nodes/140975/comments/2005612/relevance/for HTTP/1.0" 200
              [15/Nov/2025:10:24:59 +0100] "POST /nodes/140975/comments/2005612/relevance/for HTTP/1.0" 200
              [15/Nov/2025:11:51:22 +0100] "POST /nodes/140975/comments/2005612/relevance/against HTTP/1.0" 200
              [15/Nov/2025:20:51:55 +0100] "POST /nodes/140975/comments/2005612/relevance/for HTTP/1.0" 502
              [16/Nov/2025:09:11:10 +0100] "POST /nodes/140975/comments/2005612/relevance/for HTTP/1.0" 200

              [10/Jan/2026:14:50:54 +0100] "POST /nodes/141676/comments/2010504/relevance/for HTTP/1.0" 200
              [10/Jan/2026:18:13:55 +0100] "POST /nodes/141676/comments/2010504/relevance/for HTTP/1.0" 200
              [11/Jan/2026:15:27:49 +0100] "POST /nodes/141676/comments/2010504/relevance/for HTTP/1.0" 502
              [11/Jan/2026:15:27:52 +0100] "POST /nodes/141676/comments/2010504/relevance/for HTTP/1.0" 502 (réessai)

              On a deux timeouts complets sans mise à jour ni Redis ni SQL, seules les deux premières requêtes ont marché et côté Redis et côté SQL -> 3 + 2 = 5 CQFD. (ou alors on a échoué à échouer avec succès). Et on a privé de possibilité de noter quelqu'un deux fois.

              • [^] # Re: Étrange

                Posté par  (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 31 janvier 2026 à 19:38.

                Le cas évoqué initialement dans ce ticket :

                • on est +4 côté redis et +4 côté SQL
                • on fait un +1 côté redis et ça timeout (avant que l'incrément SQL)
                • on retente un +1 côté redis, mais ça ne change rien vu que ce compte a déjà noté ce commentaire. Et on arrête ici (encore avant l'incrément SQL) -> on est donc à +5 redis / +4 SQL
                • on rajoute encore un +1 / +1
                • on finit donc à +6 redis et +5 SQL, ce qui donne bien « Évalué à 7 (+6/-0). »

                Dans le second cas https://linuxfr.org/nodes/140975/comments/200561

                • on est +2 / +2 (après trois +1 et un -1)
                • on fait un +1 côté redis et ça timeout (avant que l'incrément SQL)
                • on rajoute encore un +1 / +1
                • on finit donc à +4 redis et +3 SQL, ce qui donne bien « Évalué à 6 (+5/-1) »

                Dans le troisième cas https://linuxfr.org/nodes/141676/comments/2010504

                • on est +2 / +2
                • on échoue lamentablement et totalement deux fois
                • on finit donc à +2 redis et +2 SQL, ce qui donne bien « Évalué à 5 (+2/-0). »

                Bref faut une transaction si on veut éviter ça (ce qui est vrai partout où on utilise un peu de redis et un peu de SQL). Nb: la situation est même encore plus fourbe car on doit stocker la note côté redis, puis incrémenter/décrémenter côté sql, puis décrémenter le nb de notes du compte notant, et c'est l'ensemble qui devrait être transactionnel si on veut éviter une erreur de 1 tous les vraiment pas souvent et le risque rare d'offrir une note gratuite.

                • [^] # Re: Étrange

                  Posté par  (site web personnel) . Évalué à 3 (+0/-0). Dernière modification le 01 février 2026 à 10:52.

                  Et comme une transaction entre Redis et MariaDB n'est pas possible (ça serait possible si on utilisait uniquement un moteur SQL transactionnel par exemple), on ne pourra pas garantir depuis le code Ruby qu'on va bien pouvoir tout faire ou tout annuler en n'ayant pas de garantie sur le fait que le code Ruby va tourner complètement. Je dirais donc qu'on va accepter un +1 oublié sur deux commentaires par trimestre (soit ~7750 commentaires en moyenne d'après les chiffres de 2025) et les notes complètement oubliées (2 sur ~21860 notes en 3 mois). Un pouième de karma peut être perdu au passage. La petite incohérence des chiffres n'est perceptible que si on connaît la note initiale, et ce pendant les 3 premiers mois. Puis on a juste la note finale et le souci est définitivement masqué.

                  Bref je ferme l'entrée en ayant la satisfaction d'avoir compris, l'insatisfaction d'avoir laissé un petit souci, la satisfaction de la fermeture et l'insatisfaction de l'imperfection suprême absolue ultime.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.