Re: Add pg_buffercache_evict_all() and pg_buffercache_mark_dirty[_all]() functions
Nazir Bilal Yavuz <byavuz81@gmail.com>
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Aidar Imamov <a.imamov@postgrespro.ru>,
Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, koshy44@gmail.com
Date: 2025-04-11T08:02:28Z
Lists: pgsql-hackers
Hi,
Thank you for looking into this!
On Thu, 10 Apr 2025 at 23:06, Robert Haas <robertmhaas@gmail.com> wrote:
>
> On Tue, Mar 18, 2025 at 6:03 PM Aidar Imamov <a.imamov@postgrespro.ru> wrote:
> > > for (int buf = 1; buf < NBuffers; buf++)
> > Mb it would be more correct to use <= NBuffers?
>
> I agree that (int buf = 1; buf < NBuffers; buf++) isn't right because
> that iterates one fewer times than the number of buffers. What was
> ultimately committed was:
>
> + for (int buf = 1; buf <= NBuffers; buf++)
> + {
> + BufferDesc *desc = GetBufferDescriptor(buf - 1);
>
> Curiously, there is no other instance of <= NBuffers in the code.
> Elsewhere we instead do:
>
> for (i = 0; i < NBuffers; i++)
> {
> BufferDesc *bufHdr = GetBufferDescriptor(i);
>
> Or in BufferSync:
>
> for (buf_id = 0; buf_id < NBuffers; buf_id++)
> {
> BufferDesc *bufHdr = GetBufferDescriptor(buf_id);
>
> Nonetheless what was committed seems pretty defensible, because we
> have lots of other places that do GetBufferDescriptor(buffer - 1) and
> similar. Alternating between 0-based indexing and 1-based indexing
> like this seems rather error-prone somehow. :-(
I understand your point. I did it like that because bufferids start
from 1 and go to NBuffers inclusive in the pg_buffercache view, so it
seems more natural to me to implement it like that. I am okay to
replace these loops with [1] to make it standart everywhere:
[1]
for (int buf = 0; buf < NBuffers; buf++)
{
BufferDesc *desc = GetBufferDescriptor(buf);
--
Regards,
Nazir Bilal Yavuz
Microsoft
Commits
-
pg_buffercache: Add pg_buffercache_mark_dirty{,_relation,_all}()
- 9ccc049dfe65 19 (unreleased) landed
-
doc: Add missing tags in pg_buffercache page
- c75bf57a90e0 19 (unreleased) landed
-
Add routines for marking buffers dirty efficiently
- 9660906dbd69 19 (unreleased) landed
-
Add pg_buffercache_evict_{relation,all} functions
- dcf7e1697ba7 18.0 landed