Alvaro Herrera wrote:
Initially I'm aiming at a CRC32 sum for each block. FlushBuffer would calculate the checksum and store it in the CRC fork; ReadBuffer_common would read the page, calculate the checksum, and compare it to the one stored in the CRC fork.
There's one fundamental problem with that, related to the way our hint bits are written.
Currently, hint bit updates are not WAL-logged, and thus no full page write is done when only hint bits are changed. Imagine what happens if hint bits are updated on a page, but there's no other changes, and we crash so that only one half of the new page version makes it to disk (= torn page). The CRC would not match, even though the page is actually valid.
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers