• Andres Freund's avatar
    Add defenses against pre-crash files to BufFileOpenShared(). · 923e8dee
    Andres Freund authored
    Crash restarts currently don't clean up temporary files, as a debugging aid.
    If a left-over file happens to have the same name as a segment file we're
    trying to create, we'll just truncate and reuse it, but there is a problem:
    BufFileOpenShared() determines how many segment files exist by trying to open
    .0, .1, .2, ... until it finds no more files.  It might be confused by a junk
    file that has the next segment number.  To defend against that, make sure we
    always create a gap after the end file by unlinking the following name if it
    exists.  Also make it an error to try to open a BufFile that doesn't exist
    (has no segment 0), so as not to encourage the development of client code
    that depends on an interface that we can't reliably provide.
    
    Author: Thomas Munro
    Reviewed-By: Andres Freund
    Discussion: https://postgr.es/m/CAEepm%3D2jhCbC_GFQJaaDhWxLB4EXtT3vVd5czuRNaqF5CWSTog%40mail.gmail.com
    923e8dee
buffile.c 20.5 KB