summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorJoerg Jaspert <joerg@debian.org>2009-12-28 22:34:24 +0100
committerJoerg Jaspert <joerg@debian.org>2009-12-28 22:34:24 +0100
commit9c0dad2d25d7abbd9842d009483e528d9a0515e4 (patch)
tree6d280628f70b92aed62876606b061575e4fde07f /etc
parent32d1612c28af425609306a494f476d31ad8c9d10 (diff)
common
properly signal the mhop foo Signed-off-by: Joerg Jaspert <joerg@debian.org>
Diffstat (limited to 'etc')
-rw-r--r--etc/common93
1 files changed, 56 insertions, 37 deletions
diff --git a/etc/common b/etc/common
index 78d8451..f0968e8 100644
--- a/etc/common
+++ b/etc/common
@@ -71,12 +71,19 @@ signal () {
date -u >> "${LOGDIR}/${MIRROR}.log"
PUSHARGS=""
+
+ # Archive is non-empty, so tell the downstreams
if [ -n "${PUSHARCHIVE}" ]; then
PUSHARGS="${PUSHARGS} sync:archive:${PUSHARCHIVE}"
fi
+ # We have a callback wish, tell downstreams
if [ -n "${PUSHCB}" ]; then
PUSHARGS="${PUSHARGS} sync:callback"
fi
+ # If we are running an mhop push AND our downstream is one to receive it, tell it.
+ if [ "xmhopx" = "x${PUSHKIND}x" ] && [ "xmhopx" = "x${PUSHTYPE}x" ]; then
+ PUSHARGS="${PUSHARGS} sync:mhop"
+ fi
if [ "xallx" = "x${PUSHTYPE}x" ]; then
# Default normal "fire and forget" push
@@ -87,48 +94,60 @@ signal () {
# Want a staged push. Fine, lets do that
echo "Sending staged push" >> "${LOGDIR}/${MIRROR}.log"
- # Step1: Do a push to only sync stage1, do not background
- PUSHARGS1="sync:stage1"
- ssh $SSH_OPTIONS "${HOSTNAME}" "${PUSHARGS} ${PUSHARGS1}" >>"${LOGDIR}/${MIRROR}.log" 2>&1
- touch "${PUSHLOCKOWN}"
-
- # Step2: Wait for all the other "lock"files to appear.
- tries=0
- # We do not wait forever
- while [ ${tries} -lt ${PUSHDELAY} ]; do
- total=0
- found=0
- for file in ${PUSHLOCKS}; do
- total=$((total + 1))
- if [ -f ${file} ]; then
- found=$((found + 1))
+ # Only send stage1 if we havent already send it. When called with stage2, we already did.
+ if [ "xstage2x" != "x${PUSHKIND}x" ]; then
+ # Step1: Do a push to only sync stage1, do not background
+ PUSHARGS1="sync:stage1"
+ ssh $SSH_OPTIONS "${HOSTNAME}" "${PUSHARGS} ${PUSHARGS1}" >>"${LOGDIR}/${MIRROR}.log" 2>&1
+ touch "${PUSHLOCKOWN}"
+
+ # Step2: Wait for all the other "lock"files to appear.
+ tries=0
+ # We do not wait forever
+ while [ ${tries} -lt ${PUSHDELAY} ]; do
+ total=0
+ found=0
+ for file in ${PUSHLOCKS}; do
+ total=$((total + 1))
+ if [ -f ${file} ]; then
+ found=$((found + 1))
+ fi
+ done
+ if [ ${total} -eq ${found} ] || [ -f "${LOCKDIR}/all_stage1" ]; then
+ touch "${LOCKDIR}/all_stage1"
+ break
fi
+ tries=$((tries + 5))
+ sleep 5
done
- if [ ${total} -eq ${found} ] || [ -f "${LOCKDIR}/all_stage1" ]; then
- touch "${LOCKDIR}/all_stage1"
- break
+ # In case we did not have all PUSHLOCKS and still continued, note it
+ # This is a little racy, especially if the other parts decide to do this
+ # at the same time, but it wont hurt more than a mail too much, so I don't care much
+ if [ ${tries} -ge ${PUSHDELAY} ]; then
+ echo "Failed to wait for all other mirrors. Failed ones are:" >> "${LOGDIR}/${MIRROR}.log"
+ for file in ${PUSHLOCKS}; do
+ if [ ! -f ${file} ]; then
+ echo "${file}" >> "${LOGDIR}/${MIRROR}.log"
+ error "Missing Pushlockfile ${file} after waiting ${tries} second, continuing"
+ fi
+ done
fi
- tries=$((tries + 5))
- sleep 5
- done
- # In case we did not have all PUSHLOCKS and still continued, note it
- # This is a little racy, especially if the other parts decide to do this
- # at the same time, but it wont hurt more than a mail too much, so I don't care much
- if [ ${tries} -ge ${PUSHDELAY} ]; then
- echo "Failed to wait for all other mirrors. Failed ones are:" >> "${LOGDIR}/${MIRROR}.log"
- for file in ${PUSHLOCKS}; do
- if [ ! -f ${file} ]; then
- echo "${file}" >> "${LOGDIR}/${MIRROR}.log"
- error "Missing Pushlockfile ${file} after waiting ${tries} second, continuing"
- fi
- done
+ rm -f "${PUSHLOCKOWN}"
fi
- rm -f "${PUSHLOCKOWN}"
- # Step3: It either timed out or we have all the "lock"files, sync stage2
- PUSHARGS2="sync:stage2"
- echo "Now doing the second stage push" >> "${LOGDIR}/${MIRROR}.log"
- ssh $SSH_OPTIONS "${HOSTNAME}" "${PUSHARGS} ${PUSHARGS2}" >>"${LOGDIR}/${MIRROR}.log" 2>&1
+ # Step3: It either timed out or we have all the "lock"files, do the rest
+ # If we are doing mhop AND are called from ftpsync - we now exit.
+ # That way we notify our uplink that we and all our clients are done with their
+ # stage1. It can then finish its own, and if all our upstreams downlinks are done,
+ # it will send us stage2.
+ # If we are not doing mhop or are not called from ftpsync, we start stage2
+ if [ "xtruex" = "x${FROMFTPSYNC}x" ] && [ "xmhopx" = "x${PUSHKIND}x" ]; then
+ return
+ else
+ PUSHARGS2="sync:stage2"
+ echo "Now doing the second stage push" >> "${LOGDIR}/${MIRROR}.log"
+ ssh $SSH_OPTIONS "${HOSTNAME}" "${PUSHARGS} ${PUSHARGS2}" >>"${LOGDIR}/${MIRROR}.log" 2>&1
+ fi
else
# Can't decide? Then you get nothing.
return