The v2.29.0 release of the SMS represents a significant technical milestone. The previous version of the SMS was based on RethinkDB, the developer of which went out of business in 2016. As of v2.29.0 the SMS has moved to MongoDB, a much more stable database.
However, the migration to a new database involves significant complexity and must be done carefully. Backups are required before proceeding and we recommend practicing this in a non-production environment before proceeding to a production migration.
<aside> ⚠️
Make sure to read through and follow these steps before updating the version of the SMS container. The new release is not backwards compatible, and care has to be taken to avoid downtime or data-loss.
At any time during this process, as long as the RethinkDB database is kept running, the upgrade can be rolled back by resetting the container entrypoint and downgrading the version.
</aside>
If you are using docker compose and one of our reference docker compose stacks, see the updated documentation at either Reference Compose Stack (Moodle) or Reference Compose Stack (Brightspace) for an idea of what your installation should look like at the end.
Migration steps are specific to your deployment but should follow the same pattern:
MONGO_URL environment variable that is accessible to the SMS installation. It should appear similar to the following format: MONGO_URL=mongodb://user:password@host:port/database-name?authSource=adminargs: ['tail', '-f', '/dev/null']) so the SMS does not start automatically on restart.rethinkdb dump command (depending on your environment, you may need to do this somewhere else, and copy the files into the SMS container). The dump will be a .tar.gz file. Extract this somewhere accessible to the SMS container.npm run migratetomongo </path/to/dump>, where /path/to/dump is the extracted folder containing the .json and .info files with the dumped table data.<aside> 💡
You may want to keep the database dump (or the Rethink instance itself) around for a bit, in case there were any errors with the migration, to avoid permanent data loss.
</aside>