Loop infinito durante atualização do 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 curtida

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

3 curtidas

Tenho enfrentado o mesmo problema há vários meses e não consigo atualizar minha instalação.

Ele entra em um loop e nunca tem sucesso. Um dos problemas durante o rebuild app é este:
mv: não é possível mover '/shared/postgres_data' para '/shared/postgres_data_old': Dispositivo ou recurso ocupado

Ao entrar no Docker, a versão do PostgreSQL que tenho é:

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

Estes são os erros que recebo:

FALHA

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

Pups::ExecError: /root/upgrade_postgres falhou com retorno #<Process::Status: pid 47 exit 1>

Localização da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'

exec falhou com os parâmetros "/root/upgrade_postgres"

0c74c9de4d4315b63c0ef9055631f38c0cf4b3dd0be6500fd83ca0a5b13e0d9d

** FALHA NO BOOTSTRAP ** por favor, role para cima e procure mensagens de erro anteriores, pode haver mais de uma.

./discourse-doctor pode ajudar a diagnosticar o problema.

Parece que há um problema no script /pups/lib/pups/exec_command.rb executando spawn.

No entanto, consigo iniciar o aplicativo:
./launcher start app

Estes são os arquivos que tenho em /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

O que posso fazer?

Seu diretório compartilhado é algum tipo de montagem de rede?

1 curtida

Não, mas consegui fazer isso finalmente!

Os dois comandos mv em templates/postgres.template.yml não são verificados quanto à sua execução correta. O script sempre diz UPGRADE OF POSTGRES COMPLETE, o que não é verdade quando a movimentação falha.

Removi os comandos, movi os diretórios manualmente após entrar no Docker, e o próximo rebuild app está funcionando como antes! Estou tão feliz :smiley:
Obrigado.

3 curtidas

Encontrei este problema durante a atualização mais recente do PostgreSQL de 13 para 15.

Em nossa implantação, nosso diretório /shared/postgres_data é montado em um dispositivo de armazenamento NVMe mais rápido, então movê-lo falhou com uma mensagem de erro Device or resource busy.

Corrigimos isso corrigindo o template do postgres da seguinte forma:

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

Em vez de tentar manipular o próprio diretório, apenas mova os conteúdos.

Por favor, considere integrar esta alteração para melhorar a confiabilidade das atualizações do banco de dados.

1 curtida

Eu acho que isso pode estar relacionado: FIX: improve postgres upgrade reliability by jcharaoui · Pull Request #989 · discourse/discourse_docker · GitHub

2 curtidas

O PR foi mesclado :+1:

1 curtida

Este tópico foi fechado automaticamente após 6 dias. Novas respostas não são mais permitidas.