Skip to content
Snippets Groups Projects
Commit ac1cbdee authored by Robert Martin-Legene's avatar Robert Martin-Legene
Browse files

Importdb

parent a30719bd
No related branches found
No related tags found
No related merge requests found
......@@ -139,7 +139,7 @@ function graceful
if [ -z "$pids" ]
then
echo "Nothing to send signals to." >&2
exit 1
return
fi
sendsig -TERM "$pids"
sleep 1
......@@ -170,15 +170,15 @@ function initdb
register_subcommand 'exportdb' 'exportdb' 'Export blockchain in chunks of 1 million blocks per file.'
function exportdb
{
local delta maxblocks blockstart toblock filename
delta=1000000
local million maxblocks blockstart toblock filename
million=1000000
graceful
maxblocks=$(bfageth --exec 'eth.blockNumber' console 2> /dev/null)
# 0 is genesis.. shouldn't dump that
blockstart=1
while [ "$blockstart" -lt "$maxblocks" ]
do
toblock=$(( blockstart + delta - 1 ))
toblock=$(( blockstart + million - 1 ))
test "$toblock" -gt "$maxblocks" &&
toblock=$maxblocks
printf -v filename 'bfa2018.blocks.%09d-%09d.export.gz' "$blockstart" "$toblock"
......@@ -194,28 +194,43 @@ function exportdb
register_subcommand 'importdb' 'importdb' 'Import blocks safely from previous block exports.'
function importdb
{
local dumpurl delta blockstart toblock
local dumpurl million blockstart continue_at haveblocks theirsize oursize
dumpurl="https://s3.wasabisys.com/bfa/blockdumps"
delta=1000000
million=1000000
graceful
blockstart=1
haveblocks=$(bfageth --exec 'eth.blockNumber' console 2> /dev/null)
blockstart=$((haveblocks/million*million+1))
while :
do
toblock=$(( blockstart + delta - 1 ))
printf -v filename 'bfa2018.blocks.%09d-%09d.export.gz' "$blockstart" "$toblock"
curl --fail "${dumpurl}/${filename}" || break
blockstart=$(( toblock + 1 ))
printf -v filename 'bfa2018.blocks.%09d-%09d.export.gz' "$blockstart" "$((blockstart + million - 1))"
blockstart=$((blockstart + million))
read -r theirsize < <( curl --head "${dumpurl}/${filename}" 2>/dev/null | grep -i '^Content-Length: ' | head -1 )
if [ -z "$theirsize" ]
then
break
else
theirsize="${theirsize//*: }"
# remove trailing newline
theirsize="${theirsize%$'\r'}"
fi
#
if [ -r "$filename" ]
then
oursize=$(stat -c %s "$filename")
continue_at="--continue-at $oursize"
else
oursize=0
continue_at=
fi
if [ "${oursize:-0}" -lt "$theirsize" ]
then
echo "Downloading $filename"
curl --fail $continue_at -o "$filename" "${dumpurl}/${filename}" || break
fi
# shellcheck disable=SC2086
bfageth import <(gzip -dc "$filename")
rm -f "$filename"
done
geth --networkid "${BFANETWORKID}" --datadir "${BFANODEDIR}" --syncmode "full" --gcmode "archive" import <(
n=1
printf -v filename 'bfa2018.blocks.%09d-%09d.export.gz' "$n" "$((n + delta - 1))"
while gzip -dc "$filename" 2>/dev/null
do
n=$((n + delta))
printf -v filename 'bfa2018.blocks.%09d-%09d.export.gz' "$n" "$((n + delta - 1))"
done
true
)
}
register_subcommand 'syncmode' 'admin_syncmode' 'Set initial synchronization mode.'
......@@ -381,7 +396,7 @@ function bfageth
echo "You should not run this command without any arguments. Start the background processes with start.sh instead." >&2
exit 1
fi
exec geth --config "${BFANETWORKDIR}/config.localhost+full+archive" "$@"
geth --config "${BFANETWORKDIR}/config.localhost+full+archive" "$@"
}
function bfaadmin
......@@ -427,7 +442,7 @@ function main
test -n "$cmd" || _usage
test -n "${commands[$cmd]}" || _usage
# shellcheck disable=SC2086
eval ${commands[$cmd]} "$*"
eval ${commands[$cmd]} "$@"
;;
'admin.sh')
bfaadmin "$@"
......@@ -441,4 +456,4 @@ function main
esac
}
main "$*"
main "$@"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment