Opened 11 years ago
Closed 11 years ago
#100 closed defect (fixed)
AA_create_ts and IGCM_sys_Get : Transfer only existing files.
Reported by: | mafoipsl | Owned by: | sdipsl |
---|---|---|---|
Priority: | major | Milestone: | libIGCM_v2.0 |
Component: | PostProcessing | Version: | |
Keywords: | Cc: |
Description (last modified by sdipsl)
To reduce the number of error messages into Listre log at TGCC, transfer only existing files.
File don't exist if pack_output crashed. Add a message to propose to check that.
Pour rappel sur le problème et son historique :
- Les jobs nommés PACKOUTPUT, PACKRESTA, REBUILDWRK produisent des erreurs lustre dans les syslogs des noeuds sur lesquels ils tournent.
- Une analyse du constructeur à mis en évidence un pattern I/O reproduisant cette erreur. (non exactement reproduit ici).
- Une analyse de Marie Cadennes à mis en évidence que le script concerné est "libIGCM/create_ts.job"
- On m'a demandé d'analyser le "libIGCM/create_ts.job" pour isoler le pattern I/O et éventuellement proposer une solution
Voici le détails de cette analyse et des propositions de solutions :
Côté fichier de log
- dans le fichier de log "/ccc/work/cont003/dsm/p25mart/CPL/TLIM22/config/IPSLCM5A/TLIM23/OutScript/create_ts.25101231.2D.out " :
+ IGCM_sys_ncrcat --hst -v time_counter,time_counter_bnds,masso TLIM23_25070101_25071231_1M_scalar.nc TLIM23_25080101_25081231_1M_scalar.nc TLIM23_25090101_25091231_1M_scalar.nc TLIM23_25100101_25101231_1M_scalar.nc TLIM23_25070101_2510\
1231_1M_masso.nc
IGCM_sys_ncrcat : --hst -v time_counter,time_counter_bnds,masso TLIM23_25070101_25071231_1M_scalar.nc TLIM23_25080101_25081231_1M_scalar.nc TLIM23_25090101_25091231_1M_scalar.nc TLIM23_25100101_25101231_1M_scalar.nc TLIM23_25070101_2510\
1231_1M_masso.nc
ncrcat: ERROR TLIM23_25070101_25071231_1M_scalar.nc neither exists locally nor matches remote filename patterns
IGCM_sys_ncrcat : erreur --hst -v time_counter,time_counter_bnds,masso TLIM23_25070101_25071231_1M_scalar.nc TLIM23_25080101_25081231_1M_scalar.nc TLIM23_25090101_25091231_1M_scalar.nc TLIM23_25100101_25101231_1M_scalar.nc TLIM23_250701\
01_25101231_1M_masso.nc.
+ [ TRUE = TRUE ]
+ [ FALSE = FALSE ]
+ file_out=TLIM23_25070101_25101231_1M_masso.nc
+ file_before=TLIM23_25070101_25071231_1M_masso.nc
+ eval IGCM_sys_Put_Out TLIM23_25070101_25101231_1M_masso.nc '${R_OUT_OCE}/Analyse/TS_MO/TLIM23_25070101_25101231_1M_masso.nc'
IGCM_sys_Put_Out TLIM23_25070101_25101231_1M_masso.nc ${R_OUT_OCE}/Analyse/TS_MO/TLIM23_25070101_25101231_1M_masso.nc+ IGCM_sys_Put_Out TLIM23_25070101_25101231_1M_masso.nc /ccc/store/cont003/dsm/p25mart/IGCM_OUT/IPSLCM5A/DEVT/piControl\
/TLIM23/OCE/Analyse/TS_MO/TLIM23_25070101_25101231_1M_masso.nc
IGCM_sys_Put_Out : TLIM23_25070101_25101231_1M_masso.nc /ccc/store/cont003/dsm/p25mart/IGCM_OUT/IPSLCM5A/DEVT/piControl/TLIM23/OCE/Analyse/TS_MO/TLIM23_25070101_25101231_1M_masso.nc
WARNING : IGCM_sys_Put_Out TLIM23_25070101_25101231_1M_masso.nc DOES NOT EXIST .
+ [ FALSE = TRUE ]
+ [ ! X = X ]
+ [ 1M = 1M ]
+ [ -f TLIM23_25070101_25101231_1M_masso.nc ]
+ IGCM_sys_Rm TLIM23_25070101_25101231_1M_masso.nc
IGCM_sys_Rm : TLIM23_25070101_25101231_1M_masso.nc
IGCM_sys_Rm : error.
rm TLIM23_25070101_25101231_1M_masso.nc
rm: cannot remove `TLIM23_25070101_25101231_1M_masso.nc': No such file or directory
IGCM_debug_Exit : IGCM_sys_Rm
et avec un grep on a :
4771:+ liste_file_tmp[0]=TLIM23_25070101_25071231_1M_scalar.nc
Analyse / Discussions
Le pattern qui produit l'erreur est très probablement le suivant :
- la liste "${liste_file_tmp[*]}" contient des fichiers non existants.
- IGCM_sys_ncrcat : produit une erreur, il ne génère pas le fichier de sortie.
- IGCM_sys_Put_Out : ne fait rien car le fichier n'existe pas.
- IGCM_sys_Rm : produit une erreur -- c'est cette erreur qui est probablement à l'origine de l'erreur lustre dans les syslog.
Notes pour le TGCC :
- C'est le seul pattern produisant des "No such file or directory".
- il n'y a pas de commande "stat".
- un "No such file or directory" produit une erreur lustre (testé avec un ls sur l'un des noeuds).
- La seule autre possibilité serait que les [ -f FILE ] produisent également le syslog de lustre (non testé).
- Les logs ne sont pas aussi exhaustifs que je le souhaiterais car ils sont sous ksh et il n'y a pas d'expasion des commandes dans les fonctions.
Côté code source
- dans le fichier "/ccc/work/cont003/dsm/p25mart/CPL/TLIM22/libIGCM/create_ts.job" les lignes concernées sont :
653 while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] ; do
654 #
655 Length1=$( IGCM_date_DaysInPreviousPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} end)
656 DATE_TAB=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} $(( 1 - Length1 )) )_${DATE_LOOP}
657
658 Length2=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} )
659 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length2} )
660
661 #set +A liste_file ${liste_file[*]} ${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
662 #set +A liste_file_tmp ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
663 liste_file[${#liste_file[*]}]=${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
664 liste_file_tmp[${#liste_file_tmp[*]}]=${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc
665 (( COMPTEUR = COMPTEUR + 1 ))
666 #
667 done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done
668 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} -${Length2} )
669
670 # Get selected files
671 IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp}
672 IGCM_debug_Verif_Exit_Post
(...)
708 IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${file1} ${liste_file_tmp[*]} ${file_out}
709 #
710 IGCM_sys_Rm ${file1}
711 if [ ! "${DEPOT}" = "TRUE" ] ; then
712 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out}
713 # "${file1} = file_before ?
714 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin?}_${DATE_FIN_JOB_B}_${FlagDir?}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out}
715 fi
Solutions
Il y a plusieurs solutions possibles. Voici les plus évidentes :
Solution 1 : liste_file_tmp[*] ne devrait contenir que des fichiers existants
Les lignes impactées sont 663-664 ou bien un check après le 671.
En effet, j'ai l'impression que le "liste_file_tmp[*]" dépend de "liste_file[*]".
Et il y une pseudo-erreur :
4812-+ IGCM_sys_Get /l 'liste_file[*]' /ccc/scratch/cont003/dsm/p25mart/TMPDIR_IGCM/947431/OCE
4813-IGCM_sys_Get : /l liste_file[*] /ccc/scratch/cont003/dsm/p25mart/TMPDIR_IGCM/947431/OCE
4814:set +A dm_liste ${liste_file[*]}DEST=${3}IGCM_sys_Get, ERROR : regular file /ccc/store/cont003/dsm/p25mart/IGCM_OUT/IPSLCM5A/DEVT/piControl/TLIM23/OCE/Output/MO/TLIM23_25070101_25071231_1M_scalar.nc DOES NOT EXIST .
Solution 2 : vers la ligne 712
"eval IGCM_sys_Put_Out" et les instructions suivantes dans le blocs ne doivent pas s'éxécuter si "${file_out}" n'existe pas.
Soit quelque-chose du genre :
710 IGCM_sys_Rm ${file1}
711 if [ ! "${DEPOT}" = "TRUE" ] ; then
if [ -f ${file_out} ] ; then
712 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out}
713 # "${file1} = file_before ?
714 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin?}_${DATE_FIN_JOB_B}_${FlagDir?}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out}
fi
715 fi
Cette solution est à mon humble avis la meilleure mais si vous faites du parsing de log, elle cachera l'erreur.
Conclusion
Après cette analyse, pourriez-vous améliorer votre script "libIGCM/create_ts.job" ?
Quelle solution vous convient le mieux ?
Change History (3)
comment:1 in reply to: ↑ description Changed 11 years ago by sdipsl
- Component changed from Documentation to PostProcessing
- Milestone set to libIGCM_v2.0
comment:2 Changed 11 years ago by sdipsl
- Description modified (diff)
- Owner changed from somebody to sdipsl
- Status changed from new to assigned
Done see r817.
Test the presence of each files ending up in liste_file[${#liste_file[*]}]. Go to next file type if one is missing.
comment:3 Changed 11 years ago by sdipsl
- Resolution set to fixed
- Status changed from assigned to closed
Done see r817.
Test the presence of each files ending up in liste_file[${#liste_file[*]}]. Go to next file type if one is missing.
A tester par le TGCC puisque la solution proposée incite à une utilisation accrue de [ -f FILE ]
Replying to mafoipsl: