Modifie la structure du dossier d’archivage des fichiers importés
Motivation
Maintenant qu'on accumule toutes les versions importées dans le dossier archive
, on récupère plus de choses que nécessaire via rsync lorsqu’on fait un make fetch
ou un make bootstrap
, localement ou bien dans le job non-regression
sur la CI.
Contenu
La structure du dossier archive
est maintenant la suivante :
archive/
├── dataset1/
│ ├── 2023-06-14_08-22-47/
│ │ └── fichier.csv
│ ├── 2023-06-15_11-55-28/
│ │ └── fichier.csv
│ └── latest → 2023-06-15_11-55-28
└── dataset2/
├── ...
Dans le répertoire archive
, on crée un sous-répertoire pour le jeu de données,
avec le nom de la table SQL.
Dans ce répertoire, on crée un sous-répertoire avec le timestamp de l’import.
On copie le fichier importé vers ce sous-répertoire, sans changer son nom.
Pour économiser de l’espace disque, si le fichier est le même qu’un fichier importé précédemment, on crée un hard-link vers celui-ci.
Enfin, on fait pointer le lien symbolique latest
vers le répertoire d’import.
Autres approches envisagées
J’ai d’abord essayé de modifier le Makefile
pour déterminer de manière plus intelligente la liste des fichiers à récupérer, en listant le plus récent dans chaque sous-répertoire. cf. !432 (closed)
Je suis parvenu à un truc qui marche en local, mais assez illisible dans son imbrication de syntaxe Makefile, bash, et les multiples niveaux d’échappement nécessaire.
Un des problèmes rencontrés était que les fichiers récupérés ayant un timestamp, il fallait le retirer pour qu’insitu les reconnaisse. (Mais les plus anciens n’en avaient pas. J’ai donc homogénéisé les choses sur le serveur.)
J’ai aussi galéré à le faire marcher sur la CI, puisque la clé SSH que l’on utilise pour accéder au serveur est (à raison) restreinte à l’exécution de rsync uniquement. J’ai tenté d’ajouter une 2e clé pour la commande d’identification des fichiers, mais j’avais encore des erreurs, et j’ai fini par décidé d’arrêter de creuser ce trou, de dormir dessus, et d’essayer une autre approche.