Skip to content

Commit f756fcc

Browse files
authored
Merge pull request #121 from pradel/feat/skip-download-file-if-already-exist
feat: skip downloading files if they already exist
2 parents 0c835a3 + 41856c4 commit f756fcc

File tree

1 file changed

+53
-12
lines changed

1 file changed

+53
-12
lines changed

scripts/seed-chainstate.sh

+53-12
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ alias log_warn='logger "${WARN}"'
3535
alias log_info='logger "${INFO}"'
3636
alias log_exit='exit_error "${EXIT_MSG}"'
3737
if ${VERBOSE}; then
38-
alias log='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}"'
39-
alias log_info='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${INFO}"'
40-
alias log_warn='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${WARN}"'
38+
alias log='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}"'
39+
alias log_info='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${INFO}"'
40+
alias log_warn='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${WARN}"'
4141
alias log_error='logger "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${ERROR}"'
42-
alias log_exit='exit_error "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${EXIT_MSG}"'
42+
alias log_exit='exit_error "$(date "+%D %H:%m:%S")" "Func:${FUNCNAME:-main}" "Line:${LINENO:-null}" "${EXIT_MSG}"'
4343
fi
4444

4545
logger() {
@@ -84,9 +84,45 @@ check_network() {
8484
download_file(){
8585
local url=${1}
8686
local dest=${2}
87-
local http_code=$(curl --output /dev/null --silent --head -w "%{http_code}" ${url})
87+
local checksum_url=${3:-""}
88+
local checksum_file=${4:-""}
89+
8890
log
89-
log "Downloading ${url} data to: ${DEST}"
91+
log "Checking for ${dest}"
92+
93+
# Check if file exists locally and if we should verify checksum
94+
if [[ -f "${dest}" && -n "${checksum_url}" && -n "${checksum_file}" ]]; then
95+
log " File exists locally. Checking remote checksum..."
96+
97+
# Download checksum file if it doesn't exist
98+
if [[ ! -f "${checksum_file}" ]]; then
99+
log " Downloading checksum file: ${checksum_url}"
100+
curl -s -L ${checksum_url} -o "${checksum_file}" || exit_error "${COLRED}Error${COLRESET} downloading checksum file ${checksum_url}"
101+
fi
102+
103+
# Get the remote checksum
104+
local remote_sha256=$(cat ${checksum_file} | awk {'print $1'})
105+
106+
# Calculate local file checksum
107+
local local_sha256=$(sha256sum ${dest} | awk {'print $1'})
108+
109+
log " Local SHA256: ${local_sha256}"
110+
log " Remote SHA256: ${remote_sha256}"
111+
112+
# If checksums match, skip download
113+
if [[ "${local_sha256}" == "${remote_sha256}" ]]; then
114+
log " ${COLGREEN}Checksum matches. Skipping download.${COLRESET}"
115+
return 0
116+
else
117+
log " ${COLYELLOW}Checksum mismatch. Will download fresh copy.${COLRESET}"
118+
fi
119+
elif [[ -f "${dest}" ]]; then
120+
log " ${COLYELLOW}File exists but cannot verify checksum. Will download fresh copy.${COLRESET}"
121+
fi
122+
123+
# Download the file
124+
local http_code=$(curl --output /dev/null --silent --head -w "%{http_code}" ${url})
125+
log "Downloading ${url} data to: ${dest}"
90126
if [[ "${http_code}" && "${http_code}" != "200" ]];then
91127
exit_error "${COLRED}Error${COLRESET} - ${url} doesn't exist"
92128
fi
@@ -95,6 +131,13 @@ download_file(){
95131
log " File Download size: ${converted_size}"
96132
log " Retrieving: ${url}"
97133
curl -L -# ${url} -o "${dest}" || exit_error "${COLRED}Error${COLRESET} downloading ${url} to ${dest}"
134+
135+
# If checksum URL was provided, download it (if not done already)
136+
if [[ -n "${checksum_url}" && -n "${checksum_file}" && ! -f "${checksum_file}" ]]; then
137+
log " Downloading checksum file: ${checksum_url}"
138+
curl -s -L ${checksum_url} -o "${checksum_file}" || exit_error "${COLRED}Error${COLRESET} downloading checksum file ${checksum_url}"
139+
fi
140+
98141
return 0
99142
}
100143

@@ -117,7 +160,7 @@ verify_checksum(){
117160
return 0
118161
}
119162

120-
log "-- seed-chainstate.sh --"
163+
log "-- seed-chainstate.sh --"
121164
log " Starting at $(date "+%D %H:%m:%S")"
122165
log " Using files/methods from https://docs.hiro.so/hiro-archive"
123166
log " checking for existence of ${SCRIPTPATH}/persistent-data/${NETWORK}"
@@ -154,12 +197,10 @@ if check_network "${PROFILE}"; then
154197
${VERBOSE} && log " Continuing"
155198
fi
156199

157-
download_file ${PGDUMP_URL} ${PGDUMP_DEST}
158-
download_file ${PGDUMP_URL_SHA256} ${PGDUMP_DEST_SHA256}
200+
download_file ${PGDUMP_URL} ${PGDUMP_DEST} ${PGDUMP_URL_SHA256} ${PGDUMP_DEST_SHA256}
159201
verify_checksum ${PGDUMP_DEST} ${PGDUMP_DEST_SHA256}
160202

161-
download_file ${CHAINDATA_URL} ${CHAINDATA_DEST}
162-
download_file ${CHAINDATA_URL_SHA256} ${CHAINDATA_DEST_SHA256}
203+
download_file ${CHAINDATA_URL} ${CHAINDATA_DEST} ${CHAINDATA_URL_SHA256} ${CHAINDATA_DEST_SHA256}
163204
verify_checksum ${CHAINDATA_DEST} ${CHAINDATA_DEST_SHA256}
164205

165206

@@ -171,7 +212,7 @@ log
171212
log " Chowning data to ${CURRENT_USER}"
172213
chown -R ${CURRENT_USER} "${SCRIPTPATH}/persistent-data/${NETWORK}" || exit_error "${COLRED}Error${COLRESET} setting file permissions"
173214

174-
log
215+
log
175216
log "Importing postgres data"
176217
log " Starting postgres container: ${CONTAINER}"
177218

0 commit comments

Comments
 (0)