• 
      

    Fix stale query caches when publishing review request drafts via the API.

    Review Request #8422 — Created Sept. 20, 2016 and submitted

    Information

    Review Board
    release-2.5.x
    bf2cbf6...

    Reviewers

    We recently hit an issue where Review Bot was unable to find any diffs
    on newly-created review requests. This ended up being due to stale query
    caches caused by select_related() and prefetch_related() queries from
    ReviewRequestResource.get_queryset(), which would get called by
    ReviewRequestDraftResource.update() prior to publishing.

    Those caches were intended to reduce queries when requesting a list of
    resources, but interfered with operations when working with single
    items. In this case, it resulted in any signal handlers for the
    published signals being unable to query for change descriptions or
    diffsets using relations from the review request, returning only stale
    results. While the diffset bug is relatively new, the change
    descriptions bug has been around a long while, and simply hasn't been
    hit in production yet.

    This change updates the queryset calculation to only select/prefetch
    related objects when returning a list of items.

    A unit test was added that reliably reproduces our Review Bot failure
    case (along with a failure involving change description query caches).

    Unit tests failed before the fix with the same failure case experienced
    with Review Bot. After the fix, unit tests pass.

    david
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-2.5.x (6f4b45f)