diff options
author | Pavan Deolasee | 2015-06-15 17:31:11 +0000 |
---|---|---|
committer | Pavan Deolasee | 2015-06-15 17:31:11 +0000 |
commit | 834a41f392696f2f5245cc337180b290c790e5ec (patch) | |
tree | 17df2e0d49d1bc871c76ea19dbfc6c3afb0bc8fa | |
parent | 2e33703b521242f2754116c9179a813a81970e93 (diff) |
Define new routines for obtaining relation and tablespace path on the client
side
-rw-r--r-- | src/backend/access/rmgrdesc/smgrdesc.c | 4 | ||||
-rw-r--r-- | src/backend/access/rmgrdesc/xactdesc.c | 6 | ||||
-rw-r--r-- | src/bin/pg_rewind/filemap.c | 7 | ||||
-rw-r--r-- | src/common/relpath.c | 31 | ||||
-rw-r--r-- | src/include/common/relpath.h | 22 |
5 files changed, 54 insertions, 16 deletions
diff --git a/src/backend/access/rmgrdesc/smgrdesc.c b/src/backend/access/rmgrdesc/smgrdesc.c index 56d02c325c..e163210a38 100644 --- a/src/backend/access/rmgrdesc/smgrdesc.c +++ b/src/backend/access/rmgrdesc/smgrdesc.c @@ -27,7 +27,7 @@ smgr_desc(StringInfo buf, XLogReaderState *record) if (info == XLOG_SMGR_CREATE) { xl_smgr_create *xlrec = (xl_smgr_create *) rec; - char *path = relpathperm(xlrec->rnode, xlrec->forkNum); + char *path = relpathperm_client(xlrec->rnode, xlrec->forkNum, ""); appendStringInfoString(buf, path); pfree(path); @@ -35,7 +35,7 @@ smgr_desc(StringInfo buf, XLogReaderState *record) else if (info == XLOG_SMGR_TRUNCATE) { xl_smgr_truncate *xlrec = (xl_smgr_truncate *) rec; - char *path = relpathperm(xlrec->rnode, MAIN_FORKNUM); + char *path = relpathperm_client(xlrec->rnode, MAIN_FORKNUM, ""); appendStringInfo(buf, "%s to %u blocks", path, xlrec->blkno); pfree(path); diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c index 7b5f983050..384169e258 100644 --- a/src/backend/access/rmgrdesc/xactdesc.c +++ b/src/backend/access/rmgrdesc/xactdesc.c @@ -189,7 +189,8 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId appendStringInfoString(buf, "; rels:"); for (i = 0; i < parsed.nrels; i++) { - char *path = relpathperm(parsed.xnodes[i], MAIN_FORKNUM); + char *path = relpathperm_client(parsed.xnodes[i], + MAIN_FORKNUM, ""); appendStringInfo(buf, " %s", path); pfree(path); @@ -262,7 +263,8 @@ xact_desc_abort(StringInfo buf, uint8 info, xl_xact_abort *xlrec) appendStringInfoString(buf, "; rels:"); for (i = 0; i < parsed.nrels; i++) { - char *path = relpathperm(parsed.xnodes[i], MAIN_FORKNUM); + char *path = relpathperm_client(parsed.xnodes[i], + MAIN_FORKNUM, ""); appendStringInfo(buf, " %s", path); pfree(path); diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c index cb2bf4d1a0..31617f5871 100644 --- a/src/bin/pg_rewind/filemap.c +++ b/src/bin/pg_rewind/filemap.c @@ -626,7 +626,14 @@ datasegpath(RelFileNode rnode, ForkNumber forknum, BlockNumber segno) char *path; char *segpath; +#ifdef XCP + /* + * TODO!! Pass correct node name + */ + path = relpathperm_client(rnode, forknum, ""); +#else path = relpathperm(rnode, forknum); +#endif if (segno > 0) { segpath = psprintf("%s.%u", path, segno); diff --git a/src/common/relpath.c b/src/common/relpath.c index a914ba29ee..9af6955f1e 100644 --- a/src/common/relpath.c +++ b/src/common/relpath.c @@ -27,8 +27,6 @@ #include "pgxc/pgxc.h" #endif -#define PGXCNodeName "" - /* * Lookup table of fork name by fork number. * @@ -109,9 +107,17 @@ forkname_chars(const char *str, ForkNumber *fork) * * XXX this must agree with GetRelationPath()! */ +#ifndef FRONTEND char * GetDatabasePath(Oid dbNode, Oid spcNode) { + return GetDatabasePath_client(dbNode, spcNode, PGXCNodeName); +} +#endif + +char * +GetDatabasePath_client(Oid dbNode, Oid spcNode, const char *nodename) +{ if (spcNode == GLOBALTABLESPACE_OID) { /* Shared system relations live in {datadir}/global */ @@ -129,7 +135,7 @@ GetDatabasePath(Oid dbNode, Oid spcNode) #ifdef PGXC return psprintf("pg_tblspc/%u/%s_%s/%u", spcNode, TABLESPACE_VERSION_DIRECTORY, - PGXCNodeName, + nodename, dbNode); #else return psprintf("pg_tblspc/%u/%s/%u", @@ -147,10 +153,21 @@ GetDatabasePath(Oid dbNode, Oid spcNode) * would have to include a backend-only header to do that; doesn't seem worth * the trouble considering BackendId is just int anyway. */ +#ifndef FRONTEND char * GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, int backendId, ForkNumber forkNumber) { + return GetRelationPath_client(dbNode, spcNode, relNode, backendId, + forkNumber, PGXCNodeName); +} +#endif + +char * +GetRelationPath_client(Oid dbNode, Oid spcNode, Oid relNode, + int backendId, ForkNumber forkNumber, + const char *nodename) +{ char *path; if (spcNode == GLOBALTABLESPACE_OID) @@ -202,7 +219,7 @@ GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, spcNode, TABLESPACE_VERSION_DIRECTORY, #ifdef PGXC /* Postgres-XC tablespaces include node name */ - PGXCNodeName, + nodename, #endif dbNode, relNode, @@ -216,7 +233,7 @@ GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, spcNode, TABLESPACE_VERSION_DIRECTORY, #ifdef PGXC /* Postgres-XC tablespaces include node name */ - PGXCNodeName, + nodename, #endif dbNode, relNode); } @@ -231,7 +248,7 @@ GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, spcNode, TABLESPACE_VERSION_DIRECTORY, #ifdef PGXC /* Postgres-XC tablespaces include node name */ - PGXCNodeName, + nodename, #endif dbNode, backendId, relNode, forkNames[forkNumber]); @@ -244,7 +261,7 @@ GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, spcNode, TABLESPACE_VERSION_DIRECTORY, #ifdef PGXC /* Postgres-XC tablespaces include node name */ - PGXCNodeName, + nodename, #endif dbNode, backendId, relNode); } diff --git a/src/include/common/relpath.h b/src/include/common/relpath.h index e7d32eaaef..6bb2c62611 100644 --- a/src/include/common/relpath.h +++ b/src/include/common/relpath.h @@ -49,9 +49,17 @@ extern int forkname_chars(const char *str, ForkNumber *fork); * Stuff for computing filesystem pathnames for relations. */ extern char *GetDatabasePath(Oid dbNode, Oid spcNode); +#ifdef XCP +extern char *GetDatabasePath_client(Oid dbNode, Oid spcNode, const char *nodename); +#endif extern char *GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, int backendId, ForkNumber forkNumber); +#ifdef XCP +extern char *GetRelationPath_client(Oid dbNode, Oid spcNode, Oid relNode, + int backendId, ForkNumber forkNumber, + const char *nodename); +#endif /* * Wrapper macros for GetRelationPath. Beware of multiple @@ -62,18 +70,22 @@ extern char *GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, #define relpathbackend(rnode, backend, forknum) \ GetRelationPath((rnode).dbNode, (rnode).spcNode, (rnode).relNode, \ backend, forknum) +#ifdef XCP +#define relpathbackend_client(rnode, backend, forknum, nodename) \ + GetRelationPath_client((rnode).dbNode, (rnode).spcNode, (rnode).relNode, \ + backend, forknum, nodename) +#endif /* First argument is a RelFileNode */ #define relpathperm(rnode, forknum) \ relpathbackend(rnode, InvalidBackendId, forknum) +#ifdef XCP +#define relpathperm_client(rnode, forknum, nodename) \ + relpathbackend_client(rnode, InvalidBackendId, forknum, nodename) +#endif /* First argument is a RelFileNodeBackend */ -#ifdef XCP -#define relpath(rnode, forknum) \ - relpathbackend((rnode).node, InvalidBackendId, (forknum)) -#else #define relpath(rnode, forknum) \ relpathbackend((rnode).node, (rnode).backend, forknum) -#endif #endif /* RELPATH_H */ |