• Michael Paquier's avatar
    Handle interrupts within a transaction context in REINDEX CONCURRENTLY · 8270a0d9
    Michael Paquier authored
    Phases 2 (building the new index) and 3 (validating the new index)
    checked for interrupts outside a transaction context, having as
    consequence to not release session-level locks taken on the parent
    relation and the old and new indexes processed.  This could for example
    be triggered with statement_timeout and a bad timing, and would issue
    confusing error messages when shutting down the session still holding
    the locks (note that an assertion failure would be triggered first), on
    top of more issues with concurrent sessions trying to take a lock that
    would interfere with the SHARE UPDATE EXCLUSIVE locks hold here.
    
    This moves all the interruption checks inside a transaction context.
    Note that I have manually tested all interruptions to make sure that
    invalid indexes can be cleaned up properly.  Partition indexes still
    have issues on their own with some missing dependency handling, which
    will be dealt with in a follow-up patch.
    
    Reported-by: Justin Pryzby
    Author: Michael Paquier
    Discussion: https://postgr.es/m/20191013025145.GC4475@telsasoft.com
    Backpatch-through: 12
    8270a0d9
indexcmds.c 106 KB