diff options
Diffstat (limited to 'src/backend/storage/smgr/smgr.c')
| -rw-r--r-- | src/backend/storage/smgr/smgr.c | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 22ac13146c..6b13483a6d 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.106 2007/09/05 18:10:48 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.107 2007/11/15 20:36:40 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -55,9 +55,11 @@ typedef struct f_smgr void (*smgr_truncate) (SMgrRelation reln, BlockNumber nblocks, bool isTemp); void (*smgr_immedsync) (SMgrRelation reln); - void (*smgr_commit) (void); /* may be NULL */ - void (*smgr_abort) (void); /* may be NULL */ - void (*smgr_sync) (void); /* may be NULL */ + void (*smgr_commit) (void); /* may be NULL */ + void (*smgr_abort) (void); /* may be NULL */ + void (*smgr_pre_ckpt) (void); /* may be NULL */ + void (*smgr_sync) (void); /* may be NULL */ + void (*smgr_post_ckpt) (void); /* may be NULL */ } f_smgr; @@ -65,7 +67,7 @@ static const f_smgr smgrsw[] = { /* magnetic disk */ {mdinit, NULL, mdclose, mdcreate, mdunlink, mdextend, mdread, mdwrite, mdnblocks, mdtruncate, mdimmedsync, - NULL, NULL, mdsync + NULL, NULL, mdpreckpt, mdsync, mdpostckpt } }; @@ -778,7 +780,22 @@ smgrabort(void) } /* - * smgrsync() -- Sync files to disk at checkpoint time. + * smgrpreckpt() -- Prepare for checkpoint. + */ +void +smgrpreckpt(void) +{ + int i; + + for (i = 0; i < NSmgr; i++) + { + if (smgrsw[i].smgr_pre_ckpt) + (*(smgrsw[i].smgr_pre_ckpt)) (); + } +} + +/* + * smgrsync() -- Sync files to disk during checkpoint. */ void smgrsync(void) @@ -792,6 +809,21 @@ smgrsync(void) } } +/* + * smgrpostckpt() -- Post-checkpoint cleanup. + */ +void +smgrpostckpt(void) +{ + int i; + + for (i = 0; i < NSmgr; i++) + { + if (smgrsw[i].smgr_post_ckpt) + (*(smgrsw[i].smgr_post_ckpt)) (); + } +} + void smgr_redo(XLogRecPtr lsn, XLogRecord *record) |
