hmm
This commit is contained in:
1 parent
01f4ae8eea
commit
ef641e9fe2
3 files changed
+68
-4
No files matched your search
@@ -38,10 +38,39 @@ echo "=================================================="
|
|||||||
# Function: Create PostgreSQL user
|
# Function: Create PostgreSQL user
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
|
||||||
|
# Run a query as postgres admin. Returns psql's exit status so callers can tell
|
||||||
|
# "query returned nothing" apart from "could not connect".
|
||||||
|
pg_admin() {
|
||||||
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres -tAc "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wait until Postgres accepts connections (default: up to 60s).
|
||||||
|
wait_for_postgres() {
|
||||||
|
local tries="${1:-30}"
|
||||||
|
local i
|
||||||
|
for ((i = 1; i <= tries; i++)); do
|
||||||
|
if pg_admin "SELECT 1;" >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Postgres not reachable yet ($i/$tries), retrying..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
check_and_create_db() {
|
check_and_create_db() {
|
||||||
echo "check and create"
|
echo "check and create"
|
||||||
echo "Connecting as $POSTGRES_ADMIN_USER to $POSTGRES_HOST:$POSTGRES_PORT"
|
echo "Connecting as $POSTGRES_ADMIN_USER to $POSTGRES_HOST:$POSTGRES_PORT"
|
||||||
|
|
||||||
|
# -----------------------------
|
||||||
|
# Never guess: if Postgres cannot be queried we must NOT assume the DB is
|
||||||
|
# missing, because a restore wipes the filestore.
|
||||||
|
# -----------------------------
|
||||||
|
if ! wait_for_postgres; then
|
||||||
|
echo "ERROR: cannot connect to Postgres at $POSTGRES_HOST:$POSTGRES_PORT - skipping DB check, NO restore performed"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Check if user exists
|
# Check if user exists
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
@@ -54,9 +83,25 @@ fi
|
|||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Check if database exists
|
# Check if database exists
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
DB_EXISTS=$(PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='$UUID';" | grep -q 1 && echo "yes" || echo "no")
|
DB_RESULT=$(pg_admin "SELECT 1 FROM pg_database WHERE datname='$UUID';")
|
||||||
|
DB_RC=$?
|
||||||
|
if [ $DB_RC -ne 0 ]; then
|
||||||
|
echo "ERROR: DB existence query failed (rc=$DB_RC) - NO restore performed"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DB_RESULT" = "1" ]; then
|
||||||
|
DB_EXISTS="yes"
|
||||||
|
else
|
||||||
|
DB_EXISTS="no"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$DB_EXISTS" = "no" ]; then
|
if [ "$DB_EXISTS" = "no" ]; then
|
||||||
|
FILESTORE_HOST="/4server/data/$UUID/odoo/odoo-web-data/filestore"
|
||||||
|
if [ -d "$FILESTORE_HOST" ] && [ -n "$(ls -A "$FILESTORE_HOST" 2>/dev/null)" ]; then
|
||||||
|
echo "ERROR: database $UUID not found but a filestore exists at $FILESTORE_HOST - refusing automatic restore of default.zip (would delete the filestore). Restore manually if intended."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
/4server/sbin/ODOO_19/restore $UUID default.zip
|
/4server/sbin/ODOO_19/restore $UUID default.zip
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,14 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
source /4server/sbin/ODOO_19/ODOO_19.lib
|
||||||
|
|
||||||
|
# Abort BEFORE touching anything if Postgres is not reachable
|
||||||
|
if ! wait_for_postgres; then
|
||||||
|
echo "ERROR: cannot connect to Postgres at $POSTGRES_HOST:$POSTGRES_PORT - restore aborted, nothing was changed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
### DELETE AND CREATE DATABASE
|
### DELETE AND CREATE DATABASE
|
||||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres -c "
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres -c "
|
||||||
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
|
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
|
||||||
@@ -49,10 +57,21 @@ PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
|||||||
-c "ALTER ROLE \"$UUID\" CREATEDB;"
|
-c "ALTER ROLE \"$UUID\" CREATEDB;"
|
||||||
|
|
||||||
|
|
||||||
doas docker exec "$UUID" rm -rf /home/odoo/.local/share/Odoo/filestore
|
# Move the old filestore aside instead of deleting it; it is only removed after a successful load
|
||||||
|
OLD_FS="/home/odoo/.local/share/Odoo/.filestore.pre-restore"
|
||||||
|
doas docker exec "$UUID" rm -rf "$OLD_FS"
|
||||||
|
doas docker exec "$UUID" sh -c "[ -d /home/odoo/.local/share/Odoo/filestore ] && mv /home/odoo/.local/share/Odoo/filestore $OLD_FS; true"
|
||||||
doas docker exec "$UUID" rm -rf /root/.local/share/Odoo/filestore
|
doas docker exec "$UUID" rm -rf /root/.local/share/Odoo/filestore
|
||||||
|
|
||||||
doas docker exec "$UUID" odoo db --db_host beedb -w "$ODOO_DB_PASSWORD" -r "$UUID" load "$UUID" $FILENAME -f
|
if ! doas docker exec "$UUID" odoo db --db_host beedb -w "$ODOO_DB_PASSWORD" -r "$UUID" load "$UUID" $FILENAME -f; then
|
||||||
|
echo "ERROR: odoo db load failed - putting the old filestore back"
|
||||||
|
doas docker exec "$UUID" sh -c "[ -d $OLD_FS ] && rm -rf /home/odoo/.local/share/Odoo/filestore && mv $OLD_FS /home/odoo/.local/share/Odoo/filestore; true"
|
||||||
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||||
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
||||||
|
-c "ALTER ROLE \"$UUID\" NOCREATEDB;"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
doas docker exec "$UUID" rm -rf "$OLD_FS"
|
||||||
|
|
||||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||||
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
listen_addresses = '*'
|
listen_addresses = '*'
|
||||||
max_connections = 150
|
max_connections = 300
|
||||||
dynamic_shared_memory_type = posix
|
dynamic_shared_memory_type = posix
|
||||||
max_wal_size = 1GB
|
max_wal_size = 1GB
|
||||||
min_wal_size = 80MB
|
min_wal_size = 80MB
|
||||||
|
|||||||
Reference in new issue
Block a user