From 851f4cc75cdd8c831f1baa9a7abf8c8248b65890 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 28 Jul 2022 10:08:10 -0400 Subject: [PATCH] Clean up some residual confusion between OIDs and RelFileNumbers. Commit b0a55e43299c4ea2a9a8c757f9c26352407d0ccc missed a few places where we are referring to the number used as a part of the relation filename as an "OID". We now want to call that a "RelFileNumber". Some of these places actually made it sound like the OID in question is pg_class.oid rather than pg_class.relfilenode, which is especially good to clean up. Dilip Kumar with some editing by me. --- src/backend/commands/dbcommands.c | 4 +-- src/backend/replication/basebackup.c | 16 +++++----- src/backend/storage/file/reinit.c | 44 ++++++++++++++-------------- src/include/storage/reinit.h | 3 +- 4 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 95844bbb69..7bc53f3a0b 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -254,7 +254,7 @@ ScanSourceDatabasePgClass(Oid tbid, Oid dbid, char *srcpath) BlockNumber nblocks; BlockNumber blkno; Buffer buf; - Oid relfilenumber; + RelFileNumber relfilenumber; Page page; List *rlocatorlist = NIL; LockRelId relid; @@ -401,7 +401,7 @@ ScanSourceDatabasePgClassTuple(HeapTupleData *tuple, Oid tbid, Oid dbid, { CreateDBRelInfo *relinfo; Form_pg_class classForm; - Oid relfilenumber = InvalidRelFileNumber; + RelFileNumber relfilenumber = InvalidRelFileNumber; classForm = (Form_pg_class) GETSTRUCT(tuple); diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 637c0ce459..7f85071229 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1172,7 +1172,8 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly, int excludeIdx; bool excludeFound; ForkNumber relForkNum; /* Type of fork if file is a relation */ - int relOidChars; /* Chars in filename that are the rel oid */ + int relnumchars; /* Chars in filename that are the + * relnumber */ /* Skip special stuff */ if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) @@ -1222,23 +1223,24 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly, /* Exclude all forks for unlogged tables except the init fork */ if (isDbDir && - parse_filename_for_nontemp_relation(de->d_name, &relOidChars, + parse_filename_for_nontemp_relation(de->d_name, &relnumchars, &relForkNum)) { /* Never exclude init forks */ if (relForkNum != INIT_FORKNUM) { char initForkFile[MAXPGPATH]; - char relOid[OIDCHARS + 1]; + char relNumber[OIDCHARS + 1]; /* * If any other type of fork, check if there is an init fork - * with the same OID. If so, the file can be excluded. + * with the same RelFileNumber. If so, the file can be + * excluded. */ - memcpy(relOid, de->d_name, relOidChars); - relOid[relOidChars] = '\0'; + memcpy(relNumber, de->d_name, relnumchars); + relNumber[relnumchars] = '\0'; snprintf(initForkFile, sizeof(initForkFile), "%s/%s_init", - path, relOid); + path, relNumber); if (lstat(initForkFile, &statbuf) == 0) { diff --git a/src/backend/storage/file/reinit.c b/src/backend/storage/file/reinit.c index f053fe0495..647c458b52 100644 --- a/src/backend/storage/file/reinit.c +++ b/src/backend/storage/file/reinit.c @@ -195,11 +195,11 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) while ((de = ReadDir(dbspace_dir, dbspacedirname)) != NULL) { ForkNumber forkNum; - int oidchars; + int relnumchars; unlogged_relation_entry ent; /* Skip anything that doesn't look like a relation data file. */ - if (!parse_filename_for_nontemp_relation(de->d_name, &oidchars, + if (!parse_filename_for_nontemp_relation(de->d_name, &relnumchars, &forkNum)) continue; @@ -235,11 +235,11 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) while ((de = ReadDir(dbspace_dir, dbspacedirname)) != NULL) { ForkNumber forkNum; - int oidchars; + int relnumchars; unlogged_relation_entry ent; /* Skip anything that doesn't look like a relation data file. */ - if (!parse_filename_for_nontemp_relation(de->d_name, &oidchars, + if (!parse_filename_for_nontemp_relation(de->d_name, &relnumchars, &forkNum)) continue; @@ -285,13 +285,13 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) while ((de = ReadDir(dbspace_dir, dbspacedirname)) != NULL) { ForkNumber forkNum; - int oidchars; - char oidbuf[OIDCHARS + 1]; + int relnumchars; + char relnumbuf[OIDCHARS + 1]; char srcpath[MAXPGPATH * 2]; char dstpath[MAXPGPATH]; /* Skip anything that doesn't look like a relation data file. */ - if (!parse_filename_for_nontemp_relation(de->d_name, &oidchars, + if (!parse_filename_for_nontemp_relation(de->d_name, &relnumchars, &forkNum)) continue; @@ -304,10 +304,10 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) dbspacedirname, de->d_name); /* Construct destination pathname. */ - memcpy(oidbuf, de->d_name, oidchars); - oidbuf[oidchars] = '\0'; + memcpy(relnumbuf, de->d_name, relnumchars); + relnumbuf[relnumchars] = '\0'; snprintf(dstpath, sizeof(dstpath), "%s/%s%s", - dbspacedirname, oidbuf, de->d_name + oidchars + 1 + + dbspacedirname, relnumbuf, de->d_name + relnumchars + 1 + strlen(forkNames[INIT_FORKNUM])); /* OK, we're ready to perform the actual copy. */ @@ -328,12 +328,12 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) while ((de = ReadDir(dbspace_dir, dbspacedirname)) != NULL) { ForkNumber forkNum; - int oidchars; - char oidbuf[OIDCHARS + 1]; + int relnumchars; + char relnumbuf[OIDCHARS + 1]; char mainpath[MAXPGPATH]; /* Skip anything that doesn't look like a relation data file. */ - if (!parse_filename_for_nontemp_relation(de->d_name, &oidchars, + if (!parse_filename_for_nontemp_relation(de->d_name, &relnumchars, &forkNum)) continue; @@ -342,10 +342,10 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) continue; /* Construct main fork pathname. */ - memcpy(oidbuf, de->d_name, oidchars); - oidbuf[oidchars] = '\0'; + memcpy(relnumbuf, de->d_name, relnumchars); + relnumbuf[relnumchars] = '\0'; snprintf(mainpath, sizeof(mainpath), "%s/%s%s", - dbspacedirname, oidbuf, de->d_name + oidchars + 1 + + dbspacedirname, relnumbuf, de->d_name + relnumchars + 1 + strlen(forkNames[INIT_FORKNUM])); fsync_fname(mainpath, false); @@ -372,13 +372,13 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) * for a non-temporary relation and false otherwise. * * NB: If this function returns true, the caller is entitled to assume that - * *oidchars has been set to the a value no more than OIDCHARS, and thus - * that a buffer of OIDCHARS+1 characters is sufficient to hold the OID - * portion of the filename. This is critical to protect against a possible - * buffer overrun. + * *relnumchars has been set to a value no more than OIDCHARS, and thus + * that a buffer of OIDCHARS+1 characters is sufficient to hold the + * RelFileNumber portion of the filename. This is critical to protect against + * a possible buffer overrun. */ bool -parse_filename_for_nontemp_relation(const char *name, int *oidchars, +parse_filename_for_nontemp_relation(const char *name, int *relnumchars, ForkNumber *fork) { int pos; @@ -388,7 +388,7 @@ parse_filename_for_nontemp_relation(const char *name, int *oidchars, ; if (pos == 0 || pos > OIDCHARS) return false; - *oidchars = pos; + *relnumchars = pos; /* Check for a fork name. */ if (name[pos] != '_') diff --git a/src/include/storage/reinit.h b/src/include/storage/reinit.h index bf2c10d443..b990d28d38 100644 --- a/src/include/storage/reinit.h +++ b/src/include/storage/reinit.h @@ -20,7 +20,8 @@ extern void ResetUnloggedRelations(int op); extern bool parse_filename_for_nontemp_relation(const char *name, - int *oidchars, ForkNumber *fork); + int *relnumchars, + ForkNumber *fork); #define UNLOGGED_RELATION_CLEANUP 0x0001 #define UNLOGGED_RELATION_INIT 0x0002