agora inbox for pgsql-hackers@postgresql.orghelp / color / mirror / Atom feed
[PATCH 08/10] Make pg_waldump not use callback but call the function directly 5+ messages / 2 participants [nested] [flat]
* [PATCH 08/10] Make pg_waldump not use callback but call the function directly @ 2019-04-18 06:50 Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 0 siblings, 0 replies; 5+ messages in thread From: Kyotaro Horiguchi @ 2019-04-18 06:50 UTC (permalink / raw) This patch does the similar thing to the change in logical rep. Moves callback from XLogReaderState from the parameter of XLogFindNextRecord. Then invalidate the parameters callback and private for XLogReaderAllocate. --- src/backend/access/transam/xlogreader.c | 17 +++++++---------- src/bin/pg_waldump/pg_waldump.c | 21 +++++++++------------ src/include/access/xlogreader.h | 14 +++++--------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index f953924a72..9b38fc7829 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -996,7 +996,8 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * debugging purposes. */ XLogRecPtr -XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) +XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private) { XLogReaderState saved_state = *state; XLogRecPtr tmpRecPtr; @@ -1008,6 +1009,8 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) Assert(!XLogRecPtrIsInvalid(RecPtr)); + XLREAD_RESET(state); + /* * skip over potential continuation data, keeping in mind that it may span * multiple pages @@ -1035,9 +1038,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* Read the page containing the record */ while(XLogNeedData(state, targetPagePtr, targetRecOff)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1048,9 +1049,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* make sure we have enough data for the page header */ while (XLogNeedData(state, targetPagePtr, pageHeaderSize)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1097,9 +1096,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) { if (result == XLREAD_NEED_DATA) { - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); continue; } diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index acee7ae199..1966da493f 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -422,10 +422,12 @@ XLogDumpXLogRead(const char *directory, TimeLineID timeline_id, * XLogReader read_page callback */ static void -XLogDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetPtr, char *readBuff, TimeLineID *curFileTLI) +XLogDumpReadPage(XLogReaderState *state, void *priv) { - XLogDumpPrivate *private = state->private_data; + XLogRecPtr targetPagePtr = state->loadPagePtr; + int reqLen = state->loadLen; + char *readBuff = state->readBuf; + XLogDumpPrivate *private = (XLogDumpPrivate *) priv; int count = XLOG_BLCKSZ; if (private->endptr != InvalidXLogRecPtr) @@ -1095,13 +1097,13 @@ main(int argc, char **argv) /* done with argument parsing, do the actual work */ /* we have everything we need, start reading */ - xlogreader_state = XLogReaderAllocate(WalSegSz, XLogDumpReadPage, - &private); + xlogreader_state = XLogReaderAllocate(WalSegSz, NULL, NULL); if (!xlogreader_state) fatal_error("out of memory"); /* first find a valid recptr to start from */ - first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + first_record = XLogFindNextRecord(xlogreader_state, private.startptr, + &XLogDumpReadPage, (void*) &private); if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", @@ -1128,12 +1130,7 @@ main(int argc, char **argv) while (XLogReadRecord(xlogreader_state, first_record, &record, &errormsg) == XLREAD_NEED_DATA) - xlogreader_state->read_page(xlogreader_state, - xlogreader_state->loadPagePtr, - xlogreader_state->loadLen, - xlogreader_state->currRecPtr, - xlogreader_state->readBuf, - &xlogreader_state->readPageTLI); + XLogDumpReadPage(xlogreader_state, (void *) &private); if (!record) { diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 9bfa9e8d54..b231cb330c 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -29,14 +29,6 @@ typedef struct XLogReaderState XLogReaderState; -/* Function type definition for the read_page callback */ -typedef void (*XLogPageReadCB) (XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, - XLogRecPtr targetRecPtr, - char *readBuf, - TimeLineID *pageTLI); - typedef struct { /* Is this block ref in use? */ @@ -263,7 +255,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, extern void XLogReaderInvalReadState(XLogReaderState *state); #ifdef FRONTEND -extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); +/* Function type definition for the read_page callback */ +typedef void (*XLogFindNextRecordCB) (XLogReaderState *xlogreader, + void *private); +extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private); #endif /* FRONTEND */ /* Functions for decoding an XLogRecord */ -- 2.16.3 ----Next_Part(Fri_Apr_26_17_40_34_2019_888)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="v2-0009-Make-pg_rewind-not-use-callback-but-call-the-functio.patch" ^ permalink raw reply [nested|flat] 5+ messages in thread
* [PATCH 08/10] Make pg_waldump not use callback but call the function directly @ 2019-04-18 06:50 Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 0 siblings, 0 replies; 5+ messages in thread From: Kyotaro Horiguchi @ 2019-04-18 06:50 UTC (permalink / raw) This patch does the similar thing to the change in logical rep. Moves callback from XLogReaderState from the parameter of XLogFindNextRecord. Then invalidate the parameters callback and private for XLogReaderAllocate. --- src/backend/access/transam/xlogreader.c | 15 +++++---------- src/bin/pg_waldump/pg_waldump.c | 21 +++++++++------------ src/include/access/xlogreader.h | 14 +++++--------- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 4ab0655af5..004eaac021 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1016,7 +1016,8 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * debugging purposes. */ XLogRecPtr -XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) +XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private) { XLogReaderState saved_state = *state; XLogRecPtr tmpRecPtr; @@ -1055,9 +1056,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* Read the page containing the record */ while(XLogNeedData(state, targetPagePtr, targetRecOff)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1068,9 +1067,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* make sure we have enough data for the page header */ while (XLogNeedData(state, targetPagePtr, pageHeaderSize)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1117,9 +1114,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) { if (result == XLREAD_NEED_DATA) { - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); continue; } diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index e2e93f144a..8fe6823b32 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -422,10 +422,12 @@ XLogDumpXLogRead(const char *directory, TimeLineID timeline_id, * XLogReader read_page callback */ static void -XLogDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetPtr, char *readBuff, TimeLineID *curFileTLI) +XLogDumpReadPage(XLogReaderState *state, void *priv) { - XLogDumpPrivate *private = state->private_data; + XLogRecPtr targetPagePtr = state->loadPagePtr; + int reqLen = state->loadLen; + char *readBuff = state->readBuf; + XLogDumpPrivate *private = (XLogDumpPrivate *) priv; int count = XLOG_BLCKSZ; if (private->endptr != InvalidXLogRecPtr) @@ -1102,13 +1104,13 @@ main(int argc, char **argv) /* done with argument parsing, do the actual work */ /* we have everything we need, start reading */ - xlogreader_state = XLogReaderAllocate(WalSegSz, XLogDumpReadPage, - &private); + xlogreader_state = XLogReaderAllocate(WalSegSz, NULL, NULL); if (!xlogreader_state) fatal_error("out of memory"); /* first find a valid recptr to start from */ - first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + first_record = XLogFindNextRecord(xlogreader_state, private.startptr, + &XLogDumpReadPage, (void*) &private); if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", @@ -1135,12 +1137,7 @@ main(int argc, char **argv) while (XLogReadRecord(xlogreader_state, first_record, &record, &errormsg) == XLREAD_NEED_DATA) - xlogreader_state->read_page(xlogreader_state, - xlogreader_state->loadPagePtr, - xlogreader_state->loadLen, - xlogreader_state->currRecPtr, - xlogreader_state->readBuf, - &xlogreader_state->readPageTLI); + XLogDumpReadPage(xlogreader_state, (void *) &private); if (!record) { diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index bc0c642906..b4ace71a75 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -29,14 +29,6 @@ typedef struct XLogReaderState XLogReaderState; -/* Function type definition for the read_page callback */ -typedef void (*XLogPageReadCB) (XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, - XLogRecPtr targetRecPtr, - char *readBuf, - TimeLineID *pageTLI); - typedef struct { /* Is this block ref in use? */ @@ -252,7 +244,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, extern void XLogReaderInvalReadState(XLogReaderState *state); #ifdef FRONTEND -extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); +/* Function type definition for the read_page callback */ +typedef void (*XLogFindNextRecordCB) (XLogReaderState *xlogreader, + void *private); +extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private); #endif /* FRONTEND */ /* Functions for decoding an XLogRecord */ -- 2.16.3 ----Next_Part(Wed_Jul_10_13_18_10_2019_842)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="v4-0009-Make-pg_rewind-not-use-callback-but-call-the-functio.patch" ^ permalink raw reply [nested|flat] 5+ messages in thread
* [PATCH 08/10] Make pg_waldump not use callback but call the function directly @ 2019-04-18 06:50 Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 0 siblings, 0 replies; 5+ messages in thread From: Kyotaro Horiguchi @ 2019-04-18 06:50 UTC (permalink / raw) This patch does the similar thing to the change in logical rep. Moves callback from XLogReaderState from the parameter of XLogFindNextRecord. Then invalidate the parameters callback and private for XLogReaderAllocate. --- src/backend/access/transam/xlogreader.c | 15 +++++---------- src/bin/pg_waldump/pg_waldump.c | 21 +++++++++------------ src/include/access/xlogreader.h | 14 +++++--------- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index ce901c358a..0bf8dac408 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1026,7 +1026,8 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * debugging purposes. */ XLogRecPtr -XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) +XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private) { XLogReaderState saved_state = *state; XLogRecPtr tmpRecPtr; @@ -1065,9 +1066,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* Read the page containing the record */ while(XLogNeedData(state, targetPagePtr, targetRecOff)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1078,9 +1077,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* make sure we have enough data for the page header */ while (XLogNeedData(state, targetPagePtr, pageHeaderSize)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1127,9 +1124,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) { if (result == XLREAD_NEED_DATA) { - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); continue; } diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index 54717c9320..3125633327 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -422,10 +422,12 @@ XLogDumpXLogRead(const char *directory, TimeLineID timeline_id, * XLogReader read_page callback */ static void -XLogDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetPtr, char *readBuff, TimeLineID *curFileTLI) +XLogDumpReadPage(XLogReaderState *state, void *priv) { - XLogDumpPrivate *private = state->private_data; + XLogRecPtr targetPagePtr = state->loadPagePtr; + int reqLen = state->loadLen; + char *readBuff = state->readBuf; + XLogDumpPrivate *private = (XLogDumpPrivate *) priv; int count = XLOG_BLCKSZ; if (private->endptr != InvalidXLogRecPtr) @@ -1095,13 +1097,13 @@ main(int argc, char **argv) /* done with argument parsing, do the actual work */ /* we have everything we need, start reading */ - xlogreader_state = XLogReaderAllocate(WalSegSz, XLogDumpReadPage, - &private); + xlogreader_state = XLogReaderAllocate(WalSegSz, NULL, NULL); if (!xlogreader_state) fatal_error("out of memory"); /* first find a valid recptr to start from */ - first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + first_record = XLogFindNextRecord(xlogreader_state, private.startptr, + &XLogDumpReadPage, (void*) &private); if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", @@ -1128,12 +1130,7 @@ main(int argc, char **argv) while (XLogReadRecord(xlogreader_state, first_record, &record, &errormsg) == XLREAD_NEED_DATA) - xlogreader_state->read_page(xlogreader_state, - xlogreader_state->loadPagePtr, - xlogreader_state->loadLen, - xlogreader_state->currRecPtr, - xlogreader_state->readBuf, - &xlogreader_state->readPageTLI); + XLogDumpReadPage(xlogreader_state, (void *) &private); if (!record) { diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index bc0c642906..b4ace71a75 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -29,14 +29,6 @@ typedef struct XLogReaderState XLogReaderState; -/* Function type definition for the read_page callback */ -typedef void (*XLogPageReadCB) (XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, - XLogRecPtr targetRecPtr, - char *readBuf, - TimeLineID *pageTLI); - typedef struct { /* Is this block ref in use? */ @@ -252,7 +244,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, extern void XLogReaderInvalReadState(XLogReaderState *state); #ifdef FRONTEND -extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); +/* Function type definition for the read_page callback */ +typedef void (*XLogFindNextRecordCB) (XLogReaderState *xlogreader, + void *private); +extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private); #endif /* FRONTEND */ /* Functions for decoding an XLogRecord */ -- 2.16.3 ----Next_Part(Fri_May_24_11_56_24_2019_374)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="v3-0009-Make-pg_rewind-not-use-callback-but-call-the-functio.patch" ^ permalink raw reply [nested|flat] 5+ messages in thread
* [PATCH 08/10] Make pg_waldump not use callback but call the function directly @ 2019-04-18 06:50 Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 0 siblings, 0 replies; 5+ messages in thread From: Kyotaro Horiguchi @ 2019-04-18 06:50 UTC (permalink / raw) This patch does the similar thing to the change in logical rep. Moves callback from XLogReaderState from the parameter of XLogFindNextRecord. Then invalidate the parameters callback and private for XLogReaderAllocate. --- src/backend/access/transam/xlogreader.c | 17 +++++++---------- src/bin/pg_waldump/pg_waldump.c | 21 +++++++++------------ src/include/access/xlogreader.h | 14 +++++--------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 05a57a1ebd..72b82a17d6 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1006,7 +1006,8 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, * debugging purposes. */ XLogRecPtr -XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) +XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private) { XLogReaderState saved_state = *state; XLogRecPtr tmpRecPtr; @@ -1018,6 +1019,8 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) Assert(!XLogRecPtrIsInvalid(RecPtr)); + XLREAD_RESET(state); + /* * skip over potential continuation data, keeping in mind that it may span * multiple pages @@ -1045,9 +1048,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* Read the page containing the record */ while(XLogNeedData(state, targetPagePtr, targetRecOff)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1058,9 +1059,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) /* make sure we have enough data for the page header */ while (XLogNeedData(state, targetPagePtr, pageHeaderSize)) - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); if (state->readLen < 0) goto err; @@ -1107,9 +1106,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) { if (result == XLREAD_NEED_DATA) { - state->read_page(state, state->loadPagePtr, state->loadLen, - state->currRecPtr, state->readBuf, - &state->readPageTLI); + read_page(state, private); continue; } diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index acee7ae199..1966da493f 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -422,10 +422,12 @@ XLogDumpXLogRead(const char *directory, TimeLineID timeline_id, * XLogReader read_page callback */ static void -XLogDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, - XLogRecPtr targetPtr, char *readBuff, TimeLineID *curFileTLI) +XLogDumpReadPage(XLogReaderState *state, void *priv) { - XLogDumpPrivate *private = state->private_data; + XLogRecPtr targetPagePtr = state->loadPagePtr; + int reqLen = state->loadLen; + char *readBuff = state->readBuf; + XLogDumpPrivate *private = (XLogDumpPrivate *) priv; int count = XLOG_BLCKSZ; if (private->endptr != InvalidXLogRecPtr) @@ -1095,13 +1097,13 @@ main(int argc, char **argv) /* done with argument parsing, do the actual work */ /* we have everything we need, start reading */ - xlogreader_state = XLogReaderAllocate(WalSegSz, XLogDumpReadPage, - &private); + xlogreader_state = XLogReaderAllocate(WalSegSz, NULL, NULL); if (!xlogreader_state) fatal_error("out of memory"); /* first find a valid recptr to start from */ - first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + first_record = XLogFindNextRecord(xlogreader_state, private.startptr, + &XLogDumpReadPage, (void*) &private); if (first_record == InvalidXLogRecPtr) fatal_error("could not find a valid record after %X/%X", @@ -1128,12 +1130,7 @@ main(int argc, char **argv) while (XLogReadRecord(xlogreader_state, first_record, &record, &errormsg) == XLREAD_NEED_DATA) - xlogreader_state->read_page(xlogreader_state, - xlogreader_state->loadPagePtr, - xlogreader_state->loadLen, - xlogreader_state->currRecPtr, - xlogreader_state->readBuf, - &xlogreader_state->readPageTLI); + XLogDumpReadPage(xlogreader_state, (void *) &private); if (!record) { diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 338dc2c14d..5f85c79424 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -29,14 +29,6 @@ typedef struct XLogReaderState XLogReaderState; -/* Function type definition for the read_page callback */ -typedef void (*XLogPageReadCB) (XLogReaderState *xlogreader, - XLogRecPtr targetPagePtr, - int reqLen, - XLogRecPtr targetRecPtr, - char *readBuf, - TimeLineID *pageTLI); - typedef struct { /* Is this block ref in use? */ @@ -263,7 +255,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, extern void XLogReaderInvalReadState(XLogReaderState *state); #ifdef FRONTEND -extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr); +/* Function type definition for the read_page callback */ +typedef void (*XLogFindNextRecordCB) (XLogReaderState *xlogreader, + void *private); +extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr, + XLogFindNextRecordCB read_page, void *private); #endif /* FRONTEND */ /* Functions for decoding an XLogRecord */ -- 2.16.3 ----Next_Part(Thu_Apr_18_21_02_57_2019_406)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="0009-Make-pg_rewind-not-use-callback-but-call-the-functio.patch" ^ permalink raw reply [nested|flat] 5+ messages in thread
* [PATCH] Avoid including proc.h in shm_mq.h @ 2026-02-26 17:29 Álvaro Herrera <alvherre@kurilemu.de> 0 siblings, 0 replies; 5+ messages in thread From: Álvaro Herrera @ 2026-02-26 17:29 UTC (permalink / raw) This prevents proliferation of proc.h to tons of other places. --- src/backend/access/brin/brin.c | 1 + src/backend/access/gin/gininsert.c | 1 + src/backend/access/heap/heapam.c | 1 + src/backend/access/heap/vacuumlazy.c | 1 + src/backend/access/nbtree/nbtsort.c | 1 + src/backend/access/transam/parallel.c | 1 + src/backend/catalog/namespace.c | 1 + src/backend/commands/async.c | 1 + src/backend/commands/vacuumparallel.c | 1 + src/backend/executor/execParallel.c | 1 + src/backend/executor/nodeAppend.c | 1 + src/backend/executor/nodeGather.c | 1 + src/backend/libpq/pqmq.c | 1 + src/backend/optimizer/plan/createplan.c | 1 + src/backend/replication/logical/applyparallelworker.c | 2 ++ src/backend/replication/logical/tablesync.c | 1 + src/backend/replication/logical/worker.c | 1 + src/backend/storage/ipc/procsignal.c | 1 + src/backend/storage/ipc/shm_mq.c | 1 + src/backend/utils/activity/backend_progress.c | 1 + src/backend/utils/misc/guc_tables.c | 1 + src/include/access/parallel.h | 2 ++ src/include/libpq/pqmq.h | 1 + src/include/storage/shm_mq.h | 4 +++- src/test/modules/test_shm_mq/setup.c | 1 + src/test/modules/test_shm_mq/test.c | 1 + src/test/modules/test_shm_mq/worker.c | 2 ++ 27 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 6887e421442..9cd563fd0c3 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -33,6 +33,7 @@ #include "postmaster/autovacuum.h" #include "storage/bufmgr.h" #include "storage/freespace.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" #include "utils/acl.h" #include "utils/datum.h" diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index 0d63fb4ba27..ee9b6106922 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -27,6 +27,7 @@ #include "nodes/execnodes.h" #include "pgstat.h" #include "storage/bufmgr.h" +#include "storage/proc.h" #include "storage/predicate.h" #include "tcop/tcopprot.h" #include "utils/datum.h" diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 98d53caeea8..d534258e547 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -47,6 +47,7 @@ #include "port/pg_bitutils.h" #include "storage/lmgr.h" #include "storage/predicate.h" +#include "storage/proc.h" #include "storage/procarray.h" #include "utils/datum.h" #include "utils/injection_point.h" diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 4be267ff657..1f11d8c1567 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -149,6 +149,7 @@ #include "postmaster/autovacuum.h" #include "storage/bufmgr.h" #include "storage/freespace.h" +#include "storage/latch.h" #include "storage/lmgr.h" #include "storage/read_stream.h" #include "utils/lsyscache.h" diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 3a45508f62e..fd9d4087b5a 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -52,6 +52,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "storage/bulk_write.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" #include "utils/rel.h" #include "utils/sortsupport.h" diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 44786dc131f..e69c4b74248 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -36,6 +36,7 @@ #include "pgstat.h" #include "storage/ipc.h" #include "storage/predicate.h" +#include "storage/proc.h" #include "storage/spin.h" #include "tcop/tcopprot.h" #include "utils/combocid.h" diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 4b0f4ba115d..56b87d878e8 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -48,6 +48,7 @@ #include "nodes/makefuncs.h" #include "storage/ipc.h" #include "storage/lmgr.h" +#include "storage/proc.h" #include "storage/procarray.h" #include "utils/acl.h" #include "utils/builtins.h" diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index 657c591618d..0b6d119dad0 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -176,6 +176,7 @@ #include "miscadmin.h" #include "storage/dsm_registry.h" #include "storage/ipc.h" +#include "storage/latch.h" #include "storage/lmgr.h" #include "storage/procsignal.h" #include "tcop/tcopprot.h" diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c index c3b3c9ea21a..279108ca89f 100644 --- a/src/backend/commands/vacuumparallel.c +++ b/src/backend/commands/vacuumparallel.c @@ -35,6 +35,7 @@ #include "optimizer/paths.h" #include "pgstat.h" #include "storage/bufmgr.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" #include "utils/lsyscache.h" #include "utils/rel.h" diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index f87978c137e..ac84af294c9 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -45,6 +45,7 @@ #include "jit/jit.h" #include "nodes/nodeFuncs.h" #include "pgstat.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" #include "utils/datum.h" #include "utils/dsa.h" diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 7138dc692c6..39d9442c121 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -64,6 +64,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "storage/latch.h" +#include "storage/lwlock.h" /* Shared state for parallel-aware Append. */ struct ParallelAppendState diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 4105f1d1968..114693abb32 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -36,6 +36,7 @@ #include "executor/tqueue.h" #include "miscadmin.h" #include "optimizer/optimizer.h" +#include "storage/latch.h" #include "utils/wait_event.h" diff --git a/src/backend/libpq/pqmq.c b/src/backend/libpq/pqmq.c index 6e4bbfb5aa1..7e4a725b796 100644 --- a/src/backend/libpq/pqmq.c +++ b/src/backend/libpq/pqmq.c @@ -20,6 +20,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "replication/logicalworker.h" +#include "storage/latch.h" #include "tcop/tcopprot.h" #include "utils/builtins.h" diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 21f1988cf22..50b0e10308b 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -17,6 +17,7 @@ #include "postgres.h" #include "access/sysattr.h" +#include "access/transam.h" #include "catalog/pg_class.h" #include "foreign/fdwapi.h" #include "miscadmin.h" diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c index 1730ace5490..7cd6e912a9c 100644 --- a/src/backend/replication/logical/applyparallelworker.c +++ b/src/backend/replication/logical/applyparallelworker.c @@ -166,7 +166,9 @@ #include "replication/origin.h" #include "replication/worker_internal.h" #include "storage/ipc.h" +#include "storage/latch.h" #include "storage/lmgr.h" +#include "storage/proc.h" #include "tcop/tcopprot.h" #include "utils/inval.h" #include "utils/memutils.h" diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 2f2f0121ecf..bccbf61bf39 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -112,6 +112,7 @@ #include "replication/walreceiver.h" #include "replication/worker_internal.h" #include "storage/ipc.h" +#include "storage/latch.h" #include "storage/lmgr.h" #include "utils/acl.h" #include "utils/array.h" diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index bae8c011390..f9c4b484754 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -281,6 +281,7 @@ #include "rewrite/rewriteHandler.h" #include "storage/buffile.h" #include "storage/ipc.h" +#include "storage/latch.h" #include "storage/lmgr.h" #include "storage/procarray.h" #include "tcop/tcopprot.h" diff --git a/src/backend/storage/ipc/procsignal.c b/src/backend/storage/ipc/procsignal.c index 7505c9d3a37..d47d180a32f 100644 --- a/src/backend/storage/ipc/procsignal.c +++ b/src/backend/storage/ipc/procsignal.c @@ -28,6 +28,7 @@ #include "storage/condition_variable.h" #include "storage/ipc.h" #include "storage/latch.h" +#include "storage/proc.h" #include "storage/shmem.h" #include "storage/sinval.h" #include "storage/smgr.h" diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 3ce6068ac54..7e9fbc00705 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -22,6 +22,7 @@ #include "pgstat.h" #include "port/pg_bitutils.h" #include "postmaster/bgworker.h" +#include "storage/proc.h" #include "storage/shm_mq.h" #include "storage/spin.h" #include "utils/memutils.h" diff --git a/src/backend/utils/activity/backend_progress.c b/src/backend/utils/activity/backend_progress.c index 5addb2d004f..b0359771de5 100644 --- a/src/backend/utils/activity/backend_progress.c +++ b/src/backend/utils/activity/backend_progress.c @@ -12,6 +12,7 @@ #include "access/parallel.h" #include "libpq/pqformat.h" +#include "storage/proc.h" #include "utils/backend_progress.h" #include "utils/backend_status.h" diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index 741fce8dede..38aaf82f120 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -85,6 +85,7 @@ #include "storage/large_object.h" #include "storage/pg_shmem.h" #include "storage/predicate.h" +#include "storage/proc.h" #include "storage/procnumber.h" #include "storage/standby.h" #include "tcop/backend_startup.h" diff --git a/src/include/access/parallel.h b/src/include/access/parallel.h index 01bdf2bec1f..60f857675e0 100644 --- a/src/include/access/parallel.h +++ b/src/include/access/parallel.h @@ -14,6 +14,8 @@ #ifndef PARALLEL_H #define PARALLEL_H +#include <signal.h> + #include "access/xlogdefs.h" #include "lib/ilist.h" #include "postmaster/bgworker.h" diff --git a/src/include/libpq/pqmq.h b/src/include/libpq/pqmq.h index c62fffb5998..36780c0816e 100644 --- a/src/include/libpq/pqmq.h +++ b/src/include/libpq/pqmq.h @@ -14,6 +14,7 @@ #define PQMQ_H #include "lib/stringinfo.h" +#include "storage/procnumber.h" #include "storage/shm_mq.h" extern void pq_redirect_to_shm_mq(dsm_segment *seg, shm_mq_handle *mqh); diff --git a/src/include/storage/shm_mq.h b/src/include/storage/shm_mq.h index aa5676f6a12..6f78f4a3acb 100644 --- a/src/include/storage/shm_mq.h +++ b/src/include/storage/shm_mq.h @@ -15,7 +15,9 @@ #include "postmaster/bgworker.h" #include "storage/dsm.h" -#include "storage/proc.h" + +/* avoid including storage/proc.h */ +typedef struct PGPROC PGPROC; /* The queue itself, in shared memory. */ struct shm_mq; diff --git a/src/test/modules/test_shm_mq/setup.c b/src/test/modules/test_shm_mq/setup.c index 579e5933d28..36bb255922c 100644 --- a/src/test/modules/test_shm_mq/setup.c +++ b/src/test/modules/test_shm_mq/setup.c @@ -18,6 +18,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "postmaster/bgworker.h" +#include "storage/proc.h" #include "storage/shm_toc.h" #include "test_shm_mq.h" #include "utils/memutils.h" diff --git a/src/test/modules/test_shm_mq/test.c b/src/test/modules/test_shm_mq/test.c index fe1794c6077..ce97e6e1aa4 100644 --- a/src/test/modules/test_shm_mq/test.c +++ b/src/test/modules/test_shm_mq/test.c @@ -16,6 +16,7 @@ #include "fmgr.h" #include "miscadmin.h" #include "pgstat.h" +#include "storage/proc.h" #include "varatt.h" #include "test_shm_mq.h" diff --git a/src/test/modules/test_shm_mq/worker.c b/src/test/modules/test_shm_mq/worker.c index 6a4147554bb..e13c05ae5c7 100644 --- a/src/test/modules/test_shm_mq/worker.c +++ b/src/test/modules/test_shm_mq/worker.c @@ -21,6 +21,8 @@ #include "miscadmin.h" #include "storage/ipc.h" +#include "storage/latch.h" +#include "storage/proc.h" #include "storage/procarray.h" #include "storage/shm_mq.h" #include "storage/shm_toc.h" -- 2.47.3 --wxuasfobqau5ms4q-- ^ permalink raw reply [nested|flat] 5+ messages in thread
end of thread, other threads:[~2026-02-26 17:29 UTC | newest] Thread overview: 5+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2019-04-18 06:50 [PATCH 08/10] Make pg_waldump not use callback but call the function directly Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 2019-04-18 06:50 [PATCH 08/10] Make pg_waldump not use callback but call the function directly Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 2019-04-18 06:50 [PATCH 08/10] Make pg_waldump not use callback but call the function directly Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 2019-04-18 06:50 [PATCH 08/10] Make pg_waldump not use callback but call the function directly Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp> 2026-02-26 17:29 [PATCH] Avoid including proc.h in shm_mq.h Álvaro Herrera <alvherre@kurilemu.de>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox