• 
      

    Enforce a sort order when collecting prefetched files for a diff.

    Review Request #11736 — Created July 21, 2021 and submitted

    Information

    Review Board
    release-4.0.x

    Reviewers

    When collecting FileDiffs in DiffSet.per_commit_files() and
    DiffSet.cumulative_files(), it was possible to get files that weren't
    in an expected order. These could come from the database in index order
    and not insertion order. While this generally wouldn't be a huge
    problem for general lookups of files (and wasn't a problem for all
    database setups), it could lead to out-of-order raw diffs, which could
    easily break anything trying to access them.

    This is an edge case for sure, and one where we don't have a good
    reproduction case. It seems to be dependent on the database.

    We now explicitly force an order based on the primary key. Currently,
    we're only enforcing them in these properties, and not as the default
    sort order for the model, in order to avoid any unintentional side
    effects.

    Unit tests pass.

    Tested in production with a customer who encountered this problem. We
    verified the fix.

    Summary ID
    Enforce a sort order when collecting prefetched files for a diff.
    When collecting `FileDiff`s in `DiffSet.per_commit_files()` and `DiffSet.cumulative_files()`, it was possible to get files that weren't in an expected order. These could come from the database in index order and not insertion order. While this generally wouldn't be a huge problem for general lookups of files (and wasn't a problem for all database setups), it could lead to out-of-order raw diffs, which could easily break anything trying to access them. This is an edge case for sure, and one where we don't have a good reproduction case. It seems to be dependent on the database. We now explicitly force an order based on the primary key. Currently, we're only enforcing them in these properties, and not as the default sort order for the model, in order to avoid any unintentional side effects.
    645d8b2d8042a64a3efdab122f8f788de0368ed4
    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-4.0.x (8c2e8aa)