Skip to content

Commit e601fb6

Browse files
zhangwenchao-123my-ship-it
authored andcommitted
Change directory table directory's file path from relfilenode to relid.
At first, we use relfilenode to construct the directory table's directory path. However, relfilenode may be different between QD and QE, this will cause the directory table's file paths are different which will be confused in using. As a result, we will use relid that is same between QD and QE to construct the directory table's file path in this commit. Authored-by: Zhang Wenchao zhangwenchao@apache.org
1 parent 615f6ec commit e601fb6

File tree

3 files changed

+9
-18
lines changed

3 files changed

+9
-18
lines changed

src/backend/commands/dirtablecmds.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,21 +136,12 @@ CreateDirectoryTable(CreateDirectoryTableStmt *stmt, Oid relId)
136136
}
137137
else
138138
{
139-
Form_pg_class pg_class_tuple = NULL;
140-
HeapTuple class_tuple = NULL;
141139
RelFileNode relFileNode = {0};
142140

143-
class_tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relId));
144-
if (!HeapTupleIsValid(class_tuple))
145-
elog(ERROR, "cache lookup failed for relation %u", relId);
146-
pg_class_tuple = (Form_pg_class) GETSTRUCT(class_tuple);
147-
148141
relFileNode.spcNode = spcId;
149142
relFileNode.dbNode = MyDatabaseId;
150-
relFileNode.relNode = pg_class_tuple->relfilenode;
151143

152-
dirTablePath = UFileFormatPathName(&relFileNode);
153-
ReleaseSysCache(class_tuple);
144+
dirTablePath = UFileFormatPathName(relId, &relFileNode);
154145
}
155146

156147
/*

src/backend/storage/file/ufile.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static int localFileRead(UFile *file, char *buffer, int amount);
5959
static int localFileWrite(UFile *file, char *buffer, int amount);
6060
static off_t localFileSize(UFile *file);
6161
static void localFileUnlink(Oid spcId, const char *fileName);
62-
static char *localFormatPathName(RelFileNode *relFileNode);
62+
static char *localFormatPathName(Oid relid, RelFileNode *relFileNode);
6363
static bool localEnsurePath(Oid spcId, const char *PathName);
6464
static bool localFileExists(Oid spcId, const char *fileName);
6565
static const char *localFileName(UFile *file);
@@ -307,15 +307,15 @@ localFileUnlink(Oid spcId, const char *fileName)
307307
}
308308

309309
static char *
310-
localFormatPathName(RelFileNode *relFileNode)
310+
localFormatPathName(Oid relid, RelFileNode *relFileNode)
311311
{
312312
if (relFileNode->spcNode == DEFAULTTABLESPACE_OID)
313313
return psprintf("base/%u/%u_dirtable",
314-
relFileNode->dbNode, relFileNode->relNode);
314+
relFileNode->dbNode, relid);
315315
else
316316
return psprintf("pg_tblspc/%u/%s/%u/%u_dirtable",
317317
relFileNode->spcNode, GP_TABLESPACE_VERSION_DIRECTORY,
318-
relFileNode->dbNode, relFileNode->relNode);
318+
relFileNode->dbNode, relid);
319319
}
320320

321321
bool
@@ -440,13 +440,13 @@ UFileUnlink(Oid spcId, const char *fileName)
440440
}
441441

442442
char *
443-
UFileFormatPathName(RelFileNode *relFileNode)
443+
UFileFormatPathName(Oid relid, RelFileNode *relFileNode)
444444
{
445445
FileAm *fileAm;
446446

447447
fileAm = GetTablespaceFileHandler(relFileNode->spcNode);
448448

449-
return fileAm->formatPathName(relFileNode);
449+
return fileAm->formatPathName(relid, relFileNode);
450450
}
451451

452452
bool

src/include/storage/ufile.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ typedef struct FileAm
4444
int (*write) (struct UFile *file, char *buffer, int amount);
4545
int64_t (*size) (struct UFile *file);
4646
void (*unlink) (Oid spcId, const char *fileName);
47-
char* (*formatPathName) (RelFileNode *relFileNode);
47+
char* (*formatPathName) (Oid relid, RelFileNode *relFileNode);
4848
bool (*ensurePath) (Oid spcId, const char *pathName);
4949
bool (*exists) (Oid spcId, const char *fileName);
5050
const char *(*name) (struct UFile *file);
@@ -72,7 +72,7 @@ extern off_t UFileSize(UFile *file);
7272
extern const char *UFileName(UFile *file);
7373

7474
extern void UFileUnlink(Oid spcId, const char *fileName);
75-
extern char* UFileFormatPathName(RelFileNode *relFileNode);
75+
extern char* UFileFormatPathName(Oid relid, RelFileNode *relFileNode);
7676
extern bool UFileEnsurePath(Oid spcId, const char *pathName);
7777
extern bool UFileExists(Oid spcId, const char *fileName);
7878

0 commit comments

Comments
 (0)