Skip to content

Commit

Permalink
Fixed and improved postgresql server state handling in package script…
Browse files Browse the repository at this point in the history
…lets

One typo fix. This was causing failure in ALL upgrades. Ouch.

Changed wait time for server stop/start from 5 seconds to 60.

Added cf_console to pg_upgrade failure tailing so it is visible in console.

Changed condition to test for stopped/started to something that works with tighter restrictions.
Using a select as root was failing due to lack of an account in postgresql at the moment we
were checking: bare database without any further manipulation by setup scripts.

Ticket: ENT-10647
Changelog: title
  • Loading branch information
craigcomstock committed Sep 28, 2023
1 parent 4a9cc42 commit 83c91b5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
4 changes: 2 additions & 2 deletions packaging/common/cfengine-hub/postinstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ init_postgres_dir()
# Started successfully, stop it again, the migration requires it to be not running.
(cd /tmp && su cfpostgres -c "$PREFIX/bin/pg_ctl -w -D $PREFIX/state/pg/data -l /var/log/postgresql.log stop") || failure=1
if [ $failure = 0 ]; then
wait_for_cfpostgres_down || failure=1
wait_for_cf_postgres_down || failure=1
fi
if [ $failure != 0 ]; then
cf_console echo "Error: unable to shutdown postgresql server. Showing last of /var/log/postgresql.log for clues."
Expand Down Expand Up @@ -703,7 +703,7 @@ do_migration() {
# Consult the last few lines of "/var/cfengine/state/pg/data/pg_upgrade_output.d/20230913T150025.959/log/pg_upgrade_server.log" for the probable cause of the failure.
cf_console echo "Showing last lines of any related log files:"
_daysearch=$(date +%Y%m%d)
find "$PREFIX"/state/pg/data/pg_upgrade_output.d -name *.log | grep "$_daysearch" | xargs tail
find "$PREFIX"/state/pg/data/pg_upgrade_output.d -name *.log | grep "$_daysearch" | cf_console xargs tail
cf_console echo
check_disk_space # will abort if low on disk space
init_postgres_dir "$new_pgconfig_file" "$pgconfig_type"
Expand Down
18 changes: 9 additions & 9 deletions packaging/common/script-templates/script-common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,12 @@ restore_cfengine_state() {
}

wait_for_cf_postgres() {
# wait for CFEngine Postgresql service to be available, up to 5 sec.
# wait for CFEngine Postgresql service to be available, up to 60 sec.
# Returns 0 is psql command succeeds,
# Returns non-0 otherwise (1 if exited by timeout)
for i in $(seq 1 5); do
for i in $(seq 1 60); do
true "checking if Postgresql is available..."
if $PREFIX/bin/psql cfsettings -c "SELECT 1;" >/dev/null 2>&1; then
if cd /tmp && su cfpostgres -c "$PREFIX/bin/psql -l" >/dev/null 2>&1; then
true "Postgresql is available, moving on"
return 0
fi
Expand All @@ -96,25 +96,25 @@ wait_for_cf_postgres() {
done
# Note: it is important that this is the last command of this function.
# Return code of `psql` is the return code of whole function.
$PREFIX/bin/psql cfsettings -c "SELECT 1;" >/dev/null 2>&1
cd /tmp && su cfpostgres -c "$PREFIX/bin/psql -l" >/dev/null 2>&1
}

wait_for_cf_postgres_down() {
# wait for CFEngine Postgresql service to be shutdown, up to 5 sec.
# wait for CFEngine Postgresql service to be shutdown, up to 60 sec.
# Returns 0 if postgresql service is not running
# Returns non-0 otherwise (1 if exited by timeout)
for i in $(seq 1 5); do
for i in $(seq 1 60); do
true "checking if Postgresql is shutdown..."
if ! "$PREFIX"/bin/pg_isready >/dev/null 2>&1; then
if cd /tmp && ! su cfpostgres -c "$PREFIX/bin/psql -l" >/dev/null 2>&1; then
true "Postgresql is shutdown, moving on"
return 0
fi
true "waiting 1 sec for Postgresql to shutdown..."
sleep 1
done
# Note: it is important that this is the last command of this function.
# Return code of `pg_isready` is the return code of whole function.
! "$PREFIX"/bin/pg_isready >/dev/null 2>&1
# Return code of `psql` is the return code of whole function.
cd /tmp && ! su cfpostgres -c "$PREFIX/bin/psql -l" >/dev/null 2>&1
}

safe_cp() {
Expand Down

0 comments on commit 83c91b5

Please sign in to comment.