Concretely, I propose to have a new struct like
typedef struct xlogReaderFuncs
{
XLogPageReadCB read_page;
XLogSegmentOpenCB open_segment;
XLogSegmentCloseCB open_segment;
} xlogReaderFuncs;
#define XLOGREADER_FUNCS(...) &(xlogReaderFuncs){__VA_ARGS__}
and then invoke it something like
xlogreader = XLogReaderAllocate(wal_segment_size, NULL,
XLOGREADER_FUNCS(.readpage = &read_local_xlog_page,
.opensegment = &wal_segment_open),
.closesegment = &wal_segment_close),
NULL);
(with suitable definitions for XLogSegmentOpenCB etc) so that the
support functions are all available at the xlogreader level, instead of
"open" being buried at the read-page level. Any additional support
functions can be added easily.
This would give xlogreader a simpler interface.
If people like this, I could make this change for pg13 and avoid
changing the API again in pg14.
Thougths?
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services