Re: Bug #613: Sequence values fall back to previously chec
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: "'Ben Grimm'" <bgrimm@zaeon.com>
Cc: "Vadim Mikheev" <vmikheev@sectorbase.com>, "Tom Pfau" <T.Pfau@emCrit.com>, "Bruce Momjian" <pgman@candle.pha.pa.us>, pgsql-bugs@postgresql.org, pgsql-hackers@postgresql.org
Date: 2002-03-15T14:39:04Z
Lists: pgsql-bugs, pgsql-hackers
Attachments
- (unnamed) (text/plain)
Attached is a patch against current CVS that fixes both of the known problems with sequences: failure to flush XLOG after a transaction that only does "SELECT nextval()", and failure to force a new WAL record to be written on the first nextval after a checkpoint. (The latter uses Vadim's idea of looking at the sequence page LSN.) I haven't tested it really extensively, but it seems to cure the reported problems. Some notes: 1. I found what I believe is another bug in the sequence logic: fetch = log = fetch - log + SEQ_LOG_VALS; should be fetch = log = fetch + SEQ_LOG_VALS; I can't see any reason to reduce the number of values prefetched by the number formerly prefetched. Also, if the sequence's "cache" setting is large (more than SEQ_LOG_VALS), the original code could easily fail to fetch as many values as it was supposed to cache, let alone additional ones to be prefetched and logged. 2. I renamed XLogCtl->RedoRecPtr to SavedRedoRecPtr, and renamed the associated routines to SetSavedRedoRecPtr/GetSavedRedoRecPtr, in hopes of reducing confusion. 3. I believe it'd now be possible to remove SavedRedoRecPtr and SetSavedRedoRecPtr/GetSavedRedoRecPtr entirely, in favor of letting the postmaster fetch the updated pointer with GetRedoRecPtr just like a backend would. This would be cleaner and less code ... but someone might object that it introduces a risk of postmaster hangup, if some backend crashes whilst holding info_lck. I consider that risk minuscule given the short intervals in which info_lck is held, but it can't be denied that the risk is not zero. Thoughts? Comments? Unless I hear objections I will patch this in current and the 7.2 branch. (If we agree to remove SavedRedoRecPtr, though, I don't think we should back-patch that change.) regards, tom lane