Problème de fork non resolu sur un noeud : Bug d'exclusion 2, le retour?

Salut salut, c’est le serial testeur qui revient !

Mon noeud n’arrivant pas à résoudre un fork tout seul, plutôt que de le resynchroniser, j’ai décidé de tenter de lui forcer la résolution à la main (on s’occupe comme on peut un vendredi soir :frowning: ). Précision : le fork était trop ancien et donc mon noeud en-dehors de la fenêtre de fork.

Mais là, GROSS MALHEUR à ma banane : ruleToBeKickedArePresent

2019-12-13T22:43:00+01:00 - info: Block resolution: 1 potential blocks after current#279623...
2019-12-13T22:43:00+01:00 - error:  Error: ruleToBeKickedArePresent
    at Function.checkBlock (/opt/duniter/app/lib/blockchain/DuniterBlockchain.js:179:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
2019-12-13T22:43:00+01:00 - info: Fork resolution: 101 potential block(s) found...
2019-12-13T22:43:01+01:00 - debug: Suite #279626-000002C2 -> 279726-00000373 out of fork window
2019-12-13T22:43:01+01:00 - debug: Suite #279625-00000429 -> 279725-00000025 out of fork window
2019-12-13T22:43:01+01:00 - debug: Suite #279624-00000472 -> 279724-000003FA out of fork window
2019-12-13T22:43:02+01:00 - info: Fork resolution: 3 potential suite(s) found...
2019-12-13T22:43:02+01:00 - info: Fork resolution: HEAD = block#279623
2019-12-13T22:43:02+01:00 - info: Fork resolution: suite 1/3 (-> #279723-000004) revert to fork point block#279623
2019-12-13T22:43:02+01:00 - info: Fork resolution: suite 1/3 REFUSED block#279624: ruleToBeKickedArePresent
2019-12-13T22:43:02+01:00 - info: Fork resolution: suite 2/3 (-> #279698-000002) revert to fork point block#279623
2019-12-13T22:43:03+01:00 - info: Fork resolution: suite 2/3 REFUSED block#279624: ruleToBeKickedArePresent
2019-12-13T22:43:03+01:00 - info: Fork resolution: suite 3/3 (-> #279677-000001) revert to fork point block#279623
2019-12-13T22:43:03+01:00 - info: Fork resolution: suite 3/3 REFUSED block#279624: ruleToBeKickedArePresent

… Comment ça, ma banane ? Le bloc 279624 serait acepté par les autres noeuds, mais pas par toi ! Allons donc !

On va donc voir ce que le forum en dit :

ruleToBeKickedArePresent à cause d’une exclusion mal gérée ? :thinking: allons donc voir si le fameux bloc 279624 a une exclusion… Et oui !

J’en conclus, peut-être de façon péremptoire, que le bug relevé par @cgeek lors de l’incident pré-cité n’a pas été totalement résolu, et qu’il bloque la résolution de fork sur mon noeud. Ceci mérite sans doute une étude plus approfondie.

Evidemment, je ne resynchronise pas mon noeud pour le moment.


J’observe un autre incident du même type :

bloc 232587 : fork le 27 juin 2019, contient un excluded. signalé par @elois et non résolu.


edit - une idée en l’air : et si le bug de block refusé à cause d’une exclusion avait été corrigé par Cgeek pour la synchro seulement, mais pas lors de la résolution des forks ? Du coup :

  • Si le noeud est sur la bonne branche, tout se passe bien,
  • Si le noeud est sur la mauvaise branche et qu’il n’y a pas d’exclusion sur la majoritaire, tout se passe bien,
  • Mais si le noeud est sur la mauvaise branche et que la bonne branche a un excluded, alors la résolution de fork foire ?

edit - en lisant le post de cgeek, je vois que c’est un peu plus complexe que seulement une identité exclue. Mais les identités dont il est question pour les forks dont je parle n’ont pas été exclues une première fois, c’est leur première exclusion lors du fork non résolu. Donc le présent bug et celui soulevé par cgeek sont vraisemblablement indépendants.

Comme le réflexe est de resynchroniser quand un noeud est désynchro, que les forks sont courts, et qu’il n’y a pas trop d’exclusions pour le moment, un tel bug pourrait passer inapperçu assez longtemps ?

4 J'aimes

Tu peux déjà faire une sauvegarde de ton dossier duniter_default (en retirant le fichier keyring.yml) afin de conserver une copie pour reproduire l’anomalie à l’aide d’un débogueur.

Il faudrait juste que tu partages cette sauvegarde pour que j’y jette un œil.

5 J'aimes

La voici !

https://lufi.axiom-team.fr/r/ExHr0y_cnZ#AHIuMwwfkP5H3BP1WnJiYGzxm/8+8abNoY4wCcS10/Y=

Et je remets mon noeud en action :wink:

Pour vérifier, avant de resynchroniser votre noeud la prochaine fois, faites un petit

duniter logs | grep "REFUSED block"

et regardez si le bloc indiqué contient, ou non, un membre exclu.

3 J'aimes

À vérifier, mais il y a de très grandes chances que le bug soit lié au cas GerardSiegle.