Re: Consistently use the XLogRecPtrIsInvalid() macro
Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
From: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: Álvaro Herrera <alvherre@kurilemu.de>, Michael Paquier <michael@paquier.xyz>, Heikki Linnakangas <hlinnaka@iki.fi>, Quan Zongliang <quanzongliang@yeah.net>, pgsql-hackers@lists.postgresql.org
Date: 2025-10-31T04:31:41Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Replace literal 0 with InvalidXLogRecPtr for XLogRecPtr assignments
- ec3174407164 19 (unreleased) landed
-
Replace pointer comparisons and assignments to literal zero with NULL
- ec782f56b0c3 19 (unreleased) landed
-
Use XLogRecPtrIsValid() in various places
- a2b02293bc65 19 (unreleased) landed
-
Introduce XLogRecPtrIsValid()
- d2965f627fe3 14.20 landed
- c0031d461324 18.1 landed
- 723cc84db50a 16.11 landed
- 49b45999f3b2 15.15 landed
- 33727aff18d0 17.7 landed
- 20bafb097288 13.23 landed
- 06edbed47862 19 (unreleased) landed
Hi, On Thu, Oct 30, 2025 at 02:55:51PM +0100, Peter Eisentraut wrote: > On 30.10.25 10:17, Bertrand Drouvot wrote: > > - 0002 deprecates XLogRecPtrIsInvalid(): it emits a warning message at compilation > > time if XLogRecPtrIsInvalid() is in use in the code base. > > Surely this could be factored out in macro in such a way that the warning > message is a macro argument and we could reuse this attribute elsewhere in > the code. Yeah, I thought about it and initially considered waiting until we have another use case. But you're right that it's better to do it from the start. > That said, I'm suspicious about marking things deprecated before the > replacement is widely available. If an extension has been using > XLogRecPtrIsInvalid() until now (which has been best practice), when that > extension adds PG19 support, they will either have to backport > XLogRecPtrIsValid or turn off deprecation warnings. That's a good point, thanks! I agree with your concern. After giving it more thought, I'm inclined to postpone the compiler warning until XLogRecPtrIsValid() has been available for some time. The question is for how long? I did some research, reading [1] (but that's not really identical) or looking at what we did for example for "SPI_prepare_cursor", "SPI_prepare_params" and friends (but again that's not really identical): 844fe9f159a mentioned that they "can perhaps go away at some point" and are documented as deprecated since PG14. So, back at our case, a conservative approach would be to wait for 5 years until the new macro is available on all the supported major versions. That would mean introduce the deprecated attribute in PG24. I don't see waiting for PG24 as an issue: the main goal of the new macro is to be consistent with other *IsValid() ones and avoid "double negation" and that would be achieved in the core code base. For PG19, we could: Add a comment in the code documenting that XLogRecPtrIsInvalid() is deprecated and that we will enforce a "deprecated" attribute on it in PG24. > At least there should > be some guidance about what you expect third-party code to do about this. The alternative of adding the warning immediately with migration guidance would still create "friction". Especially if we deprecate multiple APIs following this new pattern (i.e adding a "deprecated" attribute). As you said, they could backport the macro themselves but that seems like unnecessary friction when we can simply wait. What do you think? [1]: https://www.postgresql.org/message-id/4992828D.8000307%40gmx.net Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com