Skip to content
Snippets Groups Projects

[feat] gva: TxsByTime DB

Closed Pascal Engélibert requested to merge tuxmain/duniter:gva-txs_by_time into dev
2 unresolved threads

Add TxsByTime DB to GVA.

@librelois Dans apply_block_txs, est-ce qu'il faut générer le Vec<Hash> avant la closure, pour bloquer la db pendant moins longtemps ?

Dans revert_block, est-ce que c'est une perte de temps d'appeler remove même s'il n'y a pas de transaction à supprimer ?

Aussi je pense qu'il faudrait tester revert_block...

Merge request reports

Merge request pipeline #11201 passed

Merge request pipeline passed for f1300928

Test coverage 69.55% from 1 job

Closed by ÉloïsÉloïs 4 years ago (Mar 13, 2021 7:31pm UTC)

Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
    • Dans apply_block_txs, est-ce qu'il faut générer le Vec avant la closure, pour bloquer la db pendant moins longtemps ?

      Non car en réalité la DB n'est pas bloquée dans la closure. Tout est écrit dans un cache, la DB n'est réellement bloquée que lors du commit qui se fait après l'exécution de la closure si elle retourne Ok.

      Dans revert_block, est-ce que c'est une perte de temps d'appeler remove même s'il n'y a pas de transaction à supprimer ?

      Non ce n'est pas une perte de temps. En tout cas ce serait moins performant d'appeler contains_key au préalable car ça ferai 2 appels DB au lieu d'un seul. La DB est suffisamment intelligente pour ne rien faire si le remove indique une clé qui n'existe pas :)

      Aussi je pense qu'il faudrait tester revert_block...

      Oui il faudrait, j'avais prévu de le faire à l'époque, mais entre une TODO liste trop longues et d'autres projets, je n'ai pas trouvé le temps :/

    • Du coup je fais le test de revert_block dans cette MR ou je sépare ?

    • Please register or sign in to reply
  • Éloïs
    Éloïs @librelois started a thread on the diff
126 133 &mut gva_identities,
127 134 )?;
128 135 }
136 txs_by_time.remove(U64BE(block.common_time()));
  • Il faudrait placer ça dans le bloc de code lié aux transactions, sinon ça va vite devenir le bordel. En fais je me rend compte que je doit retravailler cette partie car déjà il y a plusieurs transactions d'écritures au lieu d'une, à toi de voir si tu te sent de refactorer ça ou si tu préfère attendre que je le fasse !

  • L'objectif c'est de ne faire qu'une seule transaction, donc que les fonctions comme tx::apply_tx et tx::revert_tx écrivent dans des variables temporaires plutôt que dans la db ? ou qu'elles soient appelées dans la closure de la transaction ?

  • Please register or sign in to reply
  • @tuxmain,

    En reviewant ta MR je me suis rendu compte que cette partie de mon code n'était pas correcte. Je faisais plusieurs petites transactions d'écriture au lieu d'une seule. Je viens de corriger ça, mais ça m'a obligé à refactorer complètement cette partie :)

    Aussi , j'ai re-réféchi à ton besoin, et je pense finalement que créer une collection txs_by_time n'est pas la bonne approche.

    Il faudrait à la place créer 2 collections dans la DB GvaV1:

    • blocks_by_common_time (U64BE, u32)
    • txs_by_block (U32BE, Vec<Hash>)

    C'est plus propre d'indexer tout par bloc, et puis ça permettra de fournir les transactions dans les requêtes gva blockByNumber et blocks :)

    Je te propose de clôturer cette MR et d'en refaire ure autre de zéro, ça te fera moins de boulot que d'essayer de gérer les conflits :)

    Edited by Éloïs
  • closed

  • Please register or sign in to reply
    Loading