• Patrick Bajao's avatar
    Delete all issuable todos asynchronously when issuable is destroyed · 5a66c2e8
    Patrick Bajao authored
    The `Issuable::DestroyService` gets called for
    `DELETE /api/projects/:id/merge_requests/:merge_request_iid`
    endpoint.
    
    When deleting an issuable (`Issue` or `MergeRequest`), the
    associated Todo records need to be deleted as well. Before this
    change, it was calling `Todo#destroy` on each associated todo that
    results to N+1 issues.
    
    Deletion of todos is now being done asynchronously since it's
    possible that the deleted issuable has lots of associated todos
    and doing it synchronously can take time. This also makes it
    consistent with how we delete todos in other cases (other services
    can be found under `app/services/todos/destroy/` directory).
    
    Deletion is being done in batches to avoid statement timeouts in
    case there are a lot of todos to be deleted.
    5a66c2e8
issuable.rb 17.3 KB