I am currently maintaining a Review Board server (https://www.reviewboard.org/) and one of the big pain points is scheduling upgrades.
Currently the process is:
- Take the server down and send all users an email notifying them that all Review Board services will be down.
- Run the upgrade script provided by the Review Board maintainers which could take hours if there are many database evolutions as there are many users.
- Bring the server back up after significant down time (sometimes 5+ hours).
Are there better known solutions when upgrading 3rd party software than that above to minimize downtime?
My theory is that you can:
- Create a separate copy of the current installation of Review Board along with a dumped database from some time (X).
- Perform the upgrade on the duplicated installation.
- Take the server down (for a much shorter time than in the current process) and email users. Check the current time (Y) and see determine all additional changes to the database since time (X).
- Apply the database evolutions to just the diff of changes between time (X) and time (Y). Then, insert the missing database rows.
The point I am struggling with is implementing steps 3 and 4 as these are not provided by the Review Board maintainers. Are there already prebuilt tools to help with these issues?
Additional Details:
I am using a MySQL database to back Review Board written in Python.