MNAIO: Cater for galera bootstrap without a master

There can be situations where a gvwstate.dat file is present
in at least one galera container, but the my_uuid and view_id
do not match in any of them. In this case, we should just pick
any container to be the master.

This patch caters for this situation, ensuring that the cluster
still bootstraps whenever the VM boots.

Change-Id: If87cd9399b6624418f16910e4ddc046aaa22e5c5
This commit is contained in:
Jesse Pretorius 2018-09-07 17:51:58 +01:00
parent 2958a629c7
commit 41d0e61f0c

View File

@ -33,27 +33,46 @@ done
# there may be more than one, so we need to
# find the one holding the view_id
for cnt in $(ls -1 /tmp | grep galera_container); do
# generate a new uuid for this container
uuid_map[${cnt}]=$(uuidgen)
# work through the existing files to see
# if there is a master present
gvwstate_path="/tmp/${cnt}/gvwstate.dat"
if [[ -e ${gvwstate_path} ]]; then
echo "Found ${gvwstate_path}, extracting my_uuid/view_id."
my_uuid=$(awk '/^my_uuid:/ { print $2 }' ${gvwstate_path})
view_id=$(awk '/^view_id:/ { print $3 }' ${gvwstate_path})
# just in case there is no master found, we store the
# last one we saw so that we can use it as a fallback
echo "Setting last_gvwstate_path to ${gvwstate_path}."
last_gvwstate_path=${gvwstate_path}
if [[ "${my_uuid}" == "${view_id}" ]]; then
echo "Found galera master in ${gvwstate_path}."
master_gvwstate_path=${gvwstate_path}
master_cnt=${cnt}
fi
fi
if [[ "${cnt}" == "${master_cnt}" ]]; then
# if a master container was found, overwrite the uuid
# to the uuid from it
if [[ "${cnt}" == "${master_cnt:-none}" ]]; then
uuid_map[${cnt}]=${my_uuid}
else
uuid_map[${cnt}]=$(uuidgen)
fi
done
echo "Prepare a new master gvwstate.dat in a temporary location."
tmp_gvwstate="/tmp/gvwstate.dat"
cp ${master_gvwstate_path} ${tmp_gvwstate}
if [[ "${master_gvwstate_path:-none}" != "none" ]]; then
cp ${master_gvwstate_path} ${tmp_gvwstate}
elif [[ "${last_gvwstate_path:-none}" != "none" ]]; then
cp ${last_gvwstate_path} ${tmp_gvwstate}
else
echo "ERROR: No gvwstate.dat file was found. Cannot prepare galera cluster for cluster initialization."
exit 1
fi
member_num=$(awk '/^member: '${my_uuid}'/ {print $3}' ${tmp_gvwstate})
echo "Clearing the existing members."