Prototype de GVA

A tu testé préalablement ta requête sur le playground puis avec curl ?

Je te vois dans les log de nginx mais pas dans les log de Duniter. Nginx bloque tes requêtes, peut être parce qu’il manque un body ? Essaye une requete (par exemple le montant du DU):

*.*.*.219 - - [10/Nov/2020:16:44:32 +0000] "POST //gva HTTP/1.1" 500 21 "-" "Python/3.6 aiohttp/3.7.2"
*.*.*.219 - - [10/Nov/2020:16:44:59 +0000] "POST /gva HTTP/1.1" 400 54 "-" "Python/3.6 aiohttp/3.7.2"
*.*.*.219 - - [10/Nov/2020:16:48:17 +0000] "POST /gva HTTP/1.1" 200 38 "-" "curl/7.58.0"
*.*.*.219 - - [10/Nov/2020:16:48:24 +0000] "POST /gva HTTP/1.1" 200 38 "-" "curl/7.58.0"
*.*.*.219 - - [10/Nov/2020:16:53:14 +0000] "POST /gva HTTP/1.1" 400 56 "-" "curl/7.58.0"
*.*.*.219 - - [10/Nov/2020:17:00:06 +0000] "POST /gva HTTP/1.1" 400 56 "-" "Python/3.6 aiohttp/3.7.2"

Bon, je réussi maintenant à faire des requêtes graphQL sur swapi (la base de données Star Wars) comme avant.

Je reviens donc sur ton serveur et là j’ai un 500 INTERNAL_SERVER_ERROR !

On progresse… Je pense que j’ai passé ngynx et que je tape Rust maintenant !

*.*.*.219 - - [10/Nov/2020:19:06:10 +0000] "POST //gva HTTP/1.1" 500 21 "-" "Python/3.6 aiohttp/3.7.2"
*.*.*.219 - - [10/Nov/2020:19:06:36 +0000] "POST //gva HTTP/1.1" 500 21 "-" "Python/3.6 aiohttp/3.7.2"

@vit c’est parce que tu contacte un endpoint invalide, le path doit être /gva et pas //gva, peut-être un problème d’échappement de string

Ah merci ! Oui, un petit bug dans DuniterPy avec le path…

Maintenant ton serveur ne comprend pas mon content-type on dirait :

Unknown content-type « application/json; charset=utf-8 »

Utilise «application/json» uniquement :slight_smile:

1 Like

Aujourd’hui j’ai travaillé sur :

  • La configurabilité de GVA (uniquement via le fichier conf.json pour le moment)
  • La création de la doc de configuration de gva
  • La génération des endpoint GVA et leur ajout dans la fiche de peer
  • La récupération de la fiche de peer du nœud via GVA:

J’ai gardé les mêmes conventions que pour les autres types d’endpoint à une différence près : la couche TLS est explicitée par un S. Cela permettra à ceux qui le souhaitent de pouvoir fournir un endpoint sécurisé sur un autre port que 443 (via l’option remoteTls, voir doc).

Maintenant j’aurais besoin qu’un ou deux d’entre vous essayent de mettre en place un serveur GVA, voici comment faire :

  1. Compilez manuellement Duniter sur la branche gva-proto-2
  2. Indexez la db de GVA, 2 méthodes possibles :
    A. Avec la commande dex migrate (nécessite de compiler le binaire dex au préalable). L’indexation prend environ 2 minutes ce qui est bien plus rapide que de resynchroniser Duniter, donc même en comptant le temps de compilation de dex cette méthode devrait rester plus rapide.
    B. Vous pouvez aussi resynchroniser Duniter avec l’option --gva (duniter sync --gva g1.duniter.org) mais cette méthode est plus longue forcément
  3. Configurez GVA en modifiant directement le fichier conf.json, voici ma conf par exemple :
{
  ...,
  "gva": {
    "host": "localhost",
    "port": 30901,
    "path": "gva",
    "subscriptionsPath": "gva-sub",
    "remoteHost": "g1.librelois.fr",
    "remotePort": 443
  }
}
  1. Lancez votre nœud duniter avec l’option --gva (nécessaire car gva est encore désactivée par défaut) : duniter start --gva
  2. Ouvrez l’url http://localhost:30901/gva dans votre navigateur (ou l’url adaptée a votre configuration le cas échéant).
  3. Faite moi un retour

Merci :slight_smile:

5 Likes

De mon côté je suis charette sur des fins de projet pour mon boulot. Donc pas eu le temps d’avancer sur Cesium2…
Ne t’excuses pas @elois :-).
Concernant la mauvaise nouvelle que tu annonce, je ne sais pas trop quoi te dire…
Saches en tous cas que cela me touche pour toi. La vie est vraiment quelque chose de fragile… et reste pour moi un mystère.

4 Likes

Du coup j’ai pu le compiler, j’ai bien accès à l’interface web GVA, mais :

  • dex migrate a pris environ 10 minutes après avoir affiché le dernier message « Apply chunk » sans rien dire, à écrire à 16 Mo/s dans le disque. Ça serait bien d’ajouter un message pour qu’on ne se dise pas que ça a planté. (oui j’avais oublié de le copier dans la RAM)
  • L’option --home PATH place le dossier de duniter à ~/.config/duniter/PATH apparemment, donc j’ai mis longtemps à comprendre pourquoi avec --home /dev/shm/duniter rien ne marchait (sauf l’interface web GVA, mais les requêtes renvoyaient des résultats vides), jusqu’à voir que tout était dans ~/.config/duniter/dev/shm/duniter
2 Likes

Chez moi ça prend 1m39s en tout, et que quelques secondes après le log du dernier chunk.
Tu es le premier à tester sled sur HDD (je n’ai que des SSD depuis des années, donc je ne pouvais pas tester).
sled est optimisé pour les SSD, mais je ne pensais pas que les perfs seraient si mauvaises sur HDD, je suis en train de regarder du côté de RocksDb mais c’est aussi optimisé pour SSD donc ce sera peut-être pareil, on verra à l’expérience. En vrai je pense que quel que soit le sgdb choisi les HDD sont de toute façon beaucoup trop lent pour le type de traitement que Duniter doit faire (indexation en particulier).

Il y a déjà un message de succès à la fin. Je viens d’ajouter un message intermédiaire pour le flush.

Ça ce n’est pas normal, je viens de vérifier dans le code et l’option --home est codée pour se comporter comme un home absolu, c’est avec le binaire dex ou duniter que tu as eu ce souci ? Que j’essaye de reproduire ! EDIT: bug trouvé et corrigé :slight_smile:

Et du coup ça y ai ton playground GVA fonctionne ? Une screen ?

2 Likes

Yes ça marche maintenant !

Par contre la commande logs ne sort rien, mais le fichier duniter.log est bien alimenté.

3 Likes

Penses-tu que je puisse implémenter le endpoint GVA au format définit dans WS2P v2 ou bien tu vas faire un ajout à WS2P V1 ?

Bref j’ai besoin du format du endpoint GVA genre « GVA hostname ipv4 ipv6 path » pour DuniterPy… si tu l’as…

Le endpoint GVA est normalement déjà ajouté à la fiche de peer relayée par WS2Pv1, d’ailleurs si tu regardes les fiches de peer sur le réseau tu vois les 3 nœuds GVA : https://g1.elo.tf/network/peers

Je l’ai déjà indiqué dans le message #14 que tu à lu puisse que tu l’a liké :wink:

2 Likes

Du nouveau sur GVA, le fruit des dev de la semaine :

  1. Ajout query genComplexTx pour générer des transactions plus complexes
  2. Correction d’un bug sur l’indexation gva de la g1-test.
  3. Ajout de la commande duniter wizard gva pour configurer gva. L’option --gva n’existe plus, il vous suffit d’activer gva dans la conf une bonne fois pour toutes et c’est bon :grinning:
  4. Possibilité d’écouter sur une ipv6
  5. Ajout de la requête balance, pour avoir le solde d’un compte :

EDIT: pour profiter de la requête balance il faut ré-indexer GVA, pour cela supprimer les bases sled puis faites un dex migrate :

rm -rf .config/duniter/duniter_default/data/*_sled
dex migrate
4 Likes

En faisant:

git fetch && ./bin/duniter stop && git reset --hard origin/gva-proto-2 && cargo xtask build --production && ./bin/duniter webstart

Pas de soucis puis:

rm -rf .config/duniter/duniter_default/data/*_sled
ok
Mais:
./target/release/dex migrate
Donne pour résultat:

[...]
Apply chunk #69750-#69999 ..
Apply chunk #70000-#70249 ..
Apply chunk #70250-#70499 ..
Apply chunk #70500-#70749 ..
Apply chunk #70750-#70999 ..
Apply chunk #71000-#71249 ..
Apply chunk #71250-#71499 ..
Apply chunk #71500-#71749 ..
Apply chunk #71750-#71999 ..
Error: DB corrupted:Not found origin tx of uxto B28939C91BBB386AD00B53566FFE73B250CE0982287CB1068FD119473D28B6F0:0
$ ./target/release/dex --version
duniter-dbex 0.1.0

Je suis sur la ḠTest.

Normal tu n’a pas recompilé dex, un binaire n’à pas le pouvoir magique de se maj tout seul :wink:

1 Like

Mieux …

Apply chunk #664500-#664749 ..
Apply chunk #664750-#664999 ..
Apply chunk #665000-#665155 ..
Flush DBs caches on disk...
Migration successfully completed on 458 seconds.

Je savais pas que tu avais fait des modifs à dex c’est pour ça

1 Like

En fait je n’ai pas fait de modif à dex mais dex utilise en très grande partie le même code Rust que Duniter, notamment le code d’indexation de GVA est le même donc quand ce code change il faut recompiler dex aussi.

2 Likes

Tu as changé le champs genTxs en genTx aussi ?

Ha oui je trouvais ça plus logique. C’est aussi pour être consistant avec genComplexTx :slight_smile:

2 Likes

Rapide GVA !

4 Likes