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 4+ messages / 1 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; 4+ 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] 4+ 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; 4+ 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] 4+ 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; 4+ 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] 4+ 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; 4+ 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] 4+ messages in thread
end of thread, other threads:[~2019-04-18 06:50 UTC | newest] Thread overview: 4+ 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>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox