Multisite restores uploads to 'default' instead of actual db name

On Discourse latest beta, docker install, multisite.

Trying to restore a backup with original database REDACTED to current database db8015. Uploads end up in default, both on filesystem and in database.

This happens both when the restore is triggered from the GUI, and when the restore is done on the command line using RAILS_DB=db8015 RAILS_ENV=production script/discourse restore.

During the restore process, RailsMultisite::ConnectionManagement.current_db changes from the correct database to default. I have been able to pin this down to [Rake::Task['db:_dump'].invoke in db.rake](discourse/lib/tasks/db.rake at master · discourse/discourse · GitHub). )

Before that line, RailsMultisite::ConnectionManagement.current_db has the correct value (db8015), after that line, it is default.

Looks like this fix has broken production somehow @sam?

Logs:

[STARTED]
'DHSupport' has started the restore!
Marking restore as running...
Making sure /var/www/discourse/tmp/restores/db8015/2019-10-11-104940 exists...
Copying archive to tmp directory...
Unzipping archive, this may take a while...
No metadata file to extract.
Validating metadata...
  Current version: 20191007140446
  Restored version: 20190908234054
Extracting dump file...
Creating missing functions in the discourse_functions schema
Cannot restore into different schema, restoring in-place
Enabling readonly mode...
Pausing sidekiq...

[deleted a lot of irrelevant stuff]

Clear theme cache
Extracting uploads...
Remapping uploads...
Remapping 'uploads/REDACTED' to 'uploads/default'
Optimizing site icons...
Posts will be rebaked by a background job in sidekiq. You will see missing images until that has completed.
You can expedite the process by manually running "rake posts:rebake_uncooked_posts"
Executing the after_restore_hook...
Cleaning stuff up...
Dropping function from the discourse_functions schema
Removing tmp '/var/www/discourse/tmp/restores/db8015/2019-10-11-104940' directory...
Unpausing sidekiq...
Marking restore as finished...
4 Likes

Is this still a problem @sam?

Just to clarify, repro is:

  • Create a multisite in a docker container

  • Backup one of the multisites

  • In a new docker container restore it

  • Uploads are in the wrong place

@kris.kotlarek can you repro this on local and see if you can fix it?

I suspect we will be hit by this in future.

2 Likes

Only the destination container needs to be multisite to repro this.

  • Create a forum in a docker container
  • Create a backup
  • In a new multisite docker container restore it
  • Uploads are in the wrong place
4 Likes