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

A tester par le TGCC puisque la solution proposée incite à une utilisation accrue de [ -f FILE ]

Replying to mafoipsl:

  • La seule autre possibilité serait que les [ -f FILE ] produisent également le syslog de lustre (non testé).

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.

Note: See TracTickets for help on using tickets.