diff options
author | Raphael Geissert <atomo64@gmail.com> | 2012-05-01 00:14:06 -0500 |
---|---|---|
committer | Raphael Geissert <geissert@debian.org> | 2012-12-18 18:21:58 -0600 |
commit | 361ba6bce1a3fabae9da0ab2b97f2cc7360da1d3 (patch) | |
tree | c4b5ac720511f6acb307f321b794d35e2fff1674 | |
parent | dbb0bdd950dccccdd0f9a3d43c656c2a03e4a56a (diff) |
Limit the number of update retries
In case something went wrong somewhere and upstream's update stalled or
there are stale AUIP files, this will prevent ftpsync from retrying
without an eventual error message.
-rwxr-xr-x | bin/ftpsync | 19 | ||||
-rw-r--r-- | etc/ftpsync.conf.sample | 5 |
2 files changed, 20 insertions, 4 deletions
diff --git a/bin/ftpsync b/bin/ftpsync index c73a0ee..b72b435 100755 --- a/bin/ftpsync +++ b/bin/ftpsync @@ -270,6 +270,8 @@ LOCK=${LOCK:-"${TO}/Archive-Update-in-Progress-${MIRRORNAME}"} LOCKTIMEOUT=${LOCKTIMEOUT:-3600} # sleeping time when an AUIP file is found but is not ours UIPSLEEP=${UIPSLEEP:-1200} +# retries whenever an upstream (or possibly stale) AUIP file is found +UIPRETRIES=${UIPRETRIES:-3} # Do we need another rsync run? UPDATEREQUIRED="${TO}/Archive-Update-Required-${MIRRORNAME}" # Trace file for mirror stats and checks (make sure we get full hostname) @@ -447,6 +449,8 @@ fi export RSYNC_PASSWORD export RSYNC_PROXY +UPDATE_RETRIES=0 + while [ -e "${UPDATEREQUIRED}" ]; do log "Running mirrorsync, update is required, ${UPDATEREQUIRED} exists" @@ -506,10 +510,17 @@ while [ -e "${UPDATEREQUIRED}" ]; do if [ "xtruex" = "x${upstream_uip}x" ]; then log "Upstream archive update in progress, skipping stage2" - log "Retrying update in ${UIPSLEEP}" - touch "${UPDATEREQUIRED}" - sleep "${UIPSLEEP}" - result=0 + if [ ${UPDATE_RETRIES} -lt ${UIPRETRIES} ]; then + log "Retrying update in ${UIPSLEEP}" + touch "${UPDATEREQUIRED}" + UPDATE_RETRIES=$(($UPDATE_RETRIES+1)) + sleep "${UIPSLEEP}" + result=0 + else + error "Update has been retried ${UPDATEREQUIRED} times, aborting" + log "Perhaps upstream is still updating or there's a stale AUIP file" + result=1 + fi else log "Running stage2: ${RSYNC} ${RSYNC_OPTIONS} ${RSYNC_OPTIONS2} ${EXCLUDE} ${SOURCE_EXCLUDE} ${RSYNCPTH}::${RSYNC_PATH} ${TO}" diff --git a/etc/ftpsync.conf.sample b/etc/ftpsync.conf.sample index 9e8cc65..e3f5cf5 100644 --- a/etc/ftpsync.conf.sample +++ b/etc/ftpsync.conf.sample @@ -93,6 +93,11 @@ ## is found to be updating while our update is running #UIPSLEEP=1200 +## Number of times the update operation will be retried when upstream +## is found to be updating while our update is running. +## Note that these are retries, so: 1st attempt + retries = total attempts +#UIPRETRIES=3 + ## The trace file is used by a mirror check tool to see when we last ## had a successful mirror sync. Make sure that it always ends up in ## project/trace and always shows the full hostname. |