Define new routines for obtaining relation and tablespace path on the client
authorPavan Deolasee <pavan.deolasee@gmail.com>
Mon, 15 Jun 2015 17:31:11 +0000 (23:01 +0530)
committerPavan Deolasee <pavan.deolasee@gmail.com>
Mon, 15 Jun 2015 17:31:11 +0000 (23:01 +0530)
side

src/backend/access/rmgrdesc/smgrdesc.c
src/backend/access/rmgrdesc/xactdesc.c
src/bin/pg_rewind/filemap.c
src/common/relpath.c
src/include/common/relpath.h

index 56d02c325c6e364b674dd9df90bdee6db91c470d..e163210a388e02d2409d8871d9705102a79900e6 100644 (file)
@@ -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);
index 7b5f98305070c9db43367a301983cef749ba04f1..384169e2587264f810214441bed580d6bd9fab06 100644 (file)
@@ -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);
index cb2bf4d1a0ec3e149690544cd69ab621a2ce1fc7..31617f5871c29ea04921b0d076b0d4666b7c720d 100644 (file)
@@ -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);
index a914ba29eee5af7cae20675ac50cf3279da6441d..9af6955f1ef1a360015e2ce4f97ed46c4aab14a8 100644 (file)
@@ -27,8 +27,6 @@
 #include "pgxc/pgxc.h"
 #endif
 
-#define PGXCNodeName ""
-
 /*
  * Lookup table of fork name by fork number.
  *
@@ -109,8 +107,16 @@ 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)
        {
@@ -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,9 +153,20 @@ 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;
 
@@ -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);
                }
index e7d32eaaefcf8af01c5a888604ef4c13e368b5d2..6bb2c626119cbe9ffac133f38ff1f93cb9f96cfd 100644 (file)
@@ -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 */