Skip to content
Snippets Groups Projects

query_supervisor #145: error detection during processing a query

Merged Marcin requested to merge mi_qs_issue144_with_error_detection into develop
Files
20
+ 116
54
@@ -40,6 +40,82 @@ source "$SCRIPTSDIR/common.sh"
export POSTGRES_VERSION=${POSTGRES_VERSION:-14}
DO_MAINTENANCE=0 #Allows to enter some maintenance mode (when postgres is started but hived not yet. Rather for internal debugging/development purposes)
PERFORM_DUMP=0
PERFORM_LOAD=0
BACKUP_SOURCE_DIR_NAME=""
stop_postresql() {
echo "Attempting to stop Postgresql..."
postgres_pid=0
if [ -f "/var/run/postgresql/$POSTGRES_VERSION-main.pid" ];
then
postgres_pid=$(cat "/var/run/postgresql/$POSTGRES_VERSION-main.pid")
fi
sudo -n /etc/init.d/postgresql stop
echo "Waiting for postgres process: $postgres_pid finish..."
if [ "$postgres_pid" -ne 0 ];
then
tail --pid="$postgres_pid" -f /dev/null || true
fi
echo "Postgres process: $postgres_pid finished."
}
perform_instance_dump() {
backup_dir_name="${1}"
sudo -n mkdir -p "${DATADIR}/${backup_dir_name}"
sudo -n chmod -R 774 "${DATADIR}/${backup_dir_name}"
sudo -n chown -R hived:users "${DATADIR}/${backup_dir_name}"
"${SCRIPTSDIR}/dump_instance.sh" --backup-dir="${DATADIR}/${backup_dir_name}" --hived-executable-path=/home/hived/bin/hived \
--override-existing-backup-dir --hived-db-role=hived \
--hived-data-dir="$DATADIR" --shared-file-dir="$SHM_DIR" --exit-before-sync \
--haf-db-name=haf_block_log --haf-db-admin=haf_admin \
--haf-db-port=5432 --haf-db-host=/var/run/postgresql
}
perform_instance_load() {
backup_dir_name="${1}"
"${SCRIPTSDIR}/load_instance.sh" --backup-dir="${DATADIR}/${backup_dir_name}" --hived-executable-path=/home/hived/bin/hived \
--hived-db-role=hived \
--hived-data-dir="$DATADIR" --shared-file-dir="$SHM_DIR" --exit-before-sync \
--haf-db-name=haf_block_log --haf-db-admin=haf_admin \
--haf-db-port=5432 --haf-db-host=/var/run/postgresql
}
run_instance() {
{
sudo --user=hived -En /bin/bash << EOF
echo "Attempting to execute hived using additional command line arguments:" "${HIVED_ARGS[@]}"
/home/hived/bin/hived --webserver-ws-endpoint=0.0.0.0:${WS_PORT} --webserver-http-endpoint=0.0.0.0:${HTTP_PORT} --p2p-endpoint=0.0.0.0:${P2P_PORT} \
--data-dir="$DATADIR" --shared-file-dir="$SHM_DIR" \
--plugin=sql_serializer --psql-url="dbname=haf_block_log host=/var/run/postgresql port=5432" \
${HIVED_ARGS[@]} 2>&1 | tee -i hived.log
echo "$? Hived process finished execution."
EOF
stop_postresql
} &
job_pid=$!
jobs -l
echo "waiting for job finish: $job_pid."
local status=0
wait $job_pid || status=$?
return ${status}
}
cleanup () {
echo "Performing cleanup...."
hived_pid=$(pidof 'hived' || echo '') # pidof returns 1 if hived isn't running, which crashes the script
@@ -53,21 +129,7 @@ cleanup () {
[[ -z "$hived_pid" ]] || tail --pid="$hived_pid" -f /dev/null
echo "Hived finish done."
postgres_pid=0
if [ -f "/var/run/postgresql/${POSTGRES_VERSION}-main.pid" ];
then
postgres_pid=$(cat "/var/run/postgresql/${POSTGRES_VERSION}-main.pid")
fi
sudo -n /etc/init.d/postgresql stop
echo "Waiting for postgres process: $postgres_pid finish..."
if [ "$postgres_pid" -ne 0 ];
then
tail --pid="$postgres_pid" -f /dev/null || true
fi
echo "postgres finish done."
stop_postresql
echo "Cleanup actions done."
}
@@ -76,7 +138,7 @@ prepare_pg_hba_file() {
sudo -En /bin/bash << EOF
echo -e "${PG_ACCESS}" > "/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf"
cat "/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf.default" >> "/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf"
cat "/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf"
#cat "/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf"
EOF
}
@@ -93,6 +155,8 @@ sudo --user=hived -n mkdir -p "$DATADIR/blockchain"
# data_directory is hardcoded in postgresql.conf as '/home/hived/datadir/haf_db_store/pgdata' so we create symbolic link to location of HAF_DB_STORE
test "$HAF_DB_STORE" = "/home/hived/datadir/haf_db_store" || sudo -n ln -s "$HAF_DB_STORE" /home/hived/datadir/haf_db_store
#Prepare HBA file before starting PostgreSQL
prepare_pg_hba_file
if [ -d "$PGDATA" ]
then
@@ -127,55 +191,53 @@ fi
cd "$DATADIR"
# be sure postgres is running and reload pg_hba file
prepare_pg_hba_file
sudo -n /etc/init.d/postgresql restart
# be sure postgres is running
sudo -n /etc/init.d/postgresql start
HIVED_ARGS=()
HIVED_ARGS+=("$@")
echo "Processing passed arguments...: $@"
while [ $# -gt 0 ]; do
case "$1" in
--dump-snapshot=*)
echo "Dump snapshot option found..."
BACKUP_SOURCE_DIR_NAME="${1#*=}"
PERFORM_DUMP=1
;;
--load-snapshot=*)
BACKUP_SOURCE_DIR_NAME="${1#*=}"
PERFORM_LOAD=1
;;
*)
echo "Attempting to collect unknown (hived) option: ${1}"
HIVED_ARGS+=("$1")
;;
esac
shift
done
export HIVED_ARGS
echo "Attempting to execute hived using additional command line arguments:" "${HIVED_ARGS[@]}"
echo "${BASH_SOURCE[@]}"
{
sudo --user=hived -En /bin/bash << EOF
echo "Attempting to execute hived using additional command line arguments:" "${HIVED_ARGS[@]}"
/home/hived/bin/hived --webserver-ws-endpoint=0.0.0.0:${WS_PORT} --webserver-http-endpoint=0.0.0.0:${HTTP_PORT} --p2p-endpoint=0.0.0.0:${P2P_PORT} \
--data-dir="$DATADIR" --shared-file-dir="$SHM_DIR" \
--plugin=sql_serializer --psql-url="dbname=haf_block_log host=/var/run/postgresql port=5432" \
${HIVED_ARGS[@]} 2>&1 | tee -i hived.log
echo "$? Hived process finished execution."
EOF
echo "$? Attempting to stop Postgresql..."
status=0
postgres_pid=0
if [ -f "/var/run/postgresql/$POSTGRES_VERSION-main.pid" ];
if [ ${PERFORM_DUMP} -eq 1 ];
then
postgres_pid=$(cat "/var/run/postgresql/$POSTGRES_VERSION-main.pid")
fi
sudo -n /etc/init.d/postgresql stop
echo "Waiting for postgres process: $postgres_pid finish..."
if [ "$postgres_pid" -ne 0 ];
echo "Attempting to perform instance snapshot dump"
perform_instance_dump "${BACKUP_SOURCE_DIR_NAME}"
elif [ ${PERFORM_LOAD} -eq 1 ];
then
tail --pid="$postgres_pid" -f /dev/null || true
echo "Attempting to perform instance snapshot load"
perform_instance_load "${BACKUP_SOURCE_DIR_NAME}"
else
run_instance
status=$?
fi
echo "Postgres process: $postgres_pid finished."
} &
job_pid=$!
jobs -l
echo "waiting for job finish: $job_pid."
status=0
wait $job_pid || status=$?
echo "Exiting docker entrypoint..."
echo "Exiting docker entrypoint with status: ${status}..."
exit $status
Loading