Summary: In this part of log compaction for raft, I've implemented snapshooting and snapshot recovery. I've also refactored the code a bit, so `RaftServer` now has a pointer to the `GraphDb` and it can do some things by itself. Log compaction requires some further work. Since snapshooting isn't synchronous between peers, and each peer can work at their own pace, once we've compacted the log so that the next log to be sent to peer `x` isn't available anymore, we need to send the snapshot over the wire. This means that the next part will contain the `InstallSnapshotRPC` and then maybe one more that will implement the logic of sending `LogEntry` or the whole snapshot. Reviewers: ipaljak Reviewed By: ipaljak Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1834
84 lines
1.7 KiB
Bash
Executable File
84 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
## Helper functions
|
|
|
|
function wait_for_server {
|
|
port=$1
|
|
while ! nc -z -w 1 127.0.0.1 $port; do
|
|
sleep 0.1
|
|
done
|
|
sleep 1
|
|
}
|
|
|
|
function echo_info { printf "\033[1;36m~~ $1 ~~\033[0m\n"; }
|
|
function echo_success { printf "\033[1;32m~~ $1 ~~\033[0m\n\n"; }
|
|
function echo_failure { printf "\033[1;31m~~ $1 ~~\033[0m\n\n"; }
|
|
|
|
## Environment setup
|
|
|
|
# Get script location.
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
cd "$DIR"
|
|
|
|
# Find memgraph binaries.
|
|
binary_dir="$DIR/../../../build"
|
|
if [ ! -d $binary_dir ]; then
|
|
binary_dir="$DIR/../../../build_release"
|
|
fi
|
|
|
|
# Results for apollo
|
|
RESULTS="$DIR/.apollo_measurements"
|
|
|
|
# Benchmark parameters
|
|
DURATION=10
|
|
|
|
## Startup
|
|
declare -a HA_PIDS
|
|
|
|
for server_id in 1 2 3
|
|
do
|
|
$binary_dir/memgraph_ha --server_id $server_id \
|
|
--coordination_config_file="coordination.json" \
|
|
--raft_config_file="raft.json" \
|
|
--port $((7686 + $server_id)) \
|
|
--db-recover-on-startup=false \
|
|
--durability_directory=dur$server_id &
|
|
HA_PIDS[$server_id]=$!
|
|
wait_for_server $((7686 + $server_id))
|
|
done
|
|
|
|
# Allow some time for leader election.
|
|
sleep 10
|
|
|
|
# Start the memgraph process and wait for it to start.
|
|
echo_info "Starting HA benchmark"
|
|
$binary_dir/tests/feature_benchmark/ha/benchmark \
|
|
--duration=$DURATION \
|
|
--output-file=$RESULTS &
|
|
pid=$!
|
|
|
|
wait -n $pid
|
|
code=$?
|
|
|
|
# Shutdown
|
|
for server_id in 1 2 3
|
|
do
|
|
kill -9 ${HA_PIDS[$server_id]}
|
|
done
|
|
|
|
# Cleanup
|
|
for server_id in 1 2 3
|
|
do
|
|
wait -n ${HA_PIDS[$server_id]}
|
|
rm -r dur$server_id
|
|
done
|
|
|
|
if [ $code -eq 0 ]; then
|
|
echo_success "Benchmark finished successfully"
|
|
else
|
|
echo_failure "Benchmark didn't finish successfully"
|
|
exit $code
|
|
fi
|
|
|
|
exit 0
|