• Heikki Linnakangas's avatar
    Get rid of the post-recovery cleanup step of GIN page splits. · 631118fe
    Heikki Linnakangas authored
    Replace it with an approach similar to what GiST uses: when a page is split,
    the left sibling is marked with a flag indicating that the parent hasn't been
    updated yet. When the parent is updated, the flag is cleared. If an insertion
    steps on a page with the flag set, it will finish split before proceeding
    with the insertion.
    
    The post-recovery cleanup mechanism was never totally reliable, as insertion
    to the parent could fail e.g because of running out of memory or disk space,
    leaving the tree in an inconsistent state.
    
    This also divides the responsibility of WAL-logging more clearly between
    the generic ginbtree.c code, and the parts specific to entry and posting
    trees. There is now a common WAL record format for insertions and deletions,
    which is written by ginbtree.c, followed by tree-specific payload, which is
    returned by the placetopage- and split- callbacks.
    631118fe
xlog_internal.h 9.43 KB