From 013eda762dd239966b234c5739afcfc8b1317639 Mon Sep 17 00:00:00 2001 From: Joseph Palermo Date: Tue, 26 Apr 2022 10:47:00 -0700 Subject: [PATCH] Fix pre-start when upgrading long-lived Directors When running `bosh create-env` on a long-running BOSH Director, the postgres pre-start script will fail if there's an old postgres-9.4 data directory. This commit fixes that by recognizing if the DB has already been updated to postgres-10, and clears out the obsolete data directory to free up space (typically that directory is ~2 years old). Fixes, `/var/vcap/sys/log/postgres/pre-start.stdout.log`: ``` kernel.shmmax = 67108864 Please use a previous bosh release version (271.x or lower) to migrate data from postgres-9.4 to postgres-10. ``` [#181800235](https://www.pivotaltracker.com/story/show/181800235) Signed-off-by: Brian Cunnie --- jobs/postgres/templates/pre-start.erb | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/jobs/postgres/templates/pre-start.erb b/jobs/postgres/templates/pre-start.erb index a8c5e3ba7f7..bea5fcc0aeb 100755 --- a/jobs/postgres/templates/pre-start.erb +++ b/jobs/postgres/templates/pre-start.erb @@ -9,14 +9,22 @@ PERSISTENT_DISK_DIR=/var/vcap/store STORE_DIR=${PERSISTENT_DISK_DIR}/postgres-13 STORE_DIR_OLD=${PERSISTENT_DISK_DIR}/postgres-10 +STORE_DIR_OBSOLETE=${PERSISTENT_DISK_DIR}/postgres-9.4 USER='<%= p("postgres.user") %>' sysctl -w "kernel.shmmax=67108864" -if [[ -d /var/vcap/store/postgres-9.4 ]]; then - echo "Please use a previous bosh release version (271.x or lower) to migrate data from postgres-9.4 to postgres-10." - exit 1 +if [ -d $STORE_DIR_OBSOLETE ]; then + # uh-oh, we have years-old BOSH Director + if [ ! -d $STORE_DIR_OLD ] && [ ! -d $STORE_DIR ]; then + # we never upgraded this BOSH Director from PostgreSQL 9.4 to 10 + echo "Please use a previous bosh release version (271.x or lower) to migrate data from postgres-9.4 to postgres-10." + exit 1 + fi + # delete the obsolete 9.4 directory to free up space + echo "Deleting obsolete $STORE_DIR_OBSOLETE directory." + rm -rf "${STORE_DIR_OBSOLETE}" fi # We cannot kill the following conditional