[arch-dev-public] [PATCH 4/4] ftpdir-cleanup: lock repo before doing the cleanup
Eric Bélanger
snowmaniscool at gmail.com
Wed Feb 24 20:36:43 EST 2010
This should fix the problem of the ftpdir-cleanup script removing the
new package instead of the old one (FS#17058). The script makes
$LOCK_TRIAL attempts, each separated by $LOCK_DELAY seconds, in
getting the repo lock. If the lock is unsuccessful, the cleanup is
skipped for that particular repo.
Signed-off-by: Eric Bélanger <snowmaniscool at gmail.com>
BTW, I didn't really tested this except the while loop logic.
---
misc-scripts/ftpdir-cleanup | 28 +++++++++++++++++++++++++---
1 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/misc-scripts/ftpdir-cleanup b/misc-scripts/ftpdir-cleanup
index a185090..77f79e6 100755
--- a/misc-scripts/ftpdir-cleanup
+++ b/misc-scripts/ftpdir-cleanup
@@ -10,15 +10,35 @@ dest=$2
############################################################
-. "$(dirname $0)/../db-functions"
+. "$(dirname $0)/../db-functions"
. "$(dirname $0)/../config"
${CLEANUP_DRYRUN} && echo 'dry run mode is active'
ftppath_base="$FTP_BASE/$reponame/$FTP_OS_SUFFIX"
+LOCK_DELAY=10
+LOCK_TRIAL=6
+
for arch in ${ARCHES[@]}; do
+ IS_LOCKED=0
+ count=0
+ while [ $count -le $LOCK_TRIAL ]; do
+ if repo_lock $reponame $arch ; then
+ IS_LOCKED=1
+ let count=$LOCK_TRIAL+1
+ continue
+ fi
+ sleep $LOCK_DELAY
+ let count=$count+1
+ done
+
+ if [ $IS_LOCKED -eq 0 ]; then
+ echo "Failed to lock $reponame $arch repo"
+ exit 1
+ fi
+
TMPDIR=$(mktemp -d /tmp/cleanup-XXXXXX) || exit 1
ftppath="$ftppath_base/$arch"
MISSINGFILES=""
@@ -80,10 +100,10 @@ for arch in ${ARCHES[@]}; do
dbpkgname=$(grep -A1 '^%FILENAME%$' "${p}/desc" 2>/dev/null| tail -n1)
if [ "${dbpkgname}" = "${pkgname}" ]; then
continue 2
- fi
+ fi
done
EXTRAFILES="$EXTRAFILES $pkg"
- done
+ done
rm -rf ${TMPDIR}
@@ -100,6 +120,8 @@ for arch in ${ARCHES[@]}; do
fi
done
+ repo_unlock $reponame $arch
+
#Make sure we've done *something* before outputting anything
if [ -z "$DELETEFILES$DELETESYMLINKS$MISSINGFILES$EXTRAFILES" ]; then
continue
--
1.7.0
More information about the arch-dev-public
mailing list