summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/updateCache
diff options
context:
space:
mode:
authoririna <irinagomez@us.es>2013-03-26 12:31:41 +0000
committeririna <irinagomez@us.es>2013-03-26 12:31:41 +0000
commitcad1e1b1a78a535ac1e6973d0b4e746594e6bf08 (patch)
treebc0a69f8da7d8e65da0f90b04814054322595792 /client/shared/scripts/updateCache
parent62d43c30fbf7804a84f9de0aa5d3b192fb5f9bf4 (diff)
#565 imagenes sincronizadas. modificacion script existentes: updateCache, enging.cfg y ogAdmRepoAux.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@3717 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/shared/scripts/updateCache')
-rwxr-xr-xclient/shared/scripts/updateCache79
1 files changed, 72 insertions, 7 deletions
diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache
index c30dab2b..58efc821 100755
--- a/client/shared/scripts/updateCache
+++ b/client/shared/scripts/updateCache
@@ -25,6 +25,8 @@
#@version 1.0.1 - Control de espacio requerido
#@author Antonio J.Doblas Viso
#@date 2011-05-10
+#@version 2.0.1 - Imagenes sincronizadas
+#@date 2013-02-20
#*/ ##
PROG="$(basename $0)"
@@ -48,9 +50,19 @@ if ! $(ogFindCache >/dev/null); then
exit $?
fi
+# Comprobar que es sincronizable
+REPOFILE=$(ogGetPath "REPO" "/$2")
+file $REPOFILE | grep " BTRFS Filesystem" 2>&1 > /dev/null
+[ $? == 0 ] && IMGTYPE="RSYNC"
+
+# La sincronizada, si hay imagen en cache uso rsync, si no otro protocolo
+CACHEFILE=$(ogGetPath "CACHE" "/$2") && PROTOCOLO="RSYNC"
+
echo "$MSG_SCRIPTS_UPDATECACHE_DOUPDATE "
#TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
-ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+# Si es imagen sincronizada siempre da distinto md5 -> no comprobamos
+[ "$IMGTYPE" == "RSYNC" ] || ogUpdateCacheIsNecesary $1 $2
+RETVAL=$?
# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
[ "$RETVAL" == "1" ] && exit 0
[ "$RETVAL" -gt "1" ] && exit 1
@@ -58,20 +70,31 @@ ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
CACHESIZE=$(ogGetCacheSize)
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
FILESIZE=$(ls -sk $(ogGetPath $REPOSITORIO "$2") | cut -f1 -d" ")
+REALFILESIZE=$(ls -lk $(ogGetPath $REPOSITORIO "$2") | cut -f5 -d" ")
+# La sincronizada, si existe la imagen en cache el espacio necesario
+# es la nueva menos lo que ocupa la que ya hay.
+if [ "$PROTOCOLO" == "RSYNC" ]; then
+ CACHEFILESIZE=$(ls -lk $(ogGetPath "CACHE" "$2") | cut -f5 -d" ")
+ let SIZEREQUIRED=$CACHEFILESIZE-$FILESIZE
+ [ $SIZEREQUIRED -lt 0 ] && SIZEREQUIRED=0
+else
+ SIZEREQUIRED=$FILESIZE
+
+fi
echo "$MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE"
#ERROR CACHESIZE 16
-if [ "$FILESIZE" -ge "$CACHESIZE" ]
+if [ "$SIZEREQUIRED" -ge "$CACHESIZE" ]
then
- echo "WARNING: $MSG_ERR_CACHESIZE: $2 = $FILESIZE > CACHE = $CACHESIZE" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > CACHE = $CACHESIZE" | tee -a $OGLOGSESSION $OGLOGFILE
ogRaiseError $OG_ERR_CACHESIZE "CACHE"
exit $?
fi
echo "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO"
#ERROR CACHESIZE 16
-if [ "$FILESIZE" -ge "$CACHESIZEFREE" ]
+if [ "$SIZEREQUIRED" -ge "$CACHESIZEFREE" ]
then
# echo "[ ] No hay espacio sufiente en la CACHE, detectar que hacer con engine.cfg" | tee -a $OGLOGSESSION $OGLOGFILE
case $ACTIONCACHEFULL in
@@ -98,7 +121,8 @@ then
esac
fi
-ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
+[ "$IMGTYPE" == "RSYNC" ] || ogUpdateCacheIsNecesary $REPOSITORIO "$2"
+RETVAL=$?
# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
[ "$RETVAL" == "1" ] && exit 0
[ "$RETVAL" -gt "1" ] && exit 1
@@ -122,7 +146,7 @@ case "$PROTOCOLO" in
timewait=$(expr $(printf '%d\n' 0x$(ogGetMacAddress | awk -F: '{print $5$6}')) \* 120 / 65535)
ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR"
#TODO: comprobar que el tracker definido en el fichero es correcto.
- #TODO comprobar que el fichero torrent está en cache
+ #TODO comprobar que el fichero torrent está en cache
# retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos
P2PWAIT=$[ ( $RANDOM % 120 ) + 1 ]
echo " [ ] $MSG_SCRIPTS_TASK_SLEEP : $P2PWAIT seconds ogTorrentStart CACHE $2.torrent $4" | tee -a $OGLOGSESSION $OGLOGFILE
@@ -165,6 +189,43 @@ case "$PROTOCOLO" in
echo "unicast"
ogCopyFile $REPOSITORIO "$2" "$IMGDIR"
;;
+ RSYNC)
+ USERRSYNC="opengnsys"
+ OPTRSYNC=" --delete --password-file=/scripts/passrsync "
+ [ "$ogcompress" == "true" ] && OPTRSYNC="z $OPTRSYNC"
+ IMGEXT=${2##*.}
+ DIRMOUNT="$(ogGetMountDir "${2%%.*}" $IMGEXT)"
+ DIRLOCAL="/tmp/$DIRMOUNT"
+ mkdir $DIRLOCAL 2>/dev/null
+ echo "Comprobamos si hay que redimensionar la imagen: cachefile: $CACHEFILESIZE -lt repofile: $REALFILESIZE "
+
+ if [ $CACHEFILESIZE -lt $REALFILESIZE ]; then
+ # Si la imagen esta montada la desmonto
+ mount |grep $CACHEFILE >/dev/null && umount $CACHEFILE
+ echo " Redimensionamos la imagen al tamaño necesario" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo " truncate --size=>$REALFILESIZE k $CACHEFILE" | tee -a $OGLOGSESSION $OGLOGFILE
+ truncate --size=">$REALFILESIZE"k $CACHEFILE &> $OGLOGCOMMAND
+ echo " mount -o compress=lzo $CACHEFILE $DIRLOCAL"
+ mount -o compress=lzo $CACHEFILE $DIRLOCAL
+ echo " btrfs filesystem resize max $DIRLOCAL"
+ btrfs filesystem resize max $DIRLOCAL
+ TIMEAUX3=$[SECONDS-TIMEAUX3]
+ echo " Fin redimension de la imagen: $[TIMEAUX3/60]m $[TIMEAUX3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+
+
+ fi
+ ogMountImage CACHE "${2%%.*}" $IMGEXT
+ ogMountImage REPO "${2%%.*}" $IMGEXT
+ # Esperamos que se monte la imagen en el servidor
+ ogWaitMountImage REPO "${2%%.*}" $IMGEXT
+ echo -e "\nrsync -aHAX OPTRSYNC --quiet $USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/ $DIRLOCAL |tee -a $OGLOGSESSION $OGLOGFILE"
+ rsync -aHAX$OPTRSYNC --quiet $USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/ $DIRLOCAL |tee -a $OGLOGSESSION $OGLOGFILE
+ # RETVAL="1" -> OK RETVAL="2" -> error # valores igual que ogUpdateCacheIsNecesary
+ [ $? == 0 ] && RETVAL="1"|| RETVAL="2"
+ # Desmonto las imagenes
+ ogUnmountImage CACHE "${2%%.*}" $IMGEXT
+ ogUnmountImage REPO "${2%%.*}" $IMGEXT
+ ;;
esac
TIME1=$[SECONDS-TIME1]
@@ -172,7 +233,11 @@ echo " [ ] $RESUMEUPDATECACHE " | tee -a $OGLOGSESSION $OGLOGFILE
echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME1/60]m $[TIME1%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
echo " [ ] $MSG_SCRIPTS_TASK_START $MSG_HELP_ogCalculateChecksum " | tee -a $OGLOGSESSION $OGLOGFILE
TIME2=$SECONDS
-ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
+if [ "$PROTOCOLO" != "RSYNC" ]; then
+ ogUpdateCacheIsNecesary $REPOSITORIO "$2"
+ RETVAL=$?
+fi
+
TIME2=$[SECONDS-TIME2]
echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL $MSG_HELP_ogCalculateChecksum $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE