pg_logical_emit_message() misses a XLogFlush()

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: pg_logical_emit_message() misses a XLogFlush()
Date: 2023-08-15 06:38:06
Message-ID: ZNsdThSe2qgsfs7R@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi all,

While playing with pg_logical_emit_message() and WAL replay, I have
noticed that LogLogicalMessage() inserts a record but forgets to make
sure that the record has been flushed. So, for example, if the system
crashes the message inserted can get lost.

I was writing some TAP tests for it for the sake of a bug, and I have
found this the current behavior annoying because one cannot really
rely on it when emulating crashes.

This has been introduced in 3fe3511 (from 2016), and there is no
mention of that on the original thread that led to this commit:
https://www.postgresql.org/message-id/flat/5685F999.6010202%402ndquadrant.com

This could be an issue for anybody using LogLogicalMessage() out of
core, as well, because it would mean some records lost. So, perhaps
this should be treated as a bug, sufficient for a backpatch?

Thoughts?
--
Michael

Attachment Content-Type Size
logirep-message-flush.patch text/x-diff 869 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2023-08-15 06:48:23 Re: A Question about InvokeObjectPostAlterHook
Previous Message Pavel Stehule 2023-08-15 06:26:29 Re: proposal: jsonb_populate_array