• Tom Lane's avatar
    Avoid O(N^2) behavior in SyncPostCheckpoint(). · 08cfa598
    Tom Lane authored
    As in commits 6301c3ada and e9d9ba2a4, avoid doing repetitive
    list_delete_first() operations, since that would be expensive when
    there are many files waiting to be unlinked.  This is a slightly
    larger change than in those cases.  We have to keep the list state
    valid for calls to AbsorbSyncRequests(), so it's necessary to invent a
    "canceled" field instead of immediately deleting PendingUnlinkEntry
    entries.  Also, because we might not be able to process all the
    entries, we need a new list primitive list_delete_first_n().
    
    list_delete_first_n() is almost list_copy_tail(), but it modifies the
    input List instead of making a new copy.  I found a couple of existing
    uses of the latter that could profitably use the new function.  (There
    might be more, but the other callers look like they probably shouldn't
    overwrite the input List.)
    
    As before, back-patch to v13.
    
    Discussion: https://postgr.es/m/CD2F0E7F-9822-45EC-A411-AE56F14DEA9F@amazon.com
    08cfa598
list.c 37 KB