forked from ArchiveTeam/archiveteam-megawarc-factory
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoffload-one
executable file
·131 lines (110 loc) · 3.23 KB
/
offload-one
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
# Offloads megawarcs from the upload queue.
# (Needs a config.sh in the working directory.)
#
# ./offload-one
#
# 1. Grabs an item from UPLOAD_QUEUE_DIR
# 2. Reserves the item by moving the directory to the
# UPLOADER_WORKING_DIR
# 3. Offloads the item to the target defined in OFFLOAD_TARGET
# or in the offload_targets file
# 4. Removes the source files from the working directory
# If COMPLETED_DIR is set, offloaded files are moved there.
#
# The program exits with 1 on any nontransient error.
#
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source ./config.sh || exit 1
mkdir -p "${UPLOAD_QUEUE_DIR}" || exit 1
mkdir -p "${UPLOADER_WORKING_DIR}" || exit 1
if [ ! -z "${COMPLETED_DIR}" ]
then
mkdir -p "${COMPLETED_DIR}" || exit 1
fi
function mayicontinue {
echo
# echo "May I continue?"
# read
# echo
}
mayicontinue
if test -z "${OFFLOAD_TARGET}" && ! cat ./offload_targets 2> /dev/null | grep -qE '^rsync://[^/]+/[^/]+'; then
echo "No valid offload target specified in OFFLOAD_TARGET environment variable or ./offload_targets file, aborting offload"
sleep 30
exit 1
fi
# try to grab an item from UPLOAD_QUEUE_DIR
ITEM=none
while [[ "${ITEM}" = none ]]
do
possible_item=$( ls -1 "${UPLOAD_QUEUE_DIR}" | grep -E '[0-9]{14}_[a-f0-9]{8}$' | sort | head -n 1 )
if test -n "${possible_item}"
then
echo "Trying to grab ${possible_item}"
if mv "${UPLOAD_QUEUE_DIR}/${possible_item}" "${UPLOADER_WORKING_DIR}/"
then
ITEM="${possible_item}"
else
echo "Failed to move ${possible_item}"
sleep 5
fi
else
date
echo "No current item found!"
sleep 30
exit 0
fi
done
echo "$( date ): Start offloading for item ${ITEM}" >> uploader.log
result=1
while [[ "${result}" -ne 0 ]]
do
_OFFLOAD_TARGET="${OFFLOAD_TARGET}"
if test -z "${_OFFLOAD_TARGET}"; then
_OFFLOAD_TARGET=$(cat "./offload_targets" 2> /dev/null | grep -E '^rsync://[^/]+/[^/]+' | shuf -n 1)
fi
if test -z "${_OFFLOAD_TARGET}"; then
echo "No valid offload target specified in OFFLOAD_TARGET environment variable or ./offload_targets file"
echo "Will retry in 30 seconds"
sleep 30
continue
fi
echo "Offloading to ${_OFFLOAD_TARGET}/${ITEM}/"
rsync -rltv --timeout=900 --contimeout=60 --sockopts=SO_SNDBUF=8388608,SO_RCVBUF=8388608 --progress --stats --no-owner --no-group --partial --partial-dir .rsync-tmp --delay-updates --no-compress --compress-level 0 "${UPLOADER_WORKING_DIR}/${ITEM}/" "${_OFFLOAD_TARGET}/${ITEM}/"
result="${?}"
if [[ "${result}" -ne 0 ]]
then
date
echo "Error while offloading ${ITEM}, rsync said ${result}"
echo "Will retry in 30 seconds"
sleep 30
fi
done
echo "Offloaded ${ITEM}"
echo "$( date ): Completed offloading for item ${ITEM}" >> uploader.log
mayicontinue
# move or remove megawarc
if [ -z "${COMPLETED_DIR}" ]
then
# remove
rm -rf "${UPLOADER_WORKING_DIR}/${ITEM}"
result="${?}"
if [[ "${result}" -ne 0 ]]
then
date
echo "rm -rf megawarc exited with ${result} for ${ITEM}"
exit 1
fi
else
# move
mv "${UPLOADER_WORKING_DIR}/${ITEM}" "${COMPLETED_DIR}/"
result="${?}"
if [[ "${result}" -ne 0 ]]
then
date
echo "rm -rf megawarc exited with ${result} for ${ITEM}"
exit 1
fi
fi
exit 0