-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Automatisation et calcul transparent #29
Comments
Les systèmes de CI sont conçus pour repartir de zéro à chaque commit, ils ne sont pas très adaptés à la mise à jour d'une base de données. |
Je n'ai pas mis le nez dans le code, mais a vu de pif on telecharge la derniere tarball de ftp://ftp2.journal-officiel.gouv.fr/ et on genere un nouveau fichier markdown qu'on push ensuite ? Si c'est le cas c'est tout a fait faisable avec les outils existant. |
Mettre à jour automatiquement une BDD nécessite un stockage persistant, sinon ce n'est pas une mise à jour mais une coûteuse recréation permanente. |
Je ne connais que peu les outils de CI, et il avait aussi été question avec Légilibre d’avoir un serveur sur lequel on ferait tourner les outils. Dans tous les cas, Archéo Lex est un peu lourd à faire tourner. Les contraintes sont actuellement :
Ma machine n’est pas hyper puissante, mais il faudrait de toutes manières améliorer la parallélisation du code. Ce qui prend du temps est surtout la création des historiques Git, et c’est surtout du temps processeur, il n’y a pas besoin outre mesure de RAM. Pour paralléliser, il serait simple dans un premier temps de paralléliser sur des codes différents (indépendants). En interne d’un code, il faudrait plutôt créer des caches par sections du sommaire pour ne calculer que les sections modifiées. Sur des outils de CI/build, je ne suis pas sûr de bien comprendre comment l’utiliser dans ce cas, la remarque de @Changaco me semble avoir du sens : il y a 73 codes à calculer, refaire tout le process de téléchargement, extraction du tarball, mise en BDD, export Git est du temps perdu pour rien ; après il est possible de calculer plusieurs codes d’un coup, mais s’il s’agit de jouer à sélectionner les codes en fonction des timeouts ça ne va pas être très drôle. Tu as quelle idée de scénario en tête ? |
Alors si vous ne connaissez pas trop le CI voici l'idee (et mettez vous-y, c'est gratuit ! Le concept = lancer un script pour chaque push recu).
Les build peuvent etre declenches par un simple POST (ou un truc a la cron deja fait pour). |
Ok, par contre étant donné la structure lourde actuelle de Archéo Lex (cf les contraintes ci-dessus), je vois pas trop comment mettre ça en place. Tu confirmes qu’on peut bien pusher un résultat vers l’extérieur de la plateforme de CI ? |
@fenollp C'est vrai que c'est une belle idée, mais elle n'est pas très efficace. Quand la machine qui met à jour les données n'est pas proche du disque dur qui contient la BDD il faut transférer plusieurs gigaoctets de données à travers l'Internet, ce qui ralentit le processus et encombre les tuyaux. Le fait que le CI soit "gratuit" ne signifie pas qu'on peut se permettre de faire n'importe quoi avec (au contraire même, si on veut que ça reste gratuit il ne faut pas en abuser). Ceci dit ça pourrait être intéressant d'essayer avec legi.py pour voir si ça fonctionne et combien de temps ça prend. En ce qui concerne l'aspect confiance, même si le CI permet en effet une bonne transparence et sécurité par défaut, ça reste quand même la machine de quelqu'un d'autre (et probablement hébergée hors de France). Le seul vrai moyen de vérifier que "rien de malfaisant n'a été commis" c'est d'exécuter le programme sur une machine que tu contrôles et de comparer le résultat. En pratique la protection la plus efficace contre l'altération des données est que celle-ci n'a aucun intérêt (en tout cas moi je n'en vois pas). Quand il n'y a pas de gain potentiel il y a peu de malfaiteurs. |
Je fermerai cette issue dans un mois (*) étant donné qu’elle est résolue dans un contexte légèrement différent de la proposition originale : en combinant https://github.com/Legilibre/deploiement (avec un provisionning spécifiquement pour Gandi, j’accepte les PR pour d’autres fournisseurs de VMs) et la récente amélioration d’Archéo Lex qui peut désormais mettre à jour les dépôts Git, il est désormais possible de déployer Archéo Lex littéralement en un script (après un git-clone du dépôt deploiement), la suite dépend de ce qu’on veut (one shot sur qq textes, livraison régulière de qq textes, livraison régulière de tout le corpus législatif français, etc.). (*) @fenollp: si tu veux proposer un déploiement spécifiquement sur des outils de CI, Archéo Lex a désormais la possibilité de calculer les textes d’une liste donnée 07ea750, le reste est affaire de scripts de déploiement (setup legi.py + Archéo Lex, download, BDD, calcul AL, git-push des résultats, cron si on veut). Je te laisse proposer des PR soit sur le dépôt https://github.com/Legilibre/deploiement (il peut y avoir des languages alternatifs à Bourne shell) ou faire un autre dépôt spécifiquement de déploiement, et je ferai un lien de Archéo Lex vers ces dépôts de déploiement. |
+1 pour un CRON via Travis-CI et les dépôts sur GitHub dans une organisation dédiée Update : au temps pour moi, la CI n'est pas forcément une bonne idée. |
Le Bureau Ouvert a envie de bosser sur ce sujet. Du coup on a créé : https://github.com/Legifrance-Git pour stocker les dépôts des textes. Maintenant il faudrait avancer sur un orchestrateur (un simple CRON). Des idées ? |
Je viens de push Legilibre/deploiement@master...fenollp:ci-able
Il manque une dependence vers un client FTP on dirait ? |
@fenollp Ça a l’air pas mal ton commit. Pour l’erreur il manque peut-être
N’hésites pas à faire des PR s’il faut mieux préciser les versions. |
Est-ce que tu peux push un |
Thanks! Il manquait bien
J'ai l'impression que le processing des tar + l'ajout dans la DB devrait pouvoir se faire de maniere concurrente, voire creer plusieurs DB pour les merger a la fin. Peut-etre que d'avoir le fichier sqlite en memoire plutot que sur disque aiderait pas mal deja. C'est tres lent pour juste 2GB de tarballs. |
Je ne suis pas sûr que bloquer les versions des dépendances de legi.py soit une bonne idée, ça peut vite mener à des conflits. C'est le projet à la racine de l'arbre des dépendances qui doit fixer les versions (ou pas), or legi.py peut être une dépendance d'un autre projet donc il n'est pas toujours la racine. |
Le fichier est en mémoire, via le cache du système de fichier maintenu par le noyau (Linux). Il est possible de demander à SQLite de garder le fichier en cache côté userspace mais ça n'accélère pas vraiment le travail (cf. Legilibre/legi.py#21). |
Pour SQLite, tentez avec: Désactiver les synchrone sur le disque:
Désactiver le journal des transactions (qui permet de faire des rollbacks):
Ca devrait bien améliorer les choses, toutefois si il y a un problème (perte de courant) la base sera certainement corrompue. |
Désactiver le journal et la synchronisation est dangereux et n'a pas d'effet sur la première conversion puisque la base de données est vide au début et que l'opération est une seule gigantesque transaction donc il n'y a rien à copier dans le journal et rien à synchroniser. En revanche il est possible que la conversion des archives incrémentales bénéficie de |
Histoire que
Je propose qu'on mette en place une tache cron, ou un outil de Continuous Integration (integration continue).
Il en existe beaucoup de gratuits pour les projets open source.
The text was updated successfully, but these errors were encountered: