Re: Minimal logical decoding on standbys
От | Drouvot, Bertrand |
---|---|
Тема | Re: Minimal logical decoding on standbys |
Дата | |
Msg-id | be50d6d6-ebb7-697d-282a-6cfdda5efc05@gmail.com обсуждение исходный текст |
Ответ на | Re: Minimal logical decoding on standbys (Robert Haas <robertmhaas@gmail.com>) |
Список | pgsql-hackers |
Hi, On 12/14/22 6:48 PM, Robert Haas wrote: > On Wed, Dec 14, 2022 at 12:35 PM Andres Freund <andres@anarazel.de> wrote: >>> typedef struct xl_heap_prune >>> >>> I think this is unsafe on alignment-picky machines. I think it will >>> cause the offset numbers to be aligned at an odd address. >>> heap_xlog_prune() doesn't copy the data into aligned memory, so I >>> think this will result in a misaligned pointer being passed down to >>> heap_page_prune_execute. >> >> I think the offset numbers are stored separately from the record, even >> though it doesn't quite look like that in the above due to the way the >> 'OFFSET NUMBERS' is embedded in the struct. As they're stored with the >> block reference 0, the added boolean shouldn't make a difference >> alignment wise? >> >> Or am I misunderstanding your point? > > Oh, you're right. So this is another case similar to > xl_btree_reuse_page. In heap_xlog_prune(), we access the offset number > data like this: > > redirected = (OffsetNumber *) > XLogRecGetBlockData(record, 0, &datalen); > end = (OffsetNumber *) ((char *) redirected + datalen); > nowdead = redirected + (nredirected * 2); > nowunused = nowdead + ndead; > nunused = (end - nowunused); > heap_page_prune_execute(buffer, > > redirected, nredirected, > nowdead, ndead, > > nowunused, nunused); > > This is only safe if the return value of XLogRecGetBlockData is > guaranteed to be properly aligned, Why, could you please elaborate? It looks to me that here we are "just" accessing the members of the xl_heap_prune struct to get the numbers. Then, the actual data will be read later in heap_page_prune_execute() from the buffer/page based on the numbers we got fromxl_heap_prune. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
В списке pgsql-hackers по дате отправления: