While testing this, I noticed another serious bug in the OldSerXidSLRU handling: we never set the dirty-flag on any page. I believe the reason we haven't bumped into this in testing before is that when a new page is initialized, it's marked as dirty, so everything goes smoothly when we modify recently-zeroed pages. But if a page falls out of the cache, and is later read back in and modified, the modifications are lost.

The comments in SLRU could be more explicit about this. It was coincidental that I started to wonder where the pages are marked as dirty, I somehow thought the SLRU functions do that for you.

Fortunately the fix is very simple, we just need to set the page_dirty flag whenever we modify an slru page. But clearly this slru stuff needs more testing. It's pretty hard to write good repeatable test cases for these things, though.

--
  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

Reply via email to