Wiederherstellungsprozess beim Migrieren von Uploads zu S3 abgebrochen

I’ve been running into issues trying to run a restore on our Staging Discourse instance. Staging is running v2.4.0.beta1 +36. Any idea where the breakdown might be or where to look? Thanks in advance!

Below is the end of the log output:

[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] ALTER TABLE
[2019-07-16 20:08:12] Migrating the database...
[2019-07-16 20:08:16] Reconnecting to the database...
[2019-07-16 20:08:16] Reloading site settings...
[2019-07-16 20:08:16] Disabling outgoing emails for non-staff users...
[2019-07-16 20:08:16] Clearing emoji cache...
[2019-07-16 20:08:16] Disabling readonly mode...
[2019-07-16 20:08:16] Clear theme cache
[2019-07-16 20:08:22] Extracting uploads...
[2019-07-16 20:08:40] Migrating uploads to S3...
[2019-07-16 20:08:46] Restore process was cancelled!
[2019-07-16 20:08:46] Trying to rollback...
[2019-07-16 20:08:46] Rolling back...
[2019-07-16 20:08:47] Cleaning stuff up...
[2019-07-16 20:08:47] Removing tmp '/var/www/discourse/tmp/restores/default/2019-07-16-200516' directory...
[2019-07-16 20:08:48] Unpausing sidekiq...
[2019-07-16 20:08:48] Marking restore as finished...

Is something wrong with your S3 config?

Do you see more output running discourse restore BACKUP_FILENAME from the command line?

I will check this next and report back. Thank you.

Below is the output after running discourse restore BACKUP_FILENAME from the command line. Any feedback is appreciated, thanks!

Disabling outgoing emails for non-staff users...

Clearing emoji cache...

Disabling readonly mode...

Clear theme cache

Extracting uploads...

Migrating uploads to S3...

Checking if default already migrated...

524 of 9474 uploads are not migrated to S3. S3 migration failed for db 'default'.

321 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.

Looking for missing uploads on: default

Fixing missing uploads: 

..........................................................................................................

116 post uploads are missing.

116 uploads are missing.

106 of 116 are old scheme uploads.

98 of 83342 posts are affected.

rake posts:missing_uploads identified 98 issues. S3 migration failed for db 'default'.

No posts require rebaking

Migrating uploads to S3 for 'default'...

Some uploads were not migrated to the new scheme. Please run these commands in the rails console

SiteSetting.migrate_to_new_scheme = true

Jobs::MigrateUploadScheme.new.execute(nil)

Restore process was cancelled!

Trying to rollback...

Rolling back...

Cleaning stuff up...

Removing tmp '/var/www/discourse/tmp/restores/default/2019-07-22-172918' directory...

Unpausing sidekiq...

Marking restore as finished...

Notifying 'system' of the end of the restore...

Finished!

[FAILED]

Restore done.

That’s a known problem. I’ll fix it tomorrow.

Following up on this front to see if the fix has been implemented? Thanks!

No, it’s not fixed yet. But, as a workaround, you could temporarily disable the enable_s3_uploads site setting before creating the backup.

Following up on the long term fix for this challenge. Thanks!

Was this ever resolved? I’m getting the same issue when trying to migrate to a new server. I’m going to try the workaround.

This just bit me for a relatively large migration.

Ich bin mir ziemlich sicher, dass ich gerade ebenfalls davon betroffen bin. Ich denke, dies sollte als Fehler markiert werden.
(Wenn es sich um ein anderes Problem handelt, kannst du es gerne in ein separates neues Thema verschieben.)

Es ist ziemlich wichtig, dass die Wiederherstellung von Backups funktioniert.


Beachte, dass der Grund für das Versagen nicht offensichtlich ist, wenn du die Admin-Oberfläche verwendest und neben dem Backup-Namen auf Wiederherstellen klickst. Du erhältst dann:

...
Migriere Uploads zu S3...
Wiederherstellungsprozess wurde abgebrochen!
...

Die vollständige Wiederherstellung über die Kommandozeile liefert mehr Details:

discourse enter app
discourse restore example-net-2020-01-02-033557-v20191219112000.tar.gz
...
Verbindung zur Datenbank wird wiederhergestellt...
Website-Einstellungen werden neu geladen...
Ausgehende E-Mails für Nicht-Mitarbeiter werden deaktiviert...
Emoji-Cache wird geleert...
Nur-Lese-Modus wird deaktiviert...
Theme-Cache wird geleert
Uploads werden extrahiert...
Uploads werden neu zugeordnet...
Remapping '//forum-example-net.s3.dualstack.eu-west-2.amazonaws.com/' zu '/uploads/default/'
optimized_images=3
uploads=1
Migriere Uploads zu S3...
Prüfe, ob 'default' bereits migriert wurde...
6 von 12 Uploads wurden nicht zu S3 migriert. S3-Migration für DB 'default' fehlgeschlagen.
1 Beitrag wurde nicht auf die neue S3-Upload-URL neu zugeordnet. S3-Migration für DB 'default' fehlgeschlagen.
Suche nach fehlenden Uploads auf: default

0 Beitrags-Uploads fehlen.
  Bitte stelle die folgenden Umgebungsvariablen bereit
    - DISCOURSE_S3_BUCKET
    - DISCOURSE_S3_REGION
    und entweder
    - DISCOURSE_S3_ACCESS_KEY_ID
    - DISCOURSE_S3_SECRET_ACCESS_KEY
    oder
    - DISCOURSE_S3_USE_IAM_PROFILE
Wiederherstellungsprozess wurde abgebrochen!
Rollback wird versucht...
Rollback wird durchgeführt...
Aufräumen...
Funktion aus dem Schema 'discourse_functions' wird entfernt
Verzeichnis '/var/www/discourse/tmp/restores/default/2020-01-06-222212' wird entfernt...
Sidekiq wird fortgesetzt...
Wiederherstellung wird als abgeschlossen markiert...
'System' wird über das Ende der Wiederherstellung informiert...
Fertig!
[FEHLGESCHLAGEN]
Wiederherstellung abgeschlossen.

Ich habe etwas Debug-Code in uploads.rake direkt vor „Bitte stelle die folgenden Umgebungsvariablen bereit

Meines Erachtens lautet die Annahme: Wenn Sie Uploads auf S3 haben, führen Sie ein rein datenbankbasiertes Backup durch, und es wird nicht fehlschlagen, da keine Uploads enthalten sind.

Stimmt, aber das hilft nicht, wenn das Backup, das du hast, die Uploads enthält.

Klarstellung: Das ist für mich gerade nicht kritisch wichtig. Ich kann die problematischen Zeilen auskommentieren und die Wiederherstellung abschließen, aber andere können das nicht.

Zustimmung. Und das Verschieben aller Uploads zu S3 ist eine ziemlich komplizierte Aufgabe und erfordert ein S3-CDN.

Es ist nicht nötig, dies in einen bug umzuwandeln. Das Thema liegt in meinem Verantwortungsbereich, und ich habe bereits eine enorme Menge an Zeit damit verbracht, den Wiederherstellungsprozess zu refaktorisieren, zahlreiche Tests hinzuzufügen und ihn zuverlässiger zu machen. Ich werde noch ein paar Anpassungen vornehmen, um die Wahrscheinlichkeit zu verringern, dass die Wiederherstellung nach S3 fehlschlägt, und um im Admin-UI mehr Informationen auszugeben.

Soweit ich weiß, wurde die Sicherung/Wiederherstellung überarbeitet, aber ich habe gerade festgestellt, dass dies immer noch ein Problem darstellt.
Ein Versuch auf beta11, eine Sicherung wiederherzustellen, bei der enable s3 uploads aktiviert war, schlägt immer noch fehl mit:

[2020-02-18 09:51:38] Wiederherstellung von Uploads, dies kann eine Weile dauern...
[2020-02-18 09:51:38] AUSNAHME: Bitte stellen Sie die folgenden Umgebungsvariablen bereit:
  - DISCOURSE_S3_BUCKET
  - DISCOURSE_S3_REGION
  und entweder
  - DISCOURSE_S3_ACCESS_KEY_ID
  - DISCOURSE_S3_SECRET_ACCESS_KEY
  oder
  - DISCOURSE_S3_USE_IAM_PROFILE

[2020-02-18 09:51:38] /var/www/discourse/lib/file_store/to_s3_migration.rb:34:in `s3_options_from_env'

Also sind S3-Uploads in der Datenbank aktiviert, aber keine S3-Backups?

Richtig, es geht um die Migration von Uploads.

Die S3-Zugangsdaten sind in der wiederhergestellten Datenbank vorhanden, sodass es nicht erforderlich ist, diese ebenfalls als Umgebungsvariable bereitzustellen.

Die Bereitstellung der Umgebungsvariablen führt ebenfalls zu einem Fehler:

Wiederherstellung von Uploads, dies kann eine Weile dauern...
Prüfen, ob db8015 bereits migriert wurde...
200 von 206 Uploads wurden nicht zu S3 migriert. S3-Migration für db 'db8015' fehlgeschlagen.
5 Beiträge wurden nicht auf die neue S3-Upload-URL umgemappt. S3-Migration für db 'db8015' fehlgeschlagen.
Keine Beiträge erfordern ein Neubacken.
Migration von Uploads zu S3 für 'db8015'...
Hochladen von Dateien zu S3...
 - Auflisten lokaler Dateien
 => 21 Dateien
 - Auflisten von S3-Dateien
. => 16 Dateien
 - Synchronisieren von Dateien mit S3
.....................
Aktualisieren der URLs in der Datenbank...
Entfernen alter optimierter Bilder...
Markieren aller Beiträge mit Lightboxen für ein Neubacken...
5 Beiträge wurden für ein Neubacken markiert
AUSNAHME: 183 von 206 Uploads wurden nicht zu S3 migriert. S3-Migration für db 'db8015' fehlgeschlagen.
/var/www/discourse/lib/file_store/to_s3_migration.rb:127:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:74:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:350:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:61:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:203:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:48:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:30:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:58:in `run'
script/discourse:143:in `restore'

Ich habe keine Ahnung, warum dies fehlschlägt.

Die meisten Uploads waren bereits in S3, daher sind die Angaben „200 von 206 Uploads wurden nicht zu S3 migriert

Das Mischen von lokalen Uploads mit auf S3 gespeicherten Uploads wird nicht unterstützt. Ja, ich weiß, es ist möglich, in einen solchen Zustand zu geraten, wenn jemand von lokalen Uploads auf S3 umstellt und die bestehenden Uploads nicht auf S3 migriert, aber das ist eine andere Geschichte…

Bei der Wiederherstellung eines Backups werden Uploads immer neu gemappt, wenn das System Änderungen erkennt, die die Upload-URLs beeinflussen. Dazu gehören der Wechsel zwischen Standalone- und Multisite-Betrieb, der Wechsel zwischen lokalen Uploads und S3 sowie Änderungen an den S3- und CDN-Einstellungen. Alle Uploads werden basierend auf den Einstellungen am korrekten Ort wiederhergestellt, entweder lokal oder auf S3.

Gelegentlich stoßen wir auf Backups, bei denen die automatische Neuabbildung und Migration zu S3 aus verschiedenen Gründen fehlschlägt. Sie können frühe Verbesserungen im Entwicklungszyklus von Version 2.5 erwarten.