You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2021/03/24 14:42:52 UTC

[trafficcontrol] branch master updated: Support testing PostgreSQL 9.6 dumps under PostgreSQL 13 (#5673)

This is an automated email from the ASF dual-hosted git repository.

rawlin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 833af9f  Support testing PostgreSQL 9.6 dumps under PostgreSQL 13 (#5673)
833af9f is described below

commit 833af9f1fe342379ca3c85191ab63089465312ce
Author: Zach Hoffman <zr...@apache.org>
AuthorDate: Wed Mar 24 08:41:02 2021 -0600

    Support testing PostgreSQL 9.6 dumps under PostgreSQL 13 (#5673)
    
    * Use ${!var} for variable indirection
    
    * Quote variables
    
    * Remove lines creating schema `public`
    
    * Use dropdb/createdb instead of pg_restore --create option
    
    * Pass POSTGRES_VERSION as a build arg
    
    * Specify PostgreSQL connection parameters using environment variables
    
    * Exit on the first error that pg_restore encounters
---
 traffic_ops_db/test/docker/Dockerfile-db           |  5 ++++-
 traffic_ops_db/test/docker/Dockerfile-db-admin     |  3 ++-
 traffic_ops_db/test/docker/docker-compose.yml      |  4 ++++
 traffic_ops_db/test/docker/goose-config.sh         |  2 +-
 .../test/docker/initdb.d/90-load-dumps.sh          |  7 ++++--
 traffic_ops_db/test/docker/run-db-test.sh          | 26 +++++++++++++---------
 6 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/traffic_ops_db/test/docker/Dockerfile-db b/traffic_ops_db/test/docker/Dockerfile-db
index d023dc5..e2dc6c3 100644
--- a/traffic_ops_db/test/docker/Dockerfile-db
+++ b/traffic_ops_db/test/docker/Dockerfile-db
@@ -19,7 +19,10 @@
 # Dockerfile for trafficops db
 ############################################################
 
-FROM postgres:13.2
+ARG POSTGRES_VERSION=13.2
+FROM postgres:${POSTGRES_VERSION}
+ARG POSTGRES_VERSION=13.2
+ENV POSTGRES_VERSION=$POSTGRES_VERSION
 
 ENV POSTGRES_PASSWORD=twelve
 ENV POSTGRES_DB=traffic_ops
diff --git a/traffic_ops_db/test/docker/Dockerfile-db-admin b/traffic_ops_db/test/docker/Dockerfile-db-admin
index 7f58a81..323ce3c 100644
--- a/traffic_ops_db/test/docker/Dockerfile-db-admin
+++ b/traffic_ops_db/test/docker/Dockerfile-db-admin
@@ -19,8 +19,9 @@
 # Dockerfile to build Traffic Ops DB admin test environment
 ############################################################
 
-
 FROM centos:7
+ARG POSTGRES_VERSION=13.2
+ENV POSTGRES_VERSION=$POSTGRES_VERSION
 
 # NOTE: temporary workaround for removal of golang packages from CentOS 7 base repo
 RUN yum install -y \
diff --git a/traffic_ops_db/test/docker/docker-compose.yml b/traffic_ops_db/test/docker/docker-compose.yml
index 3b297ed..6b4ddbd 100644
--- a/traffic_ops_db/test/docker/docker-compose.yml
+++ b/traffic_ops_db/test/docker/docker-compose.yml
@@ -32,6 +32,8 @@ services:
     build:
       context: .
       dockerfile: Dockerfile-db
+      args:
+        POSTGRES_VERSION: ${POSTGRES_VERSION:-13.2}
     ports:
       - 5432
 
@@ -40,7 +42,9 @@ services:
       context: .
       dockerfile: Dockerfile-db-admin
       args:
+        POSTGRES_VERSION: ${POSTGRES_VERSION:-13.2}
         TRAFFIC_OPS_RPM: traffic_ops.rpm
     depends_on:
       - db
+
     image: trafficops-db-admin
diff --git a/traffic_ops_db/test/docker/goose-config.sh b/traffic_ops_db/test/docker/goose-config.sh
index 373760d..502830c 100755
--- a/traffic_ops_db/test/docker/goose-config.sh
+++ b/traffic_ops_db/test/docker/goose-config.sh
@@ -22,7 +22,7 @@
 envvars=( DB_SERVER DB_PORT DB_USER DB_USER_PASS DB_NAME )
 for v in $envvars
 do
-	if [[ -z $$v ]]; then echo "$v is unset"; exit 1; fi
+	if [[ -z "${!v}" ]]; then echo "$v is unset"; exit 1; fi
 done
 
 cat <<-EOF >/opt/traffic_ops/app/db/dbconf.yml
diff --git a/traffic_ops_db/test/docker/initdb.d/90-load-dumps.sh b/traffic_ops_db/test/docker/initdb.d/90-load-dumps.sh
index b72f018..a3044c2 100755
--- a/traffic_ops_db/test/docker/initdb.d/90-load-dumps.sh
+++ b/traffic_ops_db/test/docker/initdb.d/90-load-dumps.sh
@@ -22,10 +22,13 @@ set -ex
 
 d=/docker-entrypoint-initdb.d
 for dump in "$d"/*dump; do
-    [[ -f $dump ]] || break
+    [[ -f "$dump" ]] || break
     t=$(mktemp -p /tmp XXX.sql)
     # convert to sql -- can't load a dump until db initialized,  but sql works
     echo "Restoring from $dump"
-    pg_restore -f "$t" $dump
+    pg_restore -f "$t" "$dump"
+    if [[ "${POSTGRES_VERSION%%.*}" -gt 10 ]]; then
+      sed -i '/^CREATE SCHEMA public;$/d' "$t"
+    fi
     psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$DB_NAME" <"$t"
 done
diff --git a/traffic_ops_db/test/docker/run-db-test.sh b/traffic_ops_db/test/docker/run-db-test.sh
index beb4974..db7ae2b 100755
--- a/traffic_ops_db/test/docker/run-db-test.sh
+++ b/traffic_ops_db/test/docker/run-db-test.sh
@@ -20,9 +20,10 @@
 #
 DB_SERVER=db
 DB_PORT=5432
-DB_USER=traffic_ops
+DB_USER=postgres
 DB_USER_PASS=twelve
 DB_NAME=traffic_ops
+export PGHOST="$DB_SERVER" PGPORT="$DB_PORT" PGUSER="$DB_USER" PGDATABASE="$DB_NAME"
 
 # Write config files
 set -x
@@ -32,20 +33,23 @@ if [[ ! -r /goose-config.sh ]]; then
 fi
 . /goose-config.sh
 
-pg_isready=$(rpm -ql postgresql13 | grep bin/pg_isready)
-if [[ ! -x $pg_isready ]] ; then
-    echo "Can't find pg_ready in postgresql13"
+postgresql_package="$(<<<"postgresql${POSTGRES_VERSION}" sed 's/\.//g' |
+	sed -E 's/([0-9]{2})[0-9]+/\1/g'
+)"
+pg_isready=$(rpm -ql "$postgresql_package" | grep bin/pg_isready)
+if [[ ! -x "$pg_isready" ]] ; then
+    echo "Can't find pg_ready in ${postgresql_package}"
     exit 1
 fi
 
-while ! $pg_isready -h$DB_SERVER -p$DB_PORT -d $DB_NAME; do
+while ! $pg_isready -h"$DB_SERVER" -p"$DB_PORT" -d "$DB_NAME"; do
         echo "waiting for db on $DB_SERVER $DB_PORT"
         sleep 3
 done
 
-echo "*:*:*:postgres:$DB_USER_PASS" > $HOME/.pgpass
-echo "*:*:*:traffic_ops:$DB_USER_PASS" >> $HOME/.pgpass
-chmod 0600 $HOME/.pgpass
+echo "*:*:*:postgres:$DB_USER_PASS" > "${HOME}/.pgpass"
+echo "*:*:*:traffic_ops:$DB_USER_PASS" >> "${HOME}/.pgpass"
+chmod 0600 "${HOME}/.pgpass"
 
 export TO_DIR=/opt/traffic_ops/app
 
@@ -76,7 +80,7 @@ for d in $(get_db_dumps); do
     pg_restore -l "$d" > /dev/null || { echo "invalid DB dump: $d. Unable to list contents"; exit 1; }
 done
 
-cd $TO_DIR
+cd "$TO_DIR"
 db_is_empty=false
 old_db_version=$(get_current_db_version)
 [[ "$old_db_version" =~ ^failed ]] && { echo "get_current_db_version failed: $old_db_version"; exit 1; }
@@ -122,6 +126,8 @@ fi
 # test full restoration of the initial DB dump
 for d in $(get_db_dumps); do
     echo "testing restoration of DB dump: $d"
-    pg_restore --verbose --clean --if-exists --create -h $DB_SERVER -p $DB_PORT -U postgres -d traffic_ops < "$d" > /dev/null || { echo "DB restoration failed: $d"; exit 1; }
+    dropdb --echo --if-exists < "$d" > /dev/null || echo "Dropping DB ${DB_NAME} failed: $d"
+    createdb --echo < "$d" > /dev/null || echo "Creating DB ${DB_NAME} failed: $d"
+    pg_restore --verbose --clean --if-exists --exit-on-error -d "$DB_NAME" < "$d" > /dev/null || { echo "DB restoration failed: $d"; exit 1; }
 done