This migration process currently has known issues. For Example, some metadata is not migrated or is migrated incorrectly.

Prepare R6 for migration

This migration requires:

  1. An R6 instance be stood up and run concurrently with an existing R5 instance. 
  2. The R5 fedora needs to be made accessible to the server running the R6 instance. (See the fedora migration step below.)
  3. The R6 instance should use the same authentication scheme as the R5. Otherwise there could be issues with users/roles.
  4. The R6 instance is empty. Run wipeout rake task to clean out R6 database, solr, and fedora.
# ensure that Fedora, Solr, and the DB are clean
# it will ask you to verify the targets are correct
bundle exec rake avalon:wipeout  

Dump R5 database

Data from your R5 database will be loaded directly into your R6 database then migrated for R6 in a later step. Role_map data will be needed in R6 for the Fedora migrate step, so it needs to be imported first.

# This example is for mysql. Adjust as necessary for your R5 database.
mysqldump -u avalonweb -p avalonweb --no-create-info --complete-insert --tables annotations api_tokens bookmarks courses identities ingest_batches playlist_items playlists role_maps  users > /tmp/avalon.r5.dump.sql

Load to R6 database

SSH into your R6 box and load the R5 database dump.

# this example assumes R6 database is mysql. Adjust as necessary for your R6 database.
bundle exec rails dbconsole
mysql> source /tmp/avalon.r5.dump

If you are a developer wanting to test your migration on sqlite locally...

Sqllite3 doesn't like mysql dump files so a transformation script needs to be run on it. Download, make it executable, and run it on the dump file.

chmod +x mysql2sqlite
./mysql2sqlite avalon.r5.dump.sql > avalon.r5.dump.sqlite
#then on r6
bundle exec rails dbconsole
sqlite> .read /tmp/avalon.r5.dump.sqlite

".read" returns "memory", which is good.

Migrate Fedora Objects

SSH tunnel or open up your fedora3 server to your new Avalon app:

# Choose an available local port to use as a mirror of your import source
# In this example 9999 is used. It must match the port used in fedora3.yml in the next step
ssh -L 9999:localhost:8983

keep the ssh mirror running in another tab as you do the next steps.

Setup config/fedora3.yml in your Avalon 6 app

The fedora3.yml should work without change, but if you do have trouble, here's an example fedora3.yml for the avalon demo server.

  user: fedoraAdmin
  password: <password>
  url: http://localhost:9999/fedora
  user: fedoraAdmin
  password: <password>
  url: http://localhost:9999/fedora
  user: fedoraAdmin
  password: <password>
  url: http://localhost:9999/fedora

Run the migration!

You can watch it run on your target avalon by going to <your avalon url>/admin/migration_report .

bundle exec rake avalon:migrate:repo

After this command is finished, look through the report and see which items have failed and troubleshoot using the errors listed.

Migrate Database Tables

# Run script to map fedora 3 pids in database to newly minted fedora 4 noids
bundle exec rake avalon:migrate:db

Delete Failed Bookmarks

#This will delete any bookmarks that point to failed items
bundle exec rake avalon:migrate:bookmark_cleanup