Pour le dernier réseau gdev, j’avais rédigé un tutoriel pour démarrer un indexeur : Duniter | Run an indexer
Aujourd’hui j’aimerais avoir des retours pour améliorer ce tutoriel, et si possible des contributions directes.
Quelques modifications :
- utiliser l’image
h30x/duniter-indexer
en attendant que la CI soit validée et les améliorations mergées dansmaster
- vérifier la présence du network
default
dans ledocker-compose.yml
(cf Mise en production de l'indexeur, j’ai mis à jour la doc)
Avec les insertions par batch, l’indexeur devrait être beaucoup plus rapide à démarrer. Les logs sont écrits dans un fichier dédié dans le volume logs
. On y voit notamment
- les événements non pris en charge
# Unhandled event: account.AccountLinked
{"level":40,"time":1700575226062,"pid":1,"hostname":"d1bb47d605b6","msg":"[30801] Unhandled event: account.AccountLinked"}
- les erreurs
# ici l'indexeur tente d'ajouter la transaction avant le nouveau compte, c'est un bug
{"level":50,"time":1700572081106,"pid":1,"hostname":"d1bb47d605b6","err":{"type":"PostgresError","message":"insert or update on table \"transaction\" violates foreign key constraint \"transaction_receiver_id_fkey\"","stack":"PostgresError: insert or update on table \"transaction\" violates foreign key constraint \"transaction_receiver_id_fkey\"\n at ErrorResponse (file:///node_modules/postgres/src/connection.js:790:26)\n at handle (file:///node_modules/postgres/src/connection.js:476:6)\n at Socket.data (file:///node_modules/postgres/src/connection.js:315:9)\n at Socket.emit (node:events:517:28)\n at addChunk (node:internal/streams/readable:335:12)\n at readableAddChunk (node:internal/streams/readable:308:9)\n at Readable.push (node:internal/streams/readable:245:10)\n at TCP.onStreamRead (node:internal/stream_base_commons:190:23)\n at new Query (file:///node_modules/postgres/src/query.js:35:9)\n at Object.sql (file:///node_modules/postgres/src/index.js:112:11)\n at EventEmitter.<anonymous> (file:///build/assets/transaction-21260075.mjs:13:22)\n at EventEmitter.emit (node:events:517:28)\n at processBlock (file:///build/assets/start-indexer-e0d1da9f.mjs:220:26)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async indexBlocks (file:///build/assets/start-indexer-e0d1da9f.mjs:289:15)\n at async file:///build/assets/start-indexer-e0d1da9f.mjs:346:7","name":"PostgresError","severity_local":"ERROR","severity":"ERROR","code":"23503","detail":"Key (receiver_pubkey)=(5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz) is not present in table \"account\".","schema_name":"public","table_name":"transaction","constraint_name":"transaction_receiver_id_fkey","file":"ri_triggers.c","line":"2463","routine":"ri_ReportViolation","query":"INSERT INTO transaction (\"issuer_pubkey\",\"receiver_pubkey\",\"amount\",\"created_at\",\"created_on\")values($1,$2,$3,$4,$5)","parameters":["5DSF5HxiQvy2xJdtdtMSPYZdSoLAsGDxzJaifiAfAByinrH4","5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz","5000","2023-11-21T13:07:48.002Z","30277"],"args":[{"first":{"issuer_pubkey":"5DSF5HxiQvy2xJdtdtMSPYZdSoLAsGDxzJaifiAfAByinrH4","receiver_pubkey":"5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz","amount":5000,"created_at":"2023-11-21T13:07:48.002Z","created_on":30277},"rest":[]}],"types":[25,25,700,1184,23]},"msg":"insert or update on table \"transaction\" violates foreign key constraint \"transaction_receiver_id_fkey\""}
{"level":40,"time":1700572081107,"pid":1,"hostname":"d1bb47d605b6","msg":"[30277] Insert account 5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz"}
Pour info les logs
relation "parameters" does not exist
signifient qu’un nouveau bloc est finalisé sur le réseau mais que l’indexeur n’a pas encore fini d’indexer le genesis
et les logs
Already indexing.
signifient qu’un nouveau bloc est finalisé sur le réseau mais que l’indexeur est en train de rattraper son retard.