From: Andrey Borodin =0A= Date: Mon, 28 Aug 2017 10:21:53 +0500=0A= Subject: [PATCH] hooks to watch for changed pages=0A= =0A= ---=0A= src/backend/access/transam/xlog.c | 11 +++++++++++=0A= src/backend/access/transam/xloginsert.c | 7 +++++++=0A= src/include/access/xloginsert.h | 6 ++++++=0A= 3 files changed, 24 insertions(+)=0A= =0A= diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam= /xlog.c=0A= index df4843f409..ffbd87e94e 100644=0A= --- a/src/backend/access/transam/xlog.c=0A= +++ b/src/backend/access/transam/xlog.c=0A= @@ -7024,6 +7024,7 @@ StartupXLOG(void)=0A= do=0A= {=0A= bool switchedTLI =3D false;=0A= + int nblock;=0A= =20=0A= #ifdef WAL_DEBUG=0A= if (XLOG_DEBUG ||=0A= @@ -7186,6 +7187,16 @@ StartupXLOG(void)=0A= /* Pop the error context stack */=0A= error_context_stack =3D errcallback.previous;=0A= =20=0A= + if (xlog_insert_buffer_hook)=0A= + for(nblock =3D 0; nblock < xlogreader->max_block_id; nblock++)=0A= + {=0A= + if(xlogreader->blocks[nblock].forknum =3D=3D MAIN_FORKNUM)=0A= + {=0A= + xlog_insert_buffer_hook(xlogreader->blocks[nblock].blkno,=0A= + xlogreader->blocks[nblock].rnode, true);=0A= + }=0A= + }=0A= +=0A= /*=0A= * Update lastReplayedEndRecPtr after this record has been=0A= * successfully replayed.=0A= diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/t= ransam/xloginsert.c=0A= index 3af03ecdb1..26dd72c21e 100644=0A= --- a/src/backend/access/transam/xloginsert.c=0A= +++ b/src/backend/access/transam/xloginsert.c=0A= @@ -205,6 +205,9 @@ XLogResetInsertion(void)=0A= begininsert_called =3D false;=0A= }=0A= =20=0A= +/* Hook for plugins to get control in during page insertion into xlog */= =0A= +PGDLLIMPORT xlog_insert_buffer_hook_type xlog_insert_buffer_hook =3D NULL;= =0A= +=0A= /*=0A= * Register a reference to a buffer with the WAL record being constructed.= =0A= * This must be called for every page that the WAL-logged operation modifi= es.=0A= @@ -256,6 +259,10 @@ XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint= 8 flags)=0A= #endif=0A= =20=0A= regbuf->in_use =3D true;=0A= + if (xlog_insert_buffer_hook && regbuf->forkno =3D=3D MAIN_FORKNUM)=0A= + {=0A= + xlog_insert_buffer_hook(regbuf->block, regbuf->rnode, false);=0A= + }=0A= }=0A= =20=0A= /*=0A= diff --git a/src/include/access/xloginsert.h b/src/include/access/xloginser= t.h=0A= index 174c88677f..c367669fa5 100644=0A= --- a/src/include/access/xloginsert.h=0A= +++ b/src/include/access/xloginsert.h=0A= @@ -58,4 +58,10 @@ extern XLogRecPtr XLogSaveBufferForHint(Buffer buffer, b= ool buffer_std);=0A= =20=0A= extern void InitXLogInsert(void);=0A= =20=0A= +/* Hook for plugins to get control in during page insertion into xlog */= =0A= +typedef void (*xlog_insert_buffer_hook_type) (BlockNumber block_number, Re= lFileNode rel, bool recovery);=0A= +=0A= +/* in xloginsert.c */=0A= +extern PGDLLIMPORT xlog_insert_buffer_hook_type xlog_insert_buffer_hook;= =0A= +=0A= #endif /* XLOGINSERT_H */=0A= --=20=0A= 2.11.0 (Apple Git-81)=0A= =0A= --Apple-Mail=_C07357D4-F01B-4FF1-8D39-D236DEFA311E Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --Apple-Mail=_C07357D4-F01B-4FF1-8D39-D236DEFA311E--