Hi,

On Mon, 3 Aug 2026 at 15:25, Mihail Nikalayeu <[email protected]> wrote:
>
> While prototyping with a stress suite, I found memory corruption (and
> possibly data corruption) issues related to those changes.
>
> Issues is related to how the newer bfa3c4f106 affects the old 293e24e507.
>
> The 293e24e507 caches the metapage as a pointer, but
> read_stream_begin_relation may cause that pointer to become freed
> because of:
>
> hashbulkdelete()                                              hash.c:543
>   read_stream_begin_relation(READ_STREAM_MAINTENANCE, ...)
>     read_stream_begin_impl()                                  
> read_stream.c:806
>       get_tablespace_maintenance_io_concurrency(tablespace_id)
>         get_tablespace()                                      spccache.c
>           SearchSysCache1(TABLESPACEOID, ...)   ← cold cache → catalog scan
>             table_open(pg_tablespace)
>               LockRelationOid(1213)                           lmgr.c:136
>                 AcceptInvalidationMessages()    ← the flush point
>
> causing something like:
>
>    ERROR:  could not open file "base/5/16388.1" (target block 2139062145):
>            previous segment is only 66 blocks
>    CONTEXT:  while scanning relation "public.t"

You are right, nice catch!


> The simplest fix is to reorder a few lines of code - attached (with a
> test generated by Claude based on my instructions).

I agree with you, fix LGTM.


> But probably we should think broader to avoid such issues in the future.

I am not sure how we can enforce this with a code check. Perhaps we
can add a comment to the read_stream code, but I am not sure how
effective that would be.

--
Regards,
Nazir Bilal Yavuz
Microsoft


Reply via email to