diff options
author | Robert Haas <rhaas@postgresql.org> | 2022-09-28 09:45:27 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2022-09-28 09:55:28 -0400 |
commit | a448e49bcbe40fb72e1ed85af910dd216d45bad8 (patch) | |
tree | 2815aed4f5e89bdea91cdd35ec89facaa846e438 /src/backend/storage | |
parent | 6af082723277eeca74f2da65e7759666bf7c7f9c (diff) | |
download | postgresql-a448e49bcbe40fb72e1ed85af910dd216d45bad8.tar.gz postgresql-a448e49bcbe40fb72e1ed85af910dd216d45bad8.zip |
Revert 56-bit relfilenode change and follow-up commits.
There are still some alignment-related failures in the buildfarm,
which might or might not be able to be fixed quickly, but I've also
just realized that it increased the size of many WAL records by 4 bytes
because a block reference contains a RelFileLocator. The effect of that
hasn't been studied or discussed, so revert for now.
Diffstat (limited to 'src/backend/storage')
-rw-r--r-- | src/backend/storage/file/reinit.c | 28 | ||||
-rw-r--r-- | src/backend/storage/freespace/fsmpage.c | 2 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lwlocknames.txt | 1 | ||||
-rw-r--r-- | src/backend/storage/smgr/md.c | 7 | ||||
-rw-r--r-- | src/backend/storage/smgr/smgr.c | 2 |
5 files changed, 16 insertions, 24 deletions
diff --git a/src/backend/storage/file/reinit.c b/src/backend/storage/file/reinit.c index c3faa68126a..647c458b52e 100644 --- a/src/backend/storage/file/reinit.c +++ b/src/backend/storage/file/reinit.c @@ -31,7 +31,7 @@ static void ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, typedef struct { - RelFileNumber relnumber; /* hash key */ + Oid reloid; /* hash key */ } unlogged_relation_entry; /* @@ -184,10 +184,10 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) * need to be reset. Otherwise, this cleanup operation would be * O(n^2). */ - ctl.keysize = sizeof(RelFileNumber); + ctl.keysize = sizeof(Oid); ctl.entrysize = sizeof(unlogged_relation_entry); ctl.hcxt = CurrentMemoryContext; - hash = hash_create("unlogged relation RelFileNumbers", 32, &ctl, + hash = hash_create("unlogged relation OIDs", 32, &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); /* Scan the directory. */ @@ -208,10 +208,10 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) continue; /* - * Put the RELFILENUMBER portion of the name into the hash table, - * if it isn't already. + * Put the OID portion of the name into the hash table, if it + * isn't already. */ - ent.relnumber = atorelnumber(de->d_name); + ent.reloid = atooid(de->d_name); (void) hash_search(hash, &ent, HASH_ENTER, NULL); } @@ -248,10 +248,10 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) continue; /* - * See whether the RELFILENUMBER portion of the name shows up in - * the hash table. If so, nuke it! + * See whether the OID portion of the name shows up in the hash + * table. If so, nuke it! */ - ent.relnumber = atorelnumber(de->d_name); + ent.reloid = atooid(de->d_name); if (hash_search(hash, &ent, HASH_FIND, NULL)) { snprintf(rm_path, sizeof(rm_path), "%s/%s", @@ -286,7 +286,7 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) { ForkNumber forkNum; int relnumchars; - char relnumbuf[RELNUMBERCHARS + 1]; + char relnumbuf[OIDCHARS + 1]; char srcpath[MAXPGPATH * 2]; char dstpath[MAXPGPATH]; @@ -329,7 +329,7 @@ ResetUnloggedRelationsInDbspaceDir(const char *dbspacedirname, int op) { ForkNumber forkNum; int relnumchars; - char relnumbuf[RELNUMBERCHARS + 1]; + char relnumbuf[OIDCHARS + 1]; char mainpath[MAXPGPATH]; /* Skip anything that doesn't look like a relation data file. */ @@ -372,8 +372,8 @@ 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 - * *relnumchars has been set to a value no more than RELNUMBERCHARS, and thus - * that a buffer of RELNUMBERCHARS+1 characters is sufficient to hold the + * *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. */ @@ -386,7 +386,7 @@ parse_filename_for_nontemp_relation(const char *name, int *relnumchars, /* Look for a non-empty string of digits (that isn't too long). */ for (pos = 0; isdigit((unsigned char) name[pos]); ++pos) ; - if (pos == 0 || pos > RELNUMBERCHARS) + if (pos == 0 || pos > OIDCHARS) return false; *relnumchars = pos; diff --git a/src/backend/storage/freespace/fsmpage.c b/src/backend/storage/freespace/fsmpage.c index 1210be7470b..af4dab7d2c7 100644 --- a/src/backend/storage/freespace/fsmpage.c +++ b/src/backend/storage/freespace/fsmpage.c @@ -273,7 +273,7 @@ restart: BlockNumber blknum; BufferGetTag(buf, &rlocator, &forknum, &blknum); - elog(DEBUG1, "fixing corrupt FSM block %u, relation %u/%u/" UINT64_FORMAT, + elog(DEBUG1, "fixing corrupt FSM block %u, relation %u/%u/%u", blknum, rlocator.spcOid, rlocator.dbOid, rlocator.relNumber); /* make sure we hold an exclusive lock */ diff --git a/src/backend/storage/lmgr/lwlocknames.txt b/src/backend/storage/lmgr/lwlocknames.txt index 3c5d0410795..6c7cf6c2956 100644 --- a/src/backend/storage/lmgr/lwlocknames.txt +++ b/src/backend/storage/lmgr/lwlocknames.txt @@ -53,4 +53,3 @@ XactTruncationLock 44 # 45 was XactTruncationLock until removal of BackendRandomLock WrapLimitsVacuumLock 46 NotifyQueueTailLock 47 -RelFileNumberGenLock 48
\ No newline at end of file diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index bed47f07d73..a515bb36ac1 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -257,13 +257,6 @@ mdcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo) * next checkpoint, we prevent reassignment of the relfilenumber until it's * safe, because relfilenumber assignment skips over any existing file. * - * XXX. Although all of this was true when relfilenumbers were 32 bits wide, - * they are now 56 bits wide and do not wrap around, so in the future we can - * change the code to immediately unlink the first segment of the relation - * along with all the others. We still do reuse relfilenumbers when createdb() - * is performed using the file-copy method or during movedb(), but the scenario - * described above can only happen when creating a new relation. - * * We do not need to go through this dance for temp relations, though, because * we never make WAL entries for temp rels, and so a temp rel poses no threat * to the health of a regular rel that has taken over its relfilenumber. diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index ed46ac3f44e..c1a5febcbfd 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -154,7 +154,7 @@ smgropen(RelFileLocator rlocator, BackendId backend) /* First time through: initialize the hash table */ HASHCTL ctl; - ctl.keysize = SizeOfRelFileLocatorBackend; + ctl.keysize = sizeof(RelFileLocatorBackend); ctl.entrysize = sizeof(SMgrRelationData); SMgrRelationHash = hash_create("smgr relation table", 400, &ctl, HASH_ELEM | HASH_BLOBS); |