Add automatic migration from FileDiff to FileDiffData on access.
Review Request #3815 — Created Jan. 30, 2013 and submitted
Add automatic migration from FileDiff to FileDiffData on access. In 1.7, we added the FileDiffData model, which stores the data of a diff (be it a standard diff or a parent diff) in one place, hashed, in order to reduce file size. This was only applied to newer diffs, and older ones still had their data retrieved from the FileDiff.diff64 or FileDiff.parent_diff64 fields. This change adds automatic migration to FileDiffData when accessing either FileDiff.diff or FileDiff.parent_diff. When accessed, we check if there's an appropriate hash for the given field, and if not, we create a FileDiffData for both and move the data over. This ensures that we only ever read data from one spot now. As older review requests are accessed, the database may shrink in size (in general, assuming there are some redundant bits of diff data). Ensuring that there's always a FileDiffData when dealing with diff data simplifies some of our assumptions and will allow some new pieces of common information we'll add to exist in only one place as well. Unit tests were added to ensure that the migration paths work as expected, and clean up after the old data.
All unit tests pass. Went through a bunch of my old review requests on my test server, some with parent diffs, and saw the diffs load correctly. Went through the server logs to make sure I saw the expected log entries.