• Thomas Munro's avatar
    Refactor the fsync queue for wider use. · 3eb77eba
    Thomas Munro authored
    Previously, md.c and checkpointer.c were tightly integrated so that
    fsync calls could be handed off and processed in the background.
    Introduce a system of callbacks and file tags, so that other modules
    can hand off fsync work in the same way.
    
    For now only md.c uses the new interface, but other users are being
    proposed.  Since there may be use cases that are not strictly SMGR
    implementations, use a new function table for sync handlers rather
    than extending the traditional SMGR one.
    
    Instead of using a bitmapset of segment numbers for each RelFileNode
    in the checkpointer's hash table, make the segment number part of the
    key.  This requires sending explicit "forget" requests for every
    segment individually when relations are dropped, but suits the file
    layout schemes of proposed future users better (ie sparse or high
    segment numbers).
    
    Author: Shawn Debnath and Thomas Munro
    Reviewed-by: Thomas Munro, Andres Freund
    Discussion: https://postgr.es/m/CAEepm=2gTANm=e3ARnJT=n0h8hf88wqmaZxk0JYkxw+b21fNrw@mail.gmail.com
    3eb77eba
sync.h 1.86 KB