BMA : améliorer les temps de réponse de `/wot/requirements/:search`

A vrai dire, je ne maîtrise pas BMA et ne sait pas bien à quoi corresponds :search en dehors d’une pubkey, c’est un script selon Duniter c’est ça ?

De mon côté je ne connais aucun service utilisant autre chose qu’une pubkey à cet endroit (dans ce que j’ai implémenté comme g1-stats par exemple).

Il faudrait confirmation de @Paidge pour wotwizard-ui mais je pense qu’il ne se base que sur le serveur wot-wizard, qui lui se base uniquement sur les bases de données de Duniter directement et des fichiers tampon.

Ca me semble une bonne idée, ça permet de ne pas casser la compatibilité avec les versions de Cesium et Duniter tout en gardant la possibilité des recherches avancés.
Mais mon humble avis perso est de ne pas t’embêter avec ces recherches avancés qui ne semblent pas implémentés nul part (attendre confirmation de Paidge tout de même), et de simplifié l’API à ce niveau si cela permet des gains en efficacité.

C’est soit une pubkey, soit un uid (ou une partie de).
Ce qui est étrange, c’est que l’implémentation depuis LevelDB n’est plus la même que quand Duniter utilisait SqlLite. LevelDB fait l’équivalent d’un like; sous SQLLite c’était un uid = ? or pubkey = ?
Bref.

Oui, je suis partie dans ce sens là.

1 Like

Après vérification du script de @tuxmain pour la wotmap, il va chercher directement dans "~/.config/duniter/duniter_default/data/leveldb".

Pour wotwizard-ui, c’est effectivement un serveur Wotwizard qui est interrogé. Donc, pas d’impact de ce côté- là :slight_smile:

Même si je ne m’y connais pas tellement côté Duniter, je pense que pouvoir requêter directement sur une clé permettrait sûrement de gagner en temps de réponse (ça me paraît logique en tous cas).

1 Like

Voici une merge request qui implémente donc :

  • /wot/requirements/:search?pubkey=true => recherche uniquement par clef publique
  • tests unitaires : je me suis basé sur ceux testant sur /wot/requirements/:search

Reste à voir les question que j’ai laissé en suspends (utilisant du merge() - cf les 2 TODO dans la merge request)

Perso j’ai jamais utilisé d’API Duniter, sauf dans Datajune où je récupérais uniquement les blocs avec /blockchain/block/000. Par contre sur la v2, je devrais pouvoir répondre à toutes les questions ><.

@kimamila : cette version est maintenant en service sur mon noeud mirroir duniter.pini.fr (cumulée avec la MR précédente).

2 Likes

Tikka est pour Duniter v2S donc pas de soucis pour modifier BMA de mon côté.

Merci @Pini !!
Je viens de tester : on est passé de 30s à 3s sur ton instance :slight_smile: donc gain x10
Sur g1.duniter.org, ont devrait passer à 200ms, ce qui me semble déjà plus acceptable.

3 Likes

Voila, j’ai également fait une MR sur optimisation des /wot/certifiers-of/:search et /wot/certified-by/:search en traitant la présence de ?pubkey : [enh] Optimize BMA `/wot/certifiers-of/:search` and `/wot/certified-by/:search` - Close #1440 (!1423) · Merge requests · nodes / typescript / duniter · GitLab

@Pini si tu as le temps de déployer ca ? (pas urgent, hein). Je penses qu’on aura déjà optimiser la navigation dans les comptes/profiles, dans Cesium.

2 Likes

C’est fait.

2 posts were merged into an existing topic: Débugger Duniter v1

La CI pour cette MR plante sur le job tests :

$ npm run format:check
> duniter@1.9.0-dev format:check /builds/nodes/typescript/duniter
> prettier --list-different 'app/**/*.{ts,json}'
app/lib/dal/indexDAL/leveldb/LevelDBIindex.ts
app/lib/dal/indexDAL/sqlite/SqliteIIndex.ts
app/lib/dal/sqliteDAL/IdentityDAL.ts
app/modules/bma/lib/controllers/wot.ts
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! duniter@1.9.0-dev format:check: `prettier --list-different 'app/**/*.{ts,json}'`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the duniter@1.9.0-dev format:check script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user/.npm/_logs/2023-05-16T14_33_27_147Z-debug.log
Cleaning up project directory and file based variables 00:01
ERROR: Job failed: exit code 1

Ça vous parle ?

Merci @Pini,

oui, c’est moi qui est fait une erreur, en voulant simplifier l’usage du nouveau paramètre ?pubkey. Je voulais éviter de devoir écrire ?pubkey=true, mais du coup j’ai introduit une erreur.

C’est maintenant corrigé.
@cgeek je n’ai pas ajouté grande chose de nouveau, sauf une méthode dans ParamerService pour parser ?pubkey (en gérant la valeur par défaut). Bref, les tests passent, dont j’ai mergé.

Il ne reste plus qu’une MR, de mon côté : [enh] Add config's storage into /node/summary - close #1441 (!1424) · Merge requests · nodes / typescript / duniter · GitLab

ensuite on fait quoi ? Une release de Duniter est-elle envisageable ?

Si possible j’aimerai inclure les deux MR que j’ai en stock :

1 Like

C’est plutôt avec @cgeek qu’il faut voir ça, non ?

D’ailleurs, je crois avoir vu dans le code de la branche “dev” que certaines requêtes BMA sont déléguées au module duniter-gva.
Du coup, je me demande comment cela fonctionne en Duniter 1.8 ? Pour les autres architectures je veux dire.

Je m’adressais implicitement à vous deux :slight_smile:

Je viens de porter en 1.8 la correction du ticket #1439 (Optimize BMA /wot/requirements) : fix(1439): BMA optimize `/tx/requirements/:search` (!1426) · Merge requests · nodes / typescript / duniter · GitLab

@cgeek il n’y a quasiment rien de changé par rapport à la branche dev. Veux tu quand même relire la MR ?

Je vais faire de même pour les autres optimisations de BMA. Mon but étant que l’on puisse produire une 1.8.x corrigée.

EDIT: cette MR fait aussi l’optimisation de /wot/certifiers-of/:search et /wot/certified-by/:search

6 Likes

Je te fais une réponse publique ici : je te laisse décider ou non de merger, et de manière générale de mener les correctifs et évolutions sur Duniter v1.

Je n’ai tout simplement pas le temps et l’énergie de mener ce sujet Duniter v1 en plus de mes activités actuelles. Faites sans moi, éventuellement j’interviendrai si l’occasion se présente.

En plus il y a quand même pas mal de tests automatisés, et puis @Pini et @tuxmain suivent un peu l’affaire.

Au pire en cas de gros problème, rollbackez sur une ancienne version de Duniter.

2 Likes

J’essaye de la regarder dans la semaine, j’ai installé un Raspberry PI 4 donc je peux tester.

1 Like