From f6cf1219669a2d727385a9f8bf42388fafb62b57 Mon Sep 17 00:00:00 2001 From: OdooSky Bot Date: Sat, 2 May 2026 22:37:23 +0300 Subject: [PATCH] db-init: rename cloned source database to target's instance code (#347 fast-path correctness) --- templates/odoo-deployment.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/templates/odoo-deployment.yaml b/templates/odoo-deployment.yaml index ce4ff68..bbcd065 100644 --- a/templates/odoo-deployment.yaml +++ b/templates/odoo-deployment.yaml @@ -69,6 +69,7 @@ spec: - | set -eu DBNAME="{{ .Values.instance.code }}" + CLONE_FROM="{{ .Values.instance.cloneFromCode | default "" }}" echo "── ensuring database $DBNAME exists ──" # Wait for PG to accept connections (max 60s) for i in $(seq 1 30); do @@ -76,6 +77,25 @@ spec: echo "(waiting for postgres, $i/30)" sleep 2 done + # VolumeClone fast-path rename (ADR 0003 phase 4): when + # spawn-env clones a source PG PVC, the data dir carries + # source's database name. Rename it to target's instance + # code BEFORE the existence check below, so the rest of + # the script sees the correct DB name. Idempotent — if + # CLONE_FROM == DBNAME or target already exists, skip. + if [ -n "$CLONE_FROM" ] && [ "$CLONE_FROM" != "$DBNAME" ]; then + if PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \ + "SELECT 1 FROM pg_database WHERE datname = '$CLONE_FROM'" | grep -q 1; then + if ! PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \ + "SELECT 1 FROM pg_database WHERE datname = '$DBNAME'" | grep -q 1; then + echo "── renaming cloned database $CLONE_FROM → $DBNAME ──" + PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres \ + -c "ALTER DATABASE \"$CLONE_FROM\" RENAME TO \"$DBNAME\"" + else + echo "(both $CLONE_FROM and $DBNAME exist — leaving rename to operator)" + fi + fi + fi # createdb is idempotent if we wrap with an existence check. if PGPASSWORD="$PASSWORD" psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -tAc \ "SELECT 1 FROM pg_database WHERE datname = '$DBNAME'" | grep -q 1; then