[feat] gva: TxsByTime DB
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
Activity
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 :/
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 !
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
etblocks
:)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