diff options
Diffstat (limited to 'src/backend/storage/smgr')
-rw-r--r-- | src/backend/storage/smgr/md.c | 71 | ||||
-rw-r--r-- | src/backend/storage/smgr/smgr.c | 112 |
2 files changed, 46 insertions, 137 deletions
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index ff8b4ce52fe..da466afe9f8 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.76 2000/10/20 11:01:11 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.77 2000/10/28 16:20:57 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -76,12 +76,7 @@ static int _mdfd_getrelnfd(Relation reln); static MdfdVec *_mdfd_openseg(Relation reln, int segno, int oflags); static MdfdVec *_mdfd_getseg(Relation reln, int blkno); -#ifdef OLD_FILE_NAMING -static int _mdfd_blind_getseg(char *dbname, char *relname, - Oid dbid, Oid relid, int blkno); -#else static int _mdfd_blind_getseg(RelFileNode rnode, int blkno); -#endif static int _fdvec_alloc(void); static void _fdvec_free(int); @@ -134,11 +129,7 @@ mdcreate(Relation reln) Assert(reln->rd_unlinked && reln->rd_fd < 0); -#ifdef OLD_FILE_NAMING - path = relpath(RelationGetPhysicalRelationName(reln)); -#else path = relpath(reln->rd_node); -#endif fd = FileNameOpenFile(path, O_RDWR | O_CREAT | O_EXCL | PG_BINARY, 0600); /* @@ -336,11 +327,7 @@ mdopen(Relation reln) int vfd; Assert(reln->rd_fd < 0); -#ifdef OLD_FILE_NAMING - path = relpath(RelationGetPhysicalRelationName(reln)); -#else path = relpath(reln->rd_node); -#endif fd = FileNameOpenFile(path, O_RDWR | PG_BINARY, 0600); if (fd < 0) @@ -579,30 +566,16 @@ mdflush(Relation reln, BlockNumber blocknum, char *buffer) * the file, making it more like mdflush(). */ int -#ifdef OLD_FILE_NAMING -mdblindwrt(char *dbname, - char *relname, - Oid dbid, - Oid relid, - BlockNumber blkno, - char *buffer, - bool dofsync) -#else mdblindwrt(RelFileNode rnode, BlockNumber blkno, char *buffer, bool dofsync) -#endif { int status; long seekpos; int fd; -#ifdef OLD_FILE_NAMING - fd = _mdfd_blind_getseg(dbname, relname, dbid, relid, blkno); -#else fd = _mdfd_blind_getseg(rnode, blkno); -#endif if (fd < 0) return SM_FAIL; @@ -676,25 +649,13 @@ mdmarkdirty(Relation reln, BlockNumber blkno) * rather than building md/fd datastructures to postpone it till later. */ int -#ifdef OLD_FILE_NAMING -mdblindmarkdirty(char *dbname, - char *relname, - Oid dbid, - Oid relid, - BlockNumber blkno) -#else mdblindmarkdirty(RelFileNode rnode, BlockNumber blkno) -#endif { int status; int fd; -#ifdef OLD_FILE_NAMING - fd = _mdfd_blind_getseg(dbname, relname, dbid, relid, blkno); -#else fd = _mdfd_blind_getseg(rnode, blkno); -#endif if (fd < 0) return SM_FAIL; @@ -915,6 +876,22 @@ mdabort() return SM_SUCCESS; } +#ifdef XLOG +/* + * mdsync() -- Sync storage. + * + */ +int +mdsync() +{ + sync(); + if (IsUnderPostmaster) + sleep(2); + sync(); + return SM_SUCCESS; +} +#endif + /* * _fdvec_alloc () -- grab a free (or new) md file descriptor vector. * @@ -996,11 +973,7 @@ _mdfd_openseg(Relation reln, int segno, int oflags) *fullpath; /* be sure we have enough space for the '.segno', if any */ -#ifdef OLD_FILE_NAMING - path = relpath(RelationGetPhysicalRelationName(reln)); -#else path = relpath(reln->rd_node); -#endif if (segno > 0) { @@ -1115,12 +1088,7 @@ _mdfd_getseg(Relation reln, int blkno) */ static int -#ifdef OLD_FILE_NAMING -_mdfd_blind_getseg(char *dbname, char *relname, Oid dbid, Oid relid, - int blkno) -#else _mdfd_blind_getseg(RelFileNode rnode, int blkno) -#endif { char *path; int fd; @@ -1130,12 +1098,7 @@ _mdfd_blind_getseg(RelFileNode rnode, int blkno) #endif -#ifdef OLD_FILE_NAMING - /* construct the path to the relation */ - path = relpath_blind(dbname, relname, dbid, relid); -#else path = relpath(rnode); -#endif #ifndef LET_OS_MANAGE_FILESIZE /* append the '.segno', if needed */ diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 65bc5595a85..d2a940a76e5 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.41 2000/10/21 15:43:31 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.42 2000/10/28 16:20:57 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -36,27 +36,17 @@ typedef struct f_smgr char *buffer); int (*smgr_flush) (Relation reln, BlockNumber blocknum, char *buffer); -#ifdef OLD_FILE_NAMING - int (*smgr_blindwrt) (char *dbname, char *relname, - Oid dbid, Oid relid, - BlockNumber blkno, char *buffer, - bool dofsync); -#else int (*smgr_blindwrt) (RelFileNode rnode, BlockNumber blkno, char *buffer, bool dofsync); -#endif int (*smgr_markdirty) (Relation reln, BlockNumber blkno); -#ifdef OLD_FILE_NAMING - int (*smgr_blindmarkdirty) (char *dbname, char *relname, - Oid dbid, Oid relid, - BlockNumber blkno); -#else int (*smgr_blindmarkdirty) (RelFileNode, BlockNumber blkno); -#endif int (*smgr_nblocks) (Relation reln); int (*smgr_truncate) (Relation reln, int nblocks); int (*smgr_commit) (void); /* may be NULL */ int (*smgr_abort) (void); /* may be NULL */ +#ifdef XLOG + int (*smgr_sync) (void); +#endif } f_smgr; /* @@ -69,7 +59,11 @@ static f_smgr smgrsw[] = { /* magnetic disk */ {mdinit, NULL, mdcreate, mdunlink, mdextend, mdopen, mdclose, mdread, mdwrite, mdflush, mdblindwrt, mdmarkdirty, mdblindmarkdirty, +#ifdef XLOG + mdnblocks, mdtruncate, mdcommit, mdabort, mdsync}, +#else mdnblocks, mdtruncate, mdcommit, mdabort}, +#endif #ifdef STABLE_MEMORY_STORAGE /* main memory */ @@ -310,40 +304,6 @@ smgrflush(int16 which, Relation reln, BlockNumber blocknum, char *buffer) * this page down to stable storage in this circumstance. The * write should be synchronous if dofsync is true. */ -#ifdef OLD_FILE_NAMING -int -smgrblindwrt(int16 which, - char *dbname, - char *relname, - Oid dbid, - Oid relid, - BlockNumber blkno, - char *buffer, - bool dofsync) -{ - char *dbstr; - char *relstr; - int status; - - /* strdup here is probably redundant */ - dbstr = pstrdup(dbname); - relstr = pstrdup(relname); - - status = (*(smgrsw[which].smgr_blindwrt)) (dbstr, relstr, dbid, relid, - blkno, buffer, dofsync); - - if (status == SM_FAIL) - elog(ERROR, "cannot write block %d of %s [%s] blind: %m", - blkno, relstr, dbstr); - - pfree(dbstr); - pfree(relstr); - - return status; -} - -#else - int smgrblindwrt(int16 which, RelFileNode rnode, @@ -361,7 +321,6 @@ smgrblindwrt(int16 which, return status; } -#endif /* * smgrmarkdirty() -- Mark a page dirty (needs fsync). @@ -394,39 +353,6 @@ smgrmarkdirty(int16 which, * * Just like smgrmarkdirty, except we don't have a reldesc. */ -#ifdef OLD_FILE_NAMING -int -smgrblindmarkdirty(int16 which, - char *dbname, - char *relname, - Oid dbid, - Oid relid, - BlockNumber blkno) -{ - char *dbstr; - char *relstr; - int status; - - /* strdup here is probably redundant */ - dbstr = pstrdup(dbname); - relstr = pstrdup(relname); - - status = (*(smgrsw[which].smgr_blindmarkdirty)) (dbstr, relstr, - dbid, relid, - blkno); - - if (status == SM_FAIL) - elog(ERROR, "cannot mark block %d of %s [%s] blind: %m", - blkno, relstr, dbstr); - - pfree(dbstr); - pfree(relstr); - - return status; -} - -#else - int smgrblindmarkdirty(int16 which, RelFileNode rnode, @@ -442,7 +368,6 @@ smgrblindmarkdirty(int16 which, return status; } -#endif /* * smgrnblocks() -- Calculate the number of POSTGRES blocks in the @@ -528,6 +453,27 @@ smgrabort() return SM_SUCCESS; } +#ifdef XLOG +int +smgrsync() +{ + int i; + + for (i = 0; i < NSmgr; i++) + { + if (smgrsw[i].smgr_sync) + { + if ((*(smgrsw[i].smgr_sync)) () == SM_FAIL) + elog(STOP, "storage sync failed on %s: %m", + DatumGetCString(DirectFunctionCall1(smgrout, + Int16GetDatum(i)))); + } + } + + return SM_SUCCESS; +} +#endif + #ifdef NOT_USED bool smgriswo(int16 smgrno) |