A recent change to Phabricator causes it to apply a massive schema migration on upgrade.
- Find history on this change in T1191.
- Find a discussion of this new process in **[[ https://secure.phabricator.com/book/phabricator/article/storage_adjust/ | Managing Storage Adjustments ]]**.
- Report issues with adjustment here.
- Read the rest of this task for a general overview and introduction.
**Motivation**: In general, this migration changes columns with `utf8` collation to use `utf8mb4` (on most systems). The primary goal of this change is to enable support for 4-byte unicode characters, including emoji. Beyond emoji not working in comments, one major issue this currently causes is difficulty importing repositories containing emoji or other 4-byte characters anywhere in a commit message. For history and context, see T1191.
**What to Expect**: After applying patches, `bin/storage upgrade` will now apply schema adjustments. The first time you run the script it will apply these adjustments to almost the entire database, which may take some time (it took about 35 minutes on this install). You should plan for some downtime. You can learn more about the process in [[ https://secure.phabricator.com/book/phabricator/article/storage_adjust/ | Managing Storage Adjustments ]].
This high-cost adjustment workflow is a one-time migration. The adjustment workflow will continue to run going forward, but should normally take only a few seconds after this first major adjustment.
**Adjustment is Mostly Resumable**: If adjustment takes way longer than you expect or you run into issues (like a surprise server restart or running out of disk space), it's generally safe to cancel it (or resume it if the cancel was forced). You can fix the issues and resume where you left off safely.
It's also possible to cancel adjustment and start Phabricator without completing the process, but this is not recommended and carries a low risk that something weird will happen. (It should broadly be safe, but we aren't testing it and can't guarantee it works properly.)
**Encountering Issues?** If you're hitting issues, let us know by leaving a comment here. We've adjusted this install and run with adjustments for several weeks, and a handful of installs have voluntarily run adjustment ahead of general release without any real issues, so we have reasonable confidence that this process works in common cases. However, there may be edge cases we haven't seen. The adjustment process also depends on the version of MySQL you're using, so we might not deal with some versions correctly.
**After Adjustment**: After adjustment, emoji will work properly. 😸