Boucle infinie lors de la mise à niveau de postgres

Hi! Each time I launch /launcher rebuild app I get the following message (even if I launch it again) :

UPGRADE OF POSTGRES COMPLETE
Old 9.5 database is stored at /shared/postgres_data_old
To complete the upgrade, rebuild again using:
./launcher rebuild app

What information do you need to help me?

PS: The first time I ran it, the command stoped because I needed more space

Temporarily, I used the templates/postgres.9.5.template.yml template to avoid downtime. The app is running again, but I’d like to finish the update.

When I do a cleanup I get the following message : Old PostgreSQL backup data cluster detected taking up 1.2G detected. Would you like to remove it? (Y/n):

Sounds like a question for @tgxworld, but I am guessing that it failed due to lack of space but somehow didn’t catch that the upgrade had failed.

How much space do you have? And how big is your database?

1 « J'aime »

Can you provide me with the full log generated during the rebuild? Thank you!

3 « J'aime »

Je rencontre le même problème depuis plusieurs mois et je ne peux pas mettre à niveau mon installation.

Cela boucle et ne réussit jamais. L’un des problèmes lors de la commande rebuild app est le suivant :
mv: impossible de déplacer '/shared/postgres_data' vers '/shared/postgres_data_old': Périphérique ou ressource occupé

En entrant dans le Docker, la version de PostgreSQL que j’ai est :

/usr/lib/postgresql/10/bin/postgres --version
postgres (PostgreSQL) 10.14 (Debian 10.14-1.pgdg100+1)

Voici les erreurs que je reçois :

FAILED

--------------------

Pups::ExecError: /root/upgrade_postgres a échoué avec le retour #<Process::Status: pid 47 exit 1>

Emplacement de l'échec : /pups/lib/pups/exec_command.rb:112:in `spawn'

exec a échoué avec les paramètres "/root/upgrade_postgres"

0c74c9de4d4315b63c0ef9055631f38c0cf4b3dd0be6500fd83ca0a5b13e0d9d

** ÉCHEC DU BOOTSTRAP ** veuillez défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.

./discourse-doctor peut aider à diagnostiquer le problème.

Il semble y avoir un problème dans le script /pups/lib/pups/exec_command.rb lors de l’exécution de spawn.

Je peux cependant démarrer l’application :
./launcher start app

Voici les fichiers que j’ai sous /shared :

total 48
drwxr-xr-x 12 root      root     4096 Jan 12 13:12 .
drwxr-xr-x 57 root      root     4096 Dec 15 09:09 ..
drwxr-xr-x  3 discourse www-data 4096 Aug 20  2019 backups
drwxr-xr-x  4 root      root     4096 Aug 19  2019 log
drwxr-xr-x  2 postgres  postgres 4096 Aug 19  2019 postgres_backup
drwx------ 20 postgres  postgres 4096 Jan 12 13:14 postgres_data
drwx------ 19 postgres  postgres 4096 Jan 12 13:12 postgres_data_new
drwxrwxr-x  5 postgres  postgres 4096 Jan 12 13:14 postgres_run
drwxr-xr-x  2 redis     redis    4096 Jan 12 13:07 redis_data
drwxr-xr-x  4 root      root     4096 Aug 19  2019 state
drwxr-xr-x  4 discourse www-data 4096 Jan 12 13:14 tmp
drwxr-xr-x  4 discourse www-data 4096 Sep  8  2019 uploads

Que puis-je faire ?

Votre répertoire partagé est-il une sorte de montage réseau ?

1 « J'aime »

Non, mais j’ai réussi à le faire finalement !

Les deux commandes mv dans templates/postgres.template.yml ne sont pas vérifiées. Le script affiche toujours UPGRADE OF POSTGRES COMPLETE, ce qui est faux lorsque le déplacement échoue.

J’ai supprimé les commandes, puis déplacé manuellement les répertoires après être entré dans Docker, et la prochaine commande rebuild app fonctionne comme avant ! Je suis si heureux :smiley:
Merci.

3 « J'aime »

J’ai rencontré ce problème lors de la dernière mise à niveau de PostgreSQL 13 vers 15.

Dans notre déploiement, notre répertoire /shared/postgres_data est monté sur un périphérique de stockage NVMe plus rapide, le déplacement a donc échoué avec un message d’erreur Device or resource busy.

Nous avons résolu ce problème en corrigeant le modèle postgres comme suit :

diff --git a/templates/postgres.template.yml b/templates/postgres.template.yml
index c24bfe6..03813c4 100644
--- a/templates/postgres.template.yml
+++ b/templates/postgres.template.yml
@@ -139,8 +139,10 @@ run:
           fi

-         mv /shared/postgres_data /shared/postgres_data_old
-         mv /shared/postgres_data_new /shared/postgres_data
+         mkdir /shared/postgres_data_old
+         mv /shared/postgres_data/* /shared/postgres_data_old
+         mv /shared/postgres_data_new/* /shared/postgres_data
+         rmdir /shared/postgres_data_new

Au lieu de tenter de manipuler le répertoire lui-même, déplacez simplement le contenu.

Veuillez envisager d’intégrer cette modification pour améliorer la fiabilité des mises à niveau de la base de données.

1 « J'aime »

Je pense que cela pourrait être lié : FIX: improve postgres upgrade reliability by jcharaoui · Pull Request #989 · discourse/discourse_docker · GitHub

2 « J'aime »

La PR a été fusionnée :+1:

1 « J'aime »

Ce sujet a été automatiquement fermé après 6 jours. Les nouvelles réponses ne sont plus autorisées.