• Andres Freund's avatar
    Fix several weaknesses in slot and logical replication on-disk serialization. · ec5896ae
    Andres Freund authored
    Heikki noticed in 544E23C0.8090605@vmware.com that slot.c and
    snapbuild.c were missing the FIN_CRC32 call when computing/checking
    checksums of on disk files. That doesn't lower the the error detection
    capabilities of the checksum, but is inconsistent with other usages.
    
    In a followup mail Heikki also noticed that, contrary to a comment,
    the 'version' and 'length' struct fields of replication slot's on disk
    data where not covered by the checksum. That's not likely to lead to
    actually missed corruption as those fields are cross checked with the
    expected version and the actual file length. But it's wrong
    nonetheless.
    
    As fixing these issues makes existing on disk files unreadable, bump
    the expected versions of on disk files for both slots and logical
    decoding historic catalog snapshots.  This means that loading old
    files will fail with
    ERROR: "replication slot file ... has unsupported version 1"
    and
    ERROR: "snapbuild state file ... has unsupported version 1 instead of
    2" respectively. Given the low likelihood of anybody already using
    these new features in a production setup that seems acceptable.
    
    Fixing these issues made me notice that there's no regression test
    covering the loading of historic snapshot from disk - so add one.
    
    Backpatch to 9.4 where these features were introduced.
    ec5896ae
slot.c 33 KB