summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2015-06-15 17:31:11 +0000
committerPavan Deolasee2015-06-15 17:31:11 +0000
commit834a41f392696f2f5245cc337180b290c790e5ec (patch)
tree17df2e0d49d1bc871c76ea19dbfc6c3afb0bc8fa
parent2e33703b521242f2754116c9179a813a81970e93 (diff)
Define new routines for obtaining relation and tablespace path on the client
side
-rw-r--r--src/backend/access/rmgrdesc/smgrdesc.c4
-rw-r--r--src/backend/access/rmgrdesc/xactdesc.c6
-rw-r--r--src/bin/pg_rewind/filemap.c7
-rw-r--r--src/common/relpath.c31
-rw-r--r--src/include/common/relpath.h22
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 */