#!/bin/csh
#######################################################################################################################################
# #
# E X E C U T I O N D E L A P R E M I E R E C O M M A N D E D U #
# F I C H I E R A R G U M E N T E T S U P P R E S S I O N : #
# #
# #
# Utilisation : #
# #
# $xcs/Linda$vv$Z <fichier_mode_ro> [<VerrouBlocage> [<TaillePaquets> [<FEnvironnement>]]] #
# #
# #
# Nota : #
# #
# Le 20121227122556 fut introduite la #
# variable d'environnement : #
# #
# setenv TaillePaquetsLinda (...) #
# $xcs/Linda$vv$Z (...) #
# unsetenv TaillePaquetsLinda #
# #
# qui permet donc "de l'exterieur" de forcer #
# la valeur par defaut de '$TaillePaquets'... #
# #
# #
# Le 20150205095655 fut introduite la #
# variable d'environnement : #
# #
# setenv SLinda $NEXIST #
# $xcs/Linda$vv$Z (...) #
# unsetenv SLinda #
# #
# qui permet donc de ne pas forcer la commande 'S' #
# definissant un certain nombres d'alias et #
# de variables utiles. #
# #
# #
# Author of '$xcs/Linda$vv$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, 20090119090300). #
# #
#######################################################################################################################################
set Fichier_mode_ro=$1
# ATTENTION : le mode de '$Fichier_mode_ro' doit etre 'ro' mais il est malheureusement #
# impossible de le verifier puisque plusieurs versions de '$xcs/Linda$vv$Z' peuvent #
# s'executer simultanement (alors qu'elles font des {rwv,rov}...). #
set VerrouBlocage=$2
# Argument introduit le 20090316102934 qui s'il est present designe un fichier qui permet #
# de bloquer la commande courante ('$CoMmAnDe') avant son execution. ATTENTION : evidemment #
# s'il plusieurs occurences de '$xcs/Linda$vv$Z' il est absolument essentiel que pour eviter #
# un blocage generalise, il y ait autant de fichiers '$VerrouBlocage's differents qu'il y a #
# d'occurences de '$xcs/Linda$vv$Z'... #
set TaillePaquets=$3
# Argument introduit le 20110523210538 pour 'v $Falias_catalf .xcs.Linda.vv.Z'. En effet, #
# lorsque les commandes a executer sont breves, voire tres breves (comme c'est le cas en #
# moyenne pour 'v $Falias_catalf .xcs.Linda.vv.Z'), afin de contrebalancer le "cout" de #
# la gestion du parallelisme, il est preferable de regrouper ces commandes par paquets... #
set FEnvironnement=$4
# Argument introduit le 20110524085419 pour 'v $Falias_catalf .xcs.Linda.vv.Z' et essentiel #
# dans le cas ou '$Fichier_mode_ro' reference des alias et/ou des variables "specifiques" #
# (c'est-a-dire ne faisant pas partie de l'environnement...). #
if ("$TaillePaquets" == "$K_VIDE") then
#20111218093147____: set TaillePaquets=1 #
#20121227122556____: set TaillePaquets=1 #
# Valeur par defaut... #
if ($?TaillePaquetsLinda == $EXIST) then
set TaillePaquets=$TaillePaquetsLinda
# Valeur par defaut introduite sous cette forme le 20121227122556... #
else
#20191213105854____: set TaillePaquets=1 #
# Valeur par defaut... #
if ($?TaillePaquetsDiviseur == $NEXIST) then
# Test introduit le 20191213134627... #
#20200307101330____: setenv TaillePaquetsDiviseur 8 #
setenv TaillePaquetsDiviseur 4
# On notera le 20191213132147 la valeur arbitraire de '$TaillePaquetsDiviseur'. Plus celle-ci #
# est grande et plus les paquets sont petits. On notera au passage que plus cette valeur est #
# proche de 1, plus cela fait l'hypothese que la duree d'execution est a peu pres le meme #
# pour tous les paquets... #
else
endif
set TailleFichier_mode_ro=`$CA $Fichier_mode_ro | $WCl`
set TaillePaquets=`calculINS ($TailleFichier_mode_ro/$ProcessorNumber)/$TaillePaquetsDiviseur`
set TaillePaquets=`$xcg/MAX2.01$X a=1 b=$TaillePaquets signe="$K_VIDE"`
unset TailleFichier_mode_ro
# Introduit le 20191213102418 afin de favoriser l'usage de "paquets" de commandes ce qui #
# permet, lorsque ces commandes s'executent tres rapidement, de reduire l'"overhead" de #
# gestion du parallelisme... #
#20191213134627____: unset TaillePaquetsDiviseur #
endif
if (-e $Fichier_mode_ro) then
#20120114112420____: set EsT_Ce__Gserveur=`$CA $Fichier_mode_ro | $EGRE -e "^Gserveur |^$xiMo/Gserveur$Z " | $HEA -1` #
set EsT_Ce__Gserveur=`$CA $Fichier_mode_ro | $EGRE -e "^ *Gserveur |^ *$xiMo/Gserveur$Z "'|^ *\$xiMo/Gserveur\$Z ' | $HEA -1`
#20120114112420____: set EsT_Ce__creation_Z=`$CA $Fichier_mode_ro | $EGRE -e "^$xiMo/recreation$Z " | $HEA -1` #
set EsT_Ce__creation_Z=`$CA $Fichier_mode_ro | $EGRE -e "^ *$xiMo/recreation$Z "'|^ *\$xiMo/recreation\$Z ' | $HEA -1`
if ( ("$EsT_Ce__Gserveur" != "$K_VIDE") \
|| ("$EsT_Ce__creation_Z" != "$K_VIDE") \
) then
#20120509181951____: set TaillePaquets=20 #
#20140525091811____: set TaillePaquets=8 #
set TaillePaquets=1
# Introduit le 20111218093147 afin d'ameliorer le parallelisme de certaines commandes dont #
# les temps d'execution sont brefs et surtout quasiment constants, ce qui fait que les #
# differentes branches paralleles ont tendance a se synchroniser et donc se "gener" #
# mutuellement lors de l'acces au fichier '$Fichier_mode_ro'. On introduit donc ici un #
# peu d'heuristique... #
# #
# On notera le 20120509155437 que pour la generation des petits diaporamas (tel celui qui #
# est associe a 'v $xiMt/Galerie_Astrophysics$vv.$m4.$I') il n'y aura donc pas d'execution #
# parallele. Peut-etre faudrait-il diminuer la valeur 20 (10 ou moins ?) ? Le 20120509181951 #
# je passe de 20 a 8 pour voir... #
# #
# A cause de 'v $xiMt/ComplexiteStructurelle.Recursive.01.$m4.$I' dont le 'Gserveur' #
# correspondant ('v $xiMd/ComplexiteStructurelle.Recursive.01$m4') est tres long, le #
# 20140525091811 je reviens a 1 pour voir... #
else
#20121227122357____: set TaillePaquets=1 #
endif
unset EsT_Ce__Gserveur
unset EsT_Ce__creation_Z
else
#20121227122357____: set TaillePaquets=1 #
# Pas tres utile, mais on ne sait jamais... #
endif
else
endif
if ($?SLinda == $NEXIST) then
#20150205104741____: setenv SLinda $NEXIST #
setenv SLinda $EXIST
# Valeur par defaut introduite le 20150205095655... #
else
endif
if (-e $Fichier_mode_ro) then
#20150205104329____: if ( ("$mHOTE" == "$mDev_WWW") \ #
#20150205104329____: || ($sHOTE == $sPORTABLE_1) \ #
#20150205104329____: || ($sHOTE == $sPORTABLE_2) \ #
#20150205104329____: || ($sHOTE == $sPORTABLE_3) \ #
#20150205104329____: || ($sHOTE == $sPORTABLE_4) \ #
#20150205104329____: || ($sHOTE == $sPORTABLE_5) \ #
#20150205104329____: ) then #
#20150205104329____: if (-e $xiMo/serveur.01$vv$Y) then #
#20150205104329____: set NoCheckServeur=$EXIST #
#20150205104329____: source $xiMo/serveur.01$vv$Y #
#20150205104329____: unset NoCheckServeur #
# Et ce afin de pouvoir disposer d'alias du type 'Gserveur' sur '$mDev_WWW'. #
#20150205104329____: else #
#20150205104329____: endif #
#20150205104329____: else #
#20150205104329____: endif #
if ($SLinda == $EXIST) then
PushdC $xrC
set No_Sdu=$EXIST
S
unset No_Sdu
# L'introduction de 'S' le 20150205095655 a implique la modification du 20150205104329 #
# ci-dessus... #
PopdC
else
endif
set BoUcLeR=$EXIST
while ($BoUcLeR == $EXIST)
#20090522162205____: rwv $Fichier_mode_ro >& $nul #
set rwv_NoMes=$EXIST
set PhasCriB_NoMesUtil=$EXIST
#20110524131848____: set TeMpO_PhasCriB=0.002 #
#20110528101359____: set TeMpO_PhasCriB=0.02 #
# Aux environs du 20110528101359 j'ai fait des experiences concernant la valeur de #
# '$TeMpO_PhasCriB'. Contrairement a ce que je croyais naivement, une valeur nulle #
# n'accelere pas le processus et la valeur '0.02' ('v $Fvariables pTEMPORISATION') #
# semble etre une bonne valeur. Malgre tout ces experiences ont montre que le "cout" du #
# parallelisme etait eleve pour 110 '$xcg/fichier_etat$X tout=VRAI' des '$X' de '$xrv' : #
# si le fichier correspondant est "source", il faut 5 secondes ("a la montre") contre 60 #
# en mode '$xcs/Linda$vv$Z' sur '$LACT18'... La question qui se pose est de savoir ou se #
# situe le "cout" ci-apres : en fait 40% du temps (dans le cas du test precedent) est #
# utilise par {rwv,rov}, le 'SourceTmp' de {PhasCriB,PhasCriE} en etant responsable. #
rwv $Fichier_mode_ro
#20110524131848____: unset TeMpO_PhasCriB #
unset PhasCriB_NoMesUtil
unset rwv_NoMes
# Appropriation du fichier '$Fichier_mode_ro'... #
# #
# La modification du 20090522162205 est due au probleme 'v $Falias_PhasCriB 20090522111309'. #
# Le 20090522163157, fut introduit '$rwv_NoMes' suite a la modification du 20090522162205... #
# #
# Je note le 20100315101519 que c'est la chaine de commandes : #
# #
# rwv --> PhasCriB #
# #
# qui est responsable du 'sleep' d'une duree de '$TEMPORISATION' ou '$pTEMPORISATION'... #
# #
# On notera que l'on pourrait positionner '$TeMpO_PhasCriB' afin de reduire la duree des #
# 'sleep's et donc accelerer (peut-etre...) le processus... #
#20110523210853____: SIZE $Fichier_mode_ro #
#20110523210853____: set SiZe_Fichier=$Fsize #
set SiZe_Fichier_Avant=`$CA $Fichier_mode_ro | $WCl`
if (-e $xcg/MIN2.01$X) then
# Test introduit le 20170403105900 car, en effet, '$xcg/MIN2.01$X' peut etre inexistant de #
# facon temporaire si justement 'v $xcs/Linda$vv$Z' sert en ce moment a faire des #
# compilations et que 'v $xcg/MIN2.01$K' est en cours de compilation... #
set SiZe_Fichier=`$xcg/MIN2.01$X a=$SiZe_Fichier_Avant b=$TaillePaquets entier=VRAI signe="$K_VIDE"`
# Le 20120713133554 le nom 'SiZe_Fichier' a ete complete par 'SiZe_Fichier_Avant' afin de #
# pouvoir valider la suppression des premieres lignes via '$SuPpReSs'. En effet, aux environs #
# de cette date, sur '$CMAP28' (ex(1) "grenelle"), lors de l'execution de : #
# #
# job $xiMo/ReGENEREAll$Z $EXIST $NEXIST $NEXIST $NEXIST $NEXIST #
# #
# la page 'v $xiMd/relai_universel.01$vv$m4' a ete generee quasiment simultanement dans deux #
# branches paralelles. Dorenavant, on verifiera que '$SuPpReSs' a bien detruit des lignes et #
# qu'ainsi la longueur du fichier '$Fichier_mode_ro' a bien diminue... #
else
EROR "La commande '"'$xcg/MIN2.01$X'"' n'existe pas."
#20170404033231____: set SiZe_Fichier=$SiZe_Fichier_Avant #
if ($SiZe_Fichier_Avant < $TaillePaquets) then
# Test emulant le '$xcg/MIN2.01$X' introduit le 20170404033231... #
set SiZe_Fichier=$SiZe_Fichier_Avant
else
set SiZe_Fichier=$TaillePaquets
endif
endif
if ($SiZe_Fichier > 0) then
FilSTmpB CoMmAnDe $Y
# Creation d'un fichier temporaire contenant la commande a executer. #
$CA $xcs/csh$Y \
>> $CoMmAnDe
# Initialisation du fichier temporaire '$CoMmAnDe'... #
if ("$FEnvironnement" != "$K_VIDE") then
if (-e $FEnvironnement) then
$CA $FEnvironnement \
>> $CoMmAnDe
# Possibilite introduite le 20110524085419 permettant donc d'executer dans : #
# #
# source $CoMmAnDe #
# #
# ci-apres des commandes qui sont, par exemple, des alias avec des variables. Ceci est #
# utilise dans 'v $Falias_catalf .Falias_catalf_1' ou la commande executee est l'alias #
# 'EdItE'... #
else
EROR "Le fichier '"$FEnvironnement"' n'existe pas."
endif
else
endif
$CA $Fichier_mode_ro | \
$HEA --lines $TaillePaquets \
>> $CoMmAnDe
# Recuperation de l'instruction courante... #
if ($TaillePaquets > 1) then
FilSTmpB SuPpReSs $Y
# Creation d'un fichier temporaire contenant la commande de suppression de '$TaillePaquets' #
# lignes en tete de '$Fichier_mode_ro'... #
$CA $xcs/csh$Y \
>> $SuPpReSs
# Initialisation du fichier temporaire '$CoMmAnDe'... #
echo "$E $Fichier_mode_ro << Fin_Delete >& $nul" \
>> $SuPpReSs
echo "1,$SiZe_Fichier""d" \
>> $SuPpReSs
echo "w" \
>> $SuPpReSs
echo "q" \
>> $SuPpReSs
echo "Fin_Delete" \
>> $SuPpReSs
# Tout ceci est du au fait que l'on ne peut pas parametrer par des variables les lignes #
# entrees via "<<...". On notera que l'on ne peut ecrire : #
# #
# "1,$TaillePaquets""d" #
# #
# car, en effet, a la fin du processus, dans le cas ou l'on a strictement : #
# #
# $SiZe_Fichier < $TaillePaquets #
# #
# alors '$E' refuse de detruire les dernieres (toutes...) lignes de '$Fichier_mode_ro'... #
source $SuPpReSs
# Suppression de l'instruction courante... #
FilSTmpE SuPpReSs
else
# Dans le cas ou les paquets contiennent une seule instruction, on optimise (pour une #
# fois...) en evitant la lourdeur du code ci-dessus... #
$E $Fichier_mode_ro << Fin_Delete >& $nul
1d
w
q
Fin_Delete
# Suppression de l'instruction courante... #
# #
# Afin d'eviter des problemes du type 'v $Fcommandes SYSTEME_FX2800_CONCENTRIX', le #
# 20090120092015 j'ai essaye de supprimer la premiere ligne de '$Fichier_mode_ro' via : #
# #
# FileTmpB TeMpOrAiRe #
# $CA $Fichier_mode_ro | \ #
# $TAI --lines +2 \ #
# >> $TeMpOrAiRe #
# $DELETE $Fichier_mode_ro #
# $MV $TeMpOrAiRe $Fichier_mode_ro #
# FileTmpE TeMpOrAiRe $NEXIST #
# #
# Malheureusement, cela ne marche pas a cause du '$DELETE $Fichier_mode_ro' qui fait que #
# de temps en temps '$Fichier_mode_ro' n'existe pas ce qui "perturbe" d'autres occurences #
# paralleles de '$xcs/Linda$vv$Z'... #
endif
set SiZe_Fichier_Apres=`$CA $Fichier_mode_ro | $WCl`
# Introduit le 20120713134302 afin de valider l'execution de '$SuPpReSs' ci-dessus... #
if ($SiZe_Fichier_Apres == $SiZe_Fichier_Avant) then
# Tests introduits le 20120713134302... #
EROR "Le fichier '"$Fichier_mode_ro"' n'a pas change de taille."
else
if ($SiZe_Fichier_Apres > $SiZe_Fichier_Avant) then
EROR "Le fichier '"$Fichier_mode_ro"' vient de grossir en passant \c"
ECHO "de $SiZe_Fichier_Avant a $SiZe_Fichier_Apres octets."
else
endif
endif
unset SiZe_Fichier_Apres
else
endif
rov $Fichier_mode_ro >& $nul
# Liberation du fichier '$Fichier_mode_ro'... #
if ($SiZe_Fichier > 0) then
#20151022112745____: source $CoMmAnDe #
(source $CoMmAnDe)
# Execution de la commande courante (qui n'est donc plus dans le fichier argument). #
# #
# Le 20090615170127, l'execution de la commande courante a ete placee devant l'eventuel #
# blocage par verrouillage a cause de 'v $xcg/FindExec.01$Z ListeFichierA' qui permet une #
# reprise d'un travail sous 'Linda' aborte pendant un 'BloqueP'. Ainsi, si '$xcs/Linda$vv$Z' #
# est aborte pendant le 'TestP', il est essentiel que la commande courante ait deja ete #
# executee puisqu'elle a deja ete supprimee de la liste '$Fichier_mode_ro' (dans le cas #
# contraire -correspondant a la situation anterieure au 20090615170127- cette commande #
# courante n'etait jamais executee !). #
# #
# La mise entre parentheses du 'source' le 20151022112745 est destinee a eviter des conflits #
# entre les variables locales (de '$xcs/Linda$vv$Z') et celles qui seront utiles dans le #
# fichier '$CoMmAnDe'. Cela s'est vu avec la variable '$CoMmAnDe' dans l'alias 'execXYZ' #
# lors de la mise au point de l'image 'v $xiirc/LYAP.M3$HauteDef.21'. En effet cette #
# variable '$CoMmAnDe' apparait aussi ici, ci-dessus... #
FilSTmpE CoMmAnDe
if ("$VerrouBlocage" != "$K_VIDE") then
if (-e $VerrouBlocage) then
TestP $VerrouBlocage
# Introduit le 20090316102934 pour permettre de bloquer la '$CoMmAnDe' courante avant son #
# execution... #
else
EROR "Le fichier de blocage '"$VerrouBlocage"' n'existe pas."
endif
else
endif
#20090615170127____: source $CoMmAnDe #
# Execution de la commande courante (qui n'est donc plus dans le fichier argument). #
#20090615170127____: FilSTmpE CoMmAnDe #
else
set BoUcLeR=$NEXIST
# On arrete car il n'y a plus rien a faire... #
endif
unset SiZe_Fichier
unset SiZe_Fichier_Avant
end
unset BoUcLeR
else
EROR "Le fichier '"$Fichier_mode_ro"' n'existe pas."
endif