Thread

  1. Re: Streamify more code paths

    Xuneng Zhou <xunengzhou@gmail.com> — 2025-12-30T02:43:17Z

    Hi,
    
    On Tue, Dec 30, 2025 at 9:51 AM Xuneng Zhou <xunengzhou@gmail.com> wrote:
    >
    > Hi,
    >
    > Thanks for looking into this.
    >
    > On Mon, Dec 29, 2025 at 6:58 PM Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:
    > >
    > > Hi,
    > >
    > > On Sun, 28 Dec 2025 at 14:46, Xuneng Zhou <xunengzhou@gmail.com> wrote:
    > > >
    > > > Hi,
    > > > >
    > > > > Two more to go:
    > > > > patch 5: Streamify log_newpage_range() WAL logging path
    > > > > patch 6: Streamify hash index VACUUM primary bucket page reads
    > > > >
    > > > > Benchmarks will be conducted soon.
    > > > >
    > > >
    > > > v6 in the last message has a problem and has not been updated. Attach
    > > > the right one again. Sorry for the noise.
    > >
    > > 0003 and 0006:
    > >
    > > You need to add 'StatApproxReadStreamPrivate' and
    > > 'HashBulkDeleteStreamPrivate' to the typedefs.list.
    >
    > Done.
    >
    > > 0005:
    > >
    > > @@ -1321,8 +1341,10 @@ log_newpage_range(Relation rel, ForkNumber forknum,
    > >          nbufs = 0;
    > >          while (nbufs < XLR_MAX_BLOCK_ID && blkno < endblk)
    > >          {
    > > -            Buffer        buf = ReadBufferExtended(rel, forknum, blkno,
    > > -                                                 RBM_NORMAL, NULL);
    > > +            Buffer        buf = read_stream_next_buffer(stream, NULL);
    > > +
    > > +            if (!BufferIsValid(buf))
    > > +                break;
    > >
    > > We are loosening a check here, there should not be a invalid buffer in
    > > the stream until the endblk. I think you can remove this
    > > BufferIsValid() check, then we can learn if something goes wrong.
    >
    > My concern before for not adding assert at the end of streaming is the
    > potential early break in here:
    >
    > /* Nothing more to do if all remaining blocks were empty. */
    > if (nbufs == 0)
    >     break;
    >
    > After looking more closely, it turns out to be a misunderstanding of the logic.
    >
    > > 0006:
    > >
    > > You can use read_stream_reset() instead of read_stream_end(), then you
    > > can use the same stream with different variables, I believe this is
    > > the preferred way.
    > >
    > > Rest LGTM!
    > >
    >
    > Yeah, reset seems a more proper way here.
    >
    
    Run pgindent using the updated typedefs.list.
    
    -- 
    Best,
    Xuneng