Re: Using read stream in autoprewarm

Matheus Alcantara <matheusssilv97@gmail.com>

From: Matheus Alcantara <matheusssilv97@gmail.com>
To: Nazir Bilal Yavuz <byavuz81@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-11-28T16:45:40Z
Lists: pgsql-hackers
On Wednesday, November 27th, 2024 at 11:19 AM, Nazir Bilal Yavuz 
<byavuz81@gmail.com> wrote:
 > > v2-0001-Use-read-stream-in-autoprewarm.patch
 > > + bool *rs_have_free_buffer = per_buffer_data;
 > > +
 > > +
 > > + *rs_have_free_buffer = true;
 > > +
 > >
 > > Not sure if I understand why this variable is needed, it seems that 
it is only
 > > written and never read? Just as comparison, the 
block_range_read_stream_cb
 > > callback used on pg_prewarm seems to not use the per_buffer_data 
parameter.
 >
 >
 > Actually, it is read in the main loop of the
 > autoprewarm_database_main() function:
 >
 > /* There are no free buffers left in shared buffers, break the loop. */
 > else if (!(*rs_have_free_buffer))
 > break;
 >
 > apw_read_stream_next_block() callback function sets
 > rs_have_free_buffer's value to false when there is no free buffer left
 > in the shared buffers. And the code above terminates the main loop in
 > the autoprewarm_database_main() function when it is set to false.
 >
 > block_range_read_stream_cb() callback is used when the callback only
 > needs to loop over the block numbers. However, for the autoprewarm
 > case; the callback function needs to do additional checks so another
 > callback and the use of this variable are required.

Ohh, I see, thanks very much for the explanation.

 > v3 is attached.

Thanks.

I don't know if there is another way that this patch could be tested? 
Looking
forward on other reviews on this.

--
Matheus Alcantara
EDB: https://www.enterprisedb.com




Commits

  1. Fix autoprewarm neglect of tablespaces