Skip to content

Commit c895cd0

Browse files
committed
fix(database): improve postgres ready checks
1 parent 8232455 commit c895cd0

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

database/bin/boot

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,13 @@ until confd -onetime -node "$ETCD" -confdir /app --log-level error; do
5656
sleep $((ETCD_TTL/2)) # sleep for half the TTL
5757
done
5858

59+
PG_DATA_DIR=/var/lib/postgresql/9.3/main
60+
5961
# initialize database if one doesn't already exist
6062
# for example, in the case of a data container
61-
if [[ ! -d /var/lib/postgresql/9.3/main ]]; then
63+
if [[ ! -d $PG_DATA_DIR ]]; then
6264
chown -R postgres:postgres /var/lib/postgresql
63-
sudo -u postgres /usr/bin/initdb -D /var/lib/postgresql/9.3/main
65+
sudo -u postgres /usr/bin/initdb -D $PG_DATA_DIR
6466
fi
6567

6668
# ensure WAL log bucket exists
@@ -69,24 +71,24 @@ INIT_ID=$(etcdctl -C "$ETCD" get "$ETCD_PATH/initId" 2> /dev/null || echo none)
6971
echo "database: expecting initialization id: $INIT_ID"
7072

7173
initial_backup=0
72-
if [[ "$(cat /var/lib/postgresql/9.3/main/initialized 2> /dev/null)" != "$INIT_ID" ]]; then
74+
if [[ "$(cat $PG_DATA_DIR/initialized 2> /dev/null)" != "$INIT_ID" ]]; then
7375
echo "database: no existing database found or it is outdated."
7476
# check if there are any backups -- if so, let's restore
7577
# we could probably do better than just testing number of lines -- one line is just a heading, meaning no backups
7678
if [[ $(envdir /etc/wal-e.d/env wal-e --terse backup-list | wc -l) -gt "1" ]]; then
7779
echo "database: restoring from backup..."
78-
rm -rf /var/lib/postgresql/9.3/main
79-
sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-fetch /var/lib/postgresql/9.3/main LATEST
80-
chown -R postgres:postgres /var/lib/postgresql/9.3/main
81-
chmod 0700 /var/lib/postgresql/9.3/main
82-
echo "restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch \"%f\" \"%p\"'" | sudo -u postgres tee /var/lib/postgresql/9.3/main/recovery.conf >/dev/null
80+
rm -rf $PG_DATA_DIR
81+
sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-fetch $PG_DATA_DIR LATEST
82+
chown -R postgres:postgres $PG_DATA_DIR
83+
chmod 0700 $PG_DATA_DIR
84+
echo "restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch \"%f\" \"%p\"'" | sudo -u postgres tee $PG_DATA_DIR/recovery.conf >/dev/null
8385
else
8486
echo "database: no backups found. Initializing a new database..."
8587
initial_backup=1
8688
fi
8789
# either way, we mark the database as initialized
8890
INIT_ID=$(cat /proc/sys/kernel/random/uuid)
89-
echo "$INIT_ID" > /var/lib/postgresql/9.3/main/initialized
91+
echo "$INIT_ID" > $PG_DATA_DIR/initialized
9092
etcdctl --no-sync -C "$ETCD" set "$ETCD_PATH/initId" "$INIT_ID" >/dev/null
9193
else
9294
echo "database: existing data directory found. Starting postgres..."
@@ -111,15 +113,15 @@ trap on_exit INT TERM
111113
confd -node "$ETCD" -confdir /app --log-level error --interval 5 &
112114

113115
# wait for the service to become available
114-
sleep 1 && while [[ -z $(netstat -lnt | awk "\$6 == \"LISTEN\" && \$4 ~ \".5432\" && \$1 ~ \"tcp.?\"") ]] ; do sleep 1; done
116+
until sudo -u postgres psql -l -t >/dev/null 2>&1; do sleep 1; done
115117

116118
# perform a one-time reload to populate database entries
117119
/usr/local/bin/reload
118120

119121
if [[ "${initial_backup}" == "1" ]] ; then
120122
echo "database: performing an initial backup..."
121123
# perform an initial backup
122-
sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push /var/lib/postgresql/9.3/main
124+
sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push $PG_DATA_DIR
123125
fi
124126

125127
sudo -Eu postgres /app/bin/backup &
@@ -135,7 +137,7 @@ if [[ ! -z $EXTERNAL_PORT ]]; then
135137
set +e
136138

137139
# wait for the service to become available on PORT
138-
sleep 1 && while [[ -z $(netstat -lnt | awk "\$6 == \"LISTEN\" && \$4 ~ \".$PORT\" && \$1 ~ \"$PROTO.?\"") ]] ; do sleep 1; done
140+
until sudo -u postgres psql -l -t >/dev/null 2>&1; do sleep 1; done
139141

140142
# while the port is listening, publish to etcd
141143
while [[ ! -z $(netstat -lnt | awk "\$6 == \"LISTEN\" && \$4 ~ \".$PORT\" && \$1 ~ \"$PROTO.?\"") ]] ; do

database/templates/reload

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,3 @@ CREATE ROLE {{ getv "/deis/database/user" }} WITH LOGIN;
1414
ALTER ROLE {{ getv "/deis/database/user" }} WITH PASSWORD '{{ getv "/deis/database/password" }}';
1515
CREATE DATABASE {{ getv "/deis/database/name" }} WITH OWNER {{ getv "/deis/database/user" }};
1616
EOF
17-
18-
exit 0

0 commit comments

Comments
 (0)