From d6f64c8138aa084a40d0f19128d3c5e3fb0344d0 Mon Sep 17 00:00:00 2001 From: BaiShaoqi Date: Fri, 20 Jul 2018 05:44:21 +0000 Subject: [PATCH] Add Hook SmgrExtend --- src/backend/storage/smgr/smgr.c | 6 ++++++ src/include/storage/smgr.h | 6 ++++++ src/tools/pgindent/typedefs.list | 1 + 3 files changed, 13 insertions(+) diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 08f06bade2578..af5e5a1d8abe0 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -25,6 +25,9 @@ #include "utils/inval.h" +/* Hook for plugin to get control in smgrextend() */ +SmgrExtend_hook_type SmgrExtend_hook = NULL; + /* * This struct of function pointers defines the API between smgr.c and * any individual storage manager module. Note that smgr subfunctions are @@ -600,6 +603,9 @@ void smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync) { + if (SmgrExtend_hook) + (*SmgrExtend_hook)(reln, forknum, blocknum, + buffer, skipFsync); smgrsw[reln->smgr_which].smgr_extend(reln, forknum, blocknum, buffer, skipFsync); } diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index c843bbc969209..15d1bb44ae2fb 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -77,6 +77,12 @@ typedef struct SMgrRelationData typedef SMgrRelationData *SMgrRelation; +/* Hook for plugins to get control in smgrextend() */ +typedef void (*SmgrExtend_hook_type) (SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, + char *buffer, bool skipFsync); +extern PGDLLIMPORT SmgrExtend_hook_type SmgrExtend_hook; + + #define SmgrIsTemp(smgr) \ RelFileNodeBackendIsTemp((smgr)->smgr_rnode) diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index ed68cc4085e00..2a079cbb2e236 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2161,6 +2161,7 @@ SlruPageStatus SlruScanCallback SlruShared SlruSharedData +SmgrExtend_hook_type SnapBuild SnapBuildOnDisk SnapBuildState