Cohérence des données de Duniter V1 avant migration

Suite au message de @HugoTrentesaux sur l’incohérence des données lors de l’utilisation de py-g1-migrator, et pour l’aider à avancer, j’ai écrit un petit code Python 3.10 pour vérifier la cohérence des bases de données levelDB.

Le code utilise 3 tables levelDB :

  • iindex (identités)
  • mindex (adhésions)
  • cindex (certifications)

Je fais un simple rsync du dossier leveldb de mon serveur Duniter V1 pendant qu’il tourne pour éviter de le stopper, pour copier le dossier dans le dépôt de mon code.
Puis je lance mon script.

  • Pour une identité membre, je vérifie que l’adhésion est valide et qu’il existe bien 5 certifications valides.
  • Pour une identité non membre, je vérifie que l’adhésion soit perdue ou le manque de certifications.

Pour l’instant, il ne détecte aucune incohérence sur les adhésions…(pourtant le rsync sale sur une DB en cours d’accès pourrait être une source d’incohérences). Mais je ne suis pas à l’abri d’une erreur dans mon script.

Au début, j’avais des incohérences mais en vérifiant dans Wotwizard-UI (ma source de vérité ! ), c’était parce que je m’y prenais mal pour gérer les listes d’identités, d’adhésions et de certifications (CREATE/UPDATE).

Si des Pythonistas pensent que ce modeste travail est utile et veulent bien tester et relire mon code de leur côté pour bien confirmer mon diagnostic, je peux le publier sur le Gitlab. @Moul, @tuxmain ?

3 Likes

Le code est disponible sur le Gitlab, suite aux likes :

Réflexion à voix haute : si la base SQLite de Duniter est la réplique de la base LevelDB, et que cette réplique n’a pas fait apparaître d’incohérences non plus malgré le travail en profondeur de @gerard94 sur Wotwizard, alors il y a de fortes chances que le problème se trouve dans le code de dex. A vérifier…