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