Dunipod v0.16.0: correctifs pour Gecko et Cesium

Une nouvelle version de Dunipod est disponible !

J’invite tous ceux qui hébergent une instance Dunipod à la mettre à jour :

cd dunipod
git checkout v0.16.0
sudo deploy/dunipodctl upgrade

Pour une première installation :

git clone https://git.duniter.org/nodes/rust/dunipod.git
cd dunipod
git checkout v0.16.0
cp deploy/compose.env.example deploy/.env
sed -i 's/pod.example.org/VOTRE_DOMAINE/' deploy/.env
sudo deploy/dunipodctl install

Cette nouvelle version corrige plusieurs bugs découverts lors de l’intégration de Dunipod dans des versions de développement de Gecko et Cesium.

D’ailleurs, je tiens à remercier @Chiara07 pour son travail en cours sur l’intégration de Dunipod dans Gecko, qui a permis de découvrir plusieurs bugs.

Liste des changements depuis la v0.14.0:

  • !16 Corrige les historiques de transactions et de DU, les relations des appels groupés et la recherche d’identités ; automatise les resynchronisations nécessaires lors des mises à jour gérées.
  • !17 Ajoute une pagination chronologique efficace pour les identités et les certifications actives.
  • !18 Inclut les certifications importées à la genèse de manière cohérente dans les listes et les compteurs.
  • !19 Permet de filtrer les identités selon leur historique d’adhésion, avec des totaux exacts et une erreur explicite si cet historique est indisponible.
  • !20 Maintient le noeud Duniter intégré en activité lors des mises à jour sans changement de sa configuration ni de son image, et exige sa sortie du groupe des validateurs actifs avant toute interruption.
  • !21 Ajoute des sauvegardes à chaud cohérentes de la base et des fichiers, une restauration vérifiée et un stockage durable des fichiers.
  • !22 Refuse les décalages non pris en charge dans l’historique du portefeuille au lieu de répéter les pages ; les applications doivent utiliser les curseurs.
  • !23 Distingue les erreurs de limite WebSocket par client de celles liées à la saturation globale du service.
  • !24 Permet de paginer les transactions entrantes et sortantes d’un compte sur un intervalle de blocs.
  • !25 Permet de retrouver les bornes exactes en blocs d’une période définie par des dates.
  • !26 Ajoute des listes efficaces d’identités filtrées par statut exact ou par intervalle de création au sein d’un groupe de membres ou de non-membres.
  • !27 Permet de lister toutes les certifications par ordre de mise à jour et de les filtrer par émetteur ou destinataire.
  • !28 Corrige les compteurs de transactions entrantes et sortantes après l’import de la genèse et les maintient à jour.
  • !29 Ajoute la recherche côté serveur dans les transactions par montant, commentaire et contrepartie, avec des limites de coût explicites et sans pages de résultats partielles.
  • !30 Expose des délais de nouvelle tentative en millisecondes et des en-têtes de quota accessibles aux navigateurs.
  • !31 Transmet les nouveaux événements de certification aux abonnements des deux comptes concernés, y compris lors des suppressions.
  • !32 Garantit les identifiants GraphQL obligatoires et les hauteurs de création des identités, et clarifie les changements de clé propriétaire ; réimporter les nouvelles genèses exige une base vierge.
  • !33 Accélère la pagination des certifications par date de création, même loin dans l’historique, sans ajouter d’index supplémentaire.
  • !34 Ajoute la recherche des transactions dans les deux sens avec une contrepartie et par commentaire exact, en tenant compte des blocs non finalisés et de leurs rétractions.
  • !35 Expose la version du pod séparément de celle du contrat GraphQL pour faciliter les vérifications de compatibilité des applications.
  • !36 Accepte davantage de requêtes GraphQL légères simultanées dans le budget mémoire, avec une limite de quatre requêtes actives par adresse IP.
  • !37 Accélère la recherche de profils par nom et rejette les émetteurs invalides lors des imports historiques, sans réimporter les documents existants.
  • !38 Renvoie le hash canonique du bloc de genèse pour que les applications reconnaissent les pods valides, et répare automatiquement les bases existantes.
  • !39 Corrige et accélère les requêtes Cesium sur les historiques, l’annuaire, les blocs et les certifications ; ajoute les requêtes sur les candidats à l’adhésion et les réévaluations réelles du DU.

@vit @vjrj @Nicolas80 @kapis Comme discuté lors du dernier Development Talk, nous souhaitons décommissionner Squid. Toutes les applications qui utilisent Squid doivent donc migrer vers Dunipod.

J’ai ouvert (ou mis à jour) une issue dédiée pour chaque application :

C’est le bon moment pour commencer à travailler sur la migration Squid → Dunipod dans vos applications. Vous découvrirez peut-être quelques bugs côté Dunipod ; n’hésitez pas à ouvrir des issues sur le dépôt Dunipod :


@vit @vjrj @Nicolas80 @kapis As discussed during the last Development Talk, we would like to decommission Squid. Therefore, all applications currently using Squid need to migrate to Dunipod.

I have opened (or updated) a dedicated issue for each application:

Now is a good time to start working on the Squid → Dunipod migration in your applications. You may discover a few bugs on the Dunipod side, so please feel free to open issues in the Dunipod repository:

je reprend mes travaux sur gecko, maintenant qu’on a une nouvelle version.

Merci beaucoup @Chiara07 pour ce boulot, c’est très précieux comme quantité, qualité, et réactivité de retour, et même inédit dans l’histoire du projet à mon avis !

[FR]
Un grand merci pour ce ticket très détaillé, @elois. Je m’y mettrai dès que j’aurai un peu de temps libre.

Je dois réfléchir et clarifier un peu plus la manière de procéder en termes de migration, ou comment m’organiser dans une autre branche pour cela.

Je suppose que vous y avez déjà réfléchi et que vous en avez déjà discuté, mais j’aimerais que cela soit aussi transparent que possible pour les utilisateurs. Autrement dit, nous fonctionnons pendant un certain temps à la fois avec Squid et Dunipod ; nous avertissons les utilisateurs via les applications qu’ils doivent effectuer une mise à jour s’ils utilisent encore une ancienne version, à l’aide d’une bannière, et à un moment donné, lorsque cela nous semblera opportun, les nœuds Squid cesseront de fonctionner. Si vous n’avez pas mis à jour votre application sur votre mobile, etc., eh bien, nous vous aurons prévenus.

Ce que j’ai fait pour passer de la v1 à la v2, c’est une abstraction :

abstract class DuniterService
class DuniterServiceV2 implements DuniterService
class DuniterServiceV1 implements DuniterService

ce qui permet d’utiliser l’une ou l’autre sans trop de problèmes. Serait-il possible de faire quelque chose de similaire pour les autres clients, ou est-ce trop compliqué et vaut-il mieux simplement créer une branche compatible uniquement avec Dunipod et qui ignore tout de Squid ?

[ES]
Mil gracias por la issue tan detallada @elois. Me pondré con ello enseguida que encuentre tiempo libre.

Tengo que pensar y aclararme un poco más como hacerlo en terminos de migración, o como organizerme en otra branch para esto.

Supongo que ya lo habréis pensado y hablado, pero me gustaría que fuera algo todo lo transparente para los usuarios a poder ser. Es decir, estamos un tiempo funcionando con ambas cosas squid y dunipod, se va avisando en las apps que se actualice si están usando una version antigua todavía con algún banner, y en cierto momento que nos parezca oportuno, los nodos squid dejan de funcionar y si no has actualizado tu app en tu movil, etc, pues ya habíamos avisado.

Yo lo que hice para v1 → v2 fue una abstracion

abstract class DuniterService
class DuniterServiceV2 implements DuniterService
class DuniterServiceV1 implements DuniterService
y así poder usar uno u otro sin mucho drama. Se podría hacer algo así tb en el resto de clientes o es mucho lío y es más fácil simplemente hacer una rama solo compatible con dunipod y que no sepa de squid?

Serait-il possible de faire quelque chose de similaire pour les autres clients, ou est-ce trop compliqué et vaut-il mieux simplement créer une branche compatible uniquement avec Dunipod et qui ignore tout de Squid ?

@vjrj Nous en avons discuté lors du dernier Development Talk. Le consensus est plutôt de recommander de ne supporter que Dunipod dès la prochaine version de chaque application.

Sur Cesium², je vais basculer directement sur le support de Dunipod uniquement dans la prochaine version.

Nous allons attendre que toutes les applications aient une mise à jour stable disponible sur toutes leurs plateformes avant d’éteindre les nœuds Squid, mais nous souhaitons faire cela dès que possible. Donc, dès que votre application avec le support de Dunipod est disponible en version stable, il faut annoncer à tous les utilisateurs que la migration est obligatoire pour bénéficier de l’expérience enrichie.

Les applications sont censées pouvoir fonctionner sans Squid ni Dunipod. Les indexeurs Squid/Dunipod ne doivent servir qu’à rendre l’expérience plus confortable : historique du compte, noms on-chain des portefeuilles membres, liste des certifications émises, etc.

Mais les fonctionnalités essentielles sont censées déjà fonctionner sans Squid ni Dunipod : consulter son solde, réaliser un transfert, réaliser une certification, renouveler son adhésion.


Lo hablamos durante el último Development Talk. El consenso es más bien recomendar que, a partir de la próxima versión de cada aplicación, solo se dé soporte a Dunipod.

En Cesium², voy a pasar directamente a dar soporte únicamente a Dunipod en la próxima versión.

Vamos a esperar a que todas las aplicaciones tengan disponible una actualización estable en todas sus plataformas antes de apagar los nodos Squid, pero queremos hacerlo lo antes posible. Por tanto, en cuanto vuestra aplicación con soporte para Dunipod esté disponible en una versión estable, habrá que anunciar a todos los usuarios que la migración es obligatoria para poder beneficiarse de la experiencia mejorada.

Se supone que las aplicaciones deben poder funcionar sin Squid ni Dunipod. Los indexadores Squid/Dunipod solo deben servir para hacer la experiencia más cómoda: historial de la cuenta, nombres on-chain de las carteras de los miembros, lista de certificaciones emitidas, etc.

Sin embargo, las funcionalidades esenciales ya deberían funcionar sin Squid ni Dunipod: consultar el saldo, realizar una transferencia, emitir una certificación y renovar la adhesión.

I’ll do ASAP!

@elois

point des travaux sur gecko: