| 27 | |
| 28 | == Sauvegarde automatique des sources == |
| 29 | |
| 30 | Cette fonctionnalité est pour l'instant désactivé dans libIGCM. |
| 31 | |
| 32 | === La sauvegarde en cours de production === |
| 33 | Le nouveau script libIGCM !SaveSourceModifications.job est lancé sur la frontale de la |
| 34 | machine de calcul, via la fonction IGCM_config_SaveSourceModifications de |
| 35 | libIGCM_config.ksh, au début de la simulation et lorsque la date de l'un des |
| 36 | exécutable a changé. |
| 37 | |
| 38 | Ceci n'est pas vraiment optimal car en théorie, on devrait testé à chaque itération |
| 39 | si l'un des paramètres de la configuration a été modifié (par un checksum sur les |
| 40 | fichiers initialement téléchargés par exemple). |
| 41 | |
| 42 | Le script !SaveSourceModifications.job est donc exécuté sur la frontale (qui a un accès à |
| 43 | l'arborescence modipsl et donc aux sources des modèles et à la configuration). |
| 44 | Il exécute l'outil de différence ${MODIPSL}/util/script_diff_model. Puis il tar le |
| 45 | répertoire créé par ce dernier et le sauve dans le répertoire ${R_OUT_EXE} et le |
| 46 | préfix ${config_UserChoices_JobName}_${!DatesPeriod} et le nom |
| 47 | ${MODIPSL_SAVE_NAME}_certified.tar ou ${MODIPSL_SAVE_NAME}_NOTcertified.tar si le |
| 48 | dernier fichier modifié est plus ancien que la dernière date de modification des |
| 49 | exécutables dans le job. En effet cette condition entraîne que les données ont pu |
| 50 | réellement être produites à partir des modifications enregistrer. Si un fichier |
| 51 | source ou un fichier de paramètre a été modifié entre temps, on a pas cette certitude |
| 52 | (et donc la certification de la sauvegarde des sources). |
| 53 | |
| 54 | === Le fonctionnement interne de la sauvegarde des sources === |
| 55 | Pour aller un peu plus loin dans l'explication du mécanisme de sauvegarde, on décrit |
| 56 | ici les deux utilitaires script_diff_model et script_log_analyse. |
| 57 | |
| 58 | Cet outils permettent d'analyser et de fabriquer une copie de l'arborescence modipsl |
| 59 | avec toutes les diffs de sources gérés sous CVS ou Subversion par élément téléchargé |
| 60 | dans la configuration dans mod.def. |
| 61 | |
| 62 | Le script script_log_analyse sert à analyser la '''dernière''' configuration |
| 63 | récupérée avec la commande model (ie il interprète la dernière configuration sauvée |
| 64 | dans le fichier util/log). Il suffit pour l'utiliser de renseigner la variable |
| 65 | ${MODIPSL}. Il construit alors une série de tableaux en mémoire (décrit dans le |
| 66 | script) donnant les informations nécessaires et suffisantes pour récupérer la bonne |
| 67 | version de la composante ou de l'outil, via l'un des deux gestionnaires de révision. |
| 68 | |
| 69 | Le script script_diff_model créé un répertoire temporaire de sauvegarde des |
| 70 | différences de source (le préfix modipsl_save_diff avec la date de son exécution et |
| 71 | représenté par la variable ${MODIPSL_SAVE}). Après avoir exécuter l'outil |
| 72 | script_log_analyse décrit précédemment, il parcourt toutes les composantes et outils |
| 73 | téléchargés avec la commande model initiale et appelle les outils de diff du |
| 74 | gestionnaire de version de la composante pour sauver l'ensemble des différences entre |
| 75 | la composante initiale et son état actuel. Il permet aussi de sauver tous les sources |
| 76 | suplémentaires dont l'extension est listée dans la variable SUFFIXES : |
| 77 | {{{ |
| 78 | # Code source suffixe for new file detection |
| 79 | SUFFIXES='\(f90\|F90\|f\|F\|h\|h90\|hh\|c\|cc\|inc\|fcm\|path\|cfg\|card\|driver\|def\|def_.*\|txt\|xml\|ksh\|tex\)' |
| 80 | }}} |
| 81 | On sauvegarde alors à priori toute modification effectuée depuis la récupération de |
| 82 | la composante, jusqu'au lancement de l'exécutable. |
| 83 | |
| 84 | === La récupération des sources sauvegardés === |
| 85 | Le script script_recup_model de modipsl/util permet de récupérer à la main chacun des |
| 86 | tarballs sauvegardés avec les données au cours de la production. Il n'y a pour |
| 87 | l'instant pas de récupération automatique d'un scénario complet. (Je donne à la fin de |
| 88 | ce paragraphe quelques spécifications pour construire un tel job.) |
| 89 | |
| 90 | Pour utiliser ce script, placez-vous dans un modipsl vide récent. Il vous faut |
| 91 | récupérer une arborescence sauvegardée par script_diff_model et probablement la |
| 92 | dépaqueter dans un répertoire temporaire (à supprimer à la fin). Puis simplement |
| 93 | exécuter ce script avec le chemin vers ce répertoire temporaire. Le script fait alors |
| 94 | les appels checkout (demande de mot de passe possible) comme l'avait fait la commande |
| 95 | model - avec les bonnes révisions - et remet en place les fichiers sources ou de |
| 96 | paramètres crées entre la récupération initiale et la sauvegarde dans le job. |
| 97 | |
| 98 | |
| 99 | Pour construire le job de récupération systématique des sources lors d'un scénario |
| 100 | complet, les actions à construire sont les suivantes : |
| 101 | 1. construction du modipsl à jour |
| 102 | 1. récupération du premier tar (pour le source du départ) |
| 103 | 1. on dépaque ce tar pour installer le source et la config (utilisation de scrip_recup_model) |
| 104 | 1. suppression du répertoire temporaire |
| 105 | 1. compilation des exécutables |
| 106 | 1. détection du tar suivant (date dans le préfix) |
| 107 | 1. modification du config.card dans le répertoire de la configuration (date du |
| 108 | prochain arrêt). On sauvegarde la date finale originale |
| 109 | 1. lancement du job |
| 110 | 1. et on boucle ces opérations à partir de la seconde étape. |