Adjust log_line_prefix to log much more information about connections.
authorPavan Deolasee <[email protected]>
Tue, 9 Feb 2016 08:46:21 +0000 (14:16 +0530)
committerPavan Deolasee <[email protected]>
Tue, 9 Feb 2016 08:46:21 +0000 (14:16 +0530)
'R' - now reports information about remote end (type/name/pid) where type can
be 'C' for coordinator, 'D' for datanode, 'A' for application and 'U' for rest

'G' - now reports information about the originating coordinator (name/pid)

'S' - reports the global session identifier.

src/backend/access/transam/gtm.c
src/backend/commands/variable.c
src/backend/pgxc/pool/pgxcnode.c
src/backend/postmaster/postmaster.c
src/backend/utils/error/elog.c
src/backend/utils/init/globals.c
src/backend/utils/init/miscinit.c
src/backend/utils/misc/guc.c
src/include/pgxc/pgxc.h
src/include/storage/backendid.h
src/include/utils/guc.h

index ad4097c355e9d8cc69ed1a1b015c716124293e88..26defd944e154a7fc7d7c2714655df967762b2d8 100644 (file)
@@ -29,7 +29,7 @@
 #include "utils/pg_rusage.h"
 
 /* To access sequences */
-#define MyCoordName \
+#define GetMyCoordName \
        OidIsValid(MyCoordId) ? get_pgxc_nodename(MyCoordId) : ""
 /* Configuration variables */
 char *GtmHost = "localhost";
@@ -497,7 +497,7 @@ GetCurrentValGTM(char *seqname)
 {
        GTM_Sequence ret = -1;
        GTM_SequenceKeyData seqkey;
-       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : MyCoordName;
+       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : GetMyCoordName;
        int             coordPid = IS_PGXC_COORDINATOR ? MyProcPid : MyCoordPid;
        int             status;
 
@@ -533,7 +533,7 @@ GetNextValGTM(char *seqname, GTM_Sequence range, GTM_Sequence *rangemax)
 {
        GTM_Sequence ret = -1;
        GTM_SequenceKeyData seqkey;
-       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : MyCoordName;
+       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : GetMyCoordName;
        int             coordPid = IS_PGXC_COORDINATOR ? MyProcPid : MyCoordPid;
        int             status;
 
@@ -570,7 +570,7 @@ int
 SetValGTM(char *seqname, GTM_Sequence nextval, bool iscalled)
 {
        GTM_SequenceKeyData seqkey;
-       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : MyCoordName;
+       char   *coordName = IS_PGXC_COORDINATOR ? PGXCNodeName : GetMyCoordName;
        int             coordPid = IS_PGXC_COORDINATOR ? MyProcPid : MyCoordPid;
 
        CheckConnection();
index f6826c283e6c069e9648fa4e2f479c96271126c5..3cd825aa7fb1d34698106a78e588fd6d0e20eaef 100644 (file)
@@ -941,6 +941,14 @@ check_global_session(char **newval, void **extra, GucSource source)
 
                coordid = HeapTupleGetOid(coordTup);
 
+               /*
+                * Save the coordinator name is a global variable so that we don't need
+                * to do catalog lookups later, especially if we running outside a
+                * transaction block or in an aborted transaction
+                */
+               if (OidIsValid(coordid))
+                       strncpy(MyCoordName, *newval, NAMEDATALEN);
+
                *separatorPos = '_';
                ReleaseSysCache(coordTup);
        }
@@ -949,6 +957,7 @@ check_global_session(char **newval, void **extra, GucSource source)
        myextra = (global_session_extra *) malloc(sizeof(global_session_extra));
        if (!myextra)
                return false;
+
        myextra->coordid = coordid;
        myextra->coordpid = coordpid;
        *extra = (void *) myextra;
index 7ca3691dcd09fe620d1a9867069a065831b4c339..b10340328028cffb6b4f3829a623f87b9b82e583 100644 (file)
@@ -2658,6 +2658,8 @@ PGXCNodeGetSessionParamStr(void)
                        appendStringInfo(session_params, "SET global_session TO %s_%d;",
                                                         PGXCNodeName, MyProcPid);
                get_set_command(session_param_list, session_params, false);
+               appendStringInfo(session_params, "SET parentPGXCPid TO %d;",
+                                                        MyProcPid);
        }
        return session_params->len == 0 ? NULL : session_params->data;
 }
index 0c32a1ea86f455e296214037c91b5e48fa1a9e26..1366b0694794c379879be20e18880e8a1898f718 100644 (file)
@@ -561,6 +561,7 @@ static void ShmemBackendArrayRemove(Backend *bn);
 #ifdef XCP
 char *parentPGXCNode = NULL;
 int  parentPGXCNodeId = -1;
+int     parentPGXCPid = -1;
 char parentPGXCNodeType = PGXC_NODE_DATANODE;
 #endif
 
index eee276e94fd76231f90b5c03ec05bbedded71792..d85a22e4f19ac4c66c133cb6a59b009812563abd 100644 (file)
@@ -2597,32 +2597,52 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
                                        appendStringInfoString(buf, unpack_sql_state(edata->sqlerrcode));
                                break;
 #ifdef XCP
-                       case 'C':
-                               if (MyProc != NULL)
+                       case 'R':
+                               if (padding != 0)
                                {
-                                       if (padding != 0)
-                                               appendStringInfo(buf, "%*u", padding, MyProc->coordId);
-                                       else
-                                               appendStringInfo(buf, "%u", MyProc->coordId);
+                                       char            strfbuf[128];
+
+                                       snprintf(strfbuf, sizeof(strfbuf) - 1, "(%c/%s/%d)",
+                                                       remoteConnType == REMOTE_CONN_APP ? 'A' : 
+                                                       remoteConnType == REMOTE_CONN_DATANODE ? 'D' :
+                                                       remoteConnType == REMOTE_CONN_COORD ? 'C' : 'U',
+                                                       parentPGXCNode, parentPGXCPid);
+                                       appendStringInfo(buf, "%*s", padding, strfbuf);
                                }
-                               else if (padding != 0)
-                                       appendStringInfoSpaces(buf,
-                                                                                  padding > 0 ? padding : -padding);
+                               else
+                                       appendStringInfo(buf, "(%c/%s/%d)",
+                                                       remoteConnType == REMOTE_CONN_APP ? 'A' : 
+                                                       remoteConnType == REMOTE_CONN_DATANODE ? 'D' :
+                                                       remoteConnType == REMOTE_CONN_COORD ? 'C' : 'U',
+                                                       parentPGXCNode, parentPGXCPid);
                                break;
 
-                       case 'R':
+                       case 'C':
                                if (MyProc != NULL)
                                {
                                        if (padding != 0)
-                                               appendStringInfo(buf, "%*u", padding, MyProc->coordPid);
+                                       {
+                                               char            strfbuf[128];
+
+                                               snprintf(strfbuf, sizeof(strfbuf) - 1, "(%s/%u)",
+                                                                MyCoordName, MyProc->coordPid);
+                                               appendStringInfo(buf, "%*s", padding, strfbuf);
+                                       }
                                        else
-                                               appendStringInfo(buf, "%u", MyProc->coordPid);
+                                               appendStringInfo(buf, "(%s/%u)", MyCoordName, MyProc->coordPid);
                                }
                                else if (padding != 0)
                                        appendStringInfoSpaces(buf,
                                                                                   padding > 0 ? padding : -padding);
                                break;
 
+                       case 'S':
+                               if (padding != NULL)
+                                       appendStringInfo(buf, "%*s", padding, global_session_string);
+                               else
+                                       appendStringInfo(buf, "%s", global_session_string);
+
+                               break;
 #endif                         
                        default:
                                /* format error - ignore it */
index d91257f15282d8045782fd41f7a89655b8ac5dbd..656a672432928e8885e6dc5271da86a84dbf8958 100644 (file)
@@ -75,6 +75,7 @@ char          postgres_exec_path[MAXPGPATH];          /* full path to backend */
 
 #ifdef XCP
 Oid                    MyCoordId = InvalidOid;
+char           MyCoordName[NAMEDATALEN];
 
 int            MyCoordPid = 0;
 LocalTransactionId     MyCoordLxid = 0;
index cd6536f25a93760cc3f5e0d37483e8ea0a4ddf4c..5bdc6bdfaca9657fe543489aa90cae1d6f181cd1 100644 (file)
@@ -61,6 +61,7 @@
 #include "utils/snapmgr.h"
 #endif
 #include "utils/syscache.h"
+#include "utils/lsyscache.h"
 
 
 #define DIRECTORY_LOCK_FILE            "postmaster.pid"
index f2559100af4ace3c1c9bc64a3f56c046372c73bb..d562e2486d4221e4f68f391db2bb2d1e76dd1fa8 100644 (file)
@@ -544,7 +544,7 @@ static char *XactIsoLevel_string;
 static char *data_directory;
 static char *session_authorization_string;
 #ifdef XCP
-static char *global_session_string;
+char *global_session_string;
 #endif
 static int     max_function_args;
 static int     max_index_keys;
@@ -2977,6 +2977,18 @@ static struct config_int ConfigureNamesInt[] =
                NULL, NULL, NULL
        },
 
+       {
+               {"parentPGXCPid", PGC_USERSET, UNGROUPED,
+                       gettext_noop("PID of the remote process attached to this session."),
+                       gettext_noop("This GUC only makes sense when a coordinator or a "
+                                       "datanode has opened the session"),
+                       GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_AUTO_FILE | GUC_DISALLOW_IN_FILE | GUC_NO_SHOW_ALL
+               },
+               &parentPGXCPid,
+               -1, -1, INT_MAX,
+               NULL, NULL, NULL
+       },
+
 #endif
 #endif /* PGXC */
 
index af68918b5d1c56c0b989c77237b00a1fe25522e1..d918d2c9b34b55804cc798f9571efb82d549633d 100644 (file)
@@ -26,6 +26,7 @@ extern bool isPGXCCoordinator;
 extern bool isPGXCDataNode;
 extern bool isRestoreMode;
 extern char *parentPGXCNode;
+extern int parentPGXCPid;
 extern int     parentPGXCNodeId;
 extern char    parentPGXCNodeType;
 
index a0a77233a9b3d03a1e624a651a5e63d9c999f87a..a4e131a7c09af433dc81bf9e28df92592fa9a313 100644 (file)
@@ -37,6 +37,7 @@ extern PGDLLIMPORT BackendId MyBackendId;             /* backend id of this backend */
  * of other backends under the same postmaster.
  */
 extern PGDLLIMPORT Oid MyCoordId;
+extern PGDLLIMPORT char MyCoordName[NAMEDATALEN];
 
 extern PGDLLIMPORT int MyCoordPid;
 extern PGDLLIMPORT LocalTransactionId MyCoordLxid;
index 60586f406b267093f9b79b7f1ac87d1fd7976884..bdd197c25400265bbdd61e3f0c62966536593db7 100644 (file)
@@ -280,6 +280,7 @@ extern int  tcp_keepalives_count;
 
 #ifdef XCP
 extern char    *storm_catalog_remap_string;
+extern char *global_session_string;
 #endif
 #ifdef TRACE_SORT
 extern bool trace_sort;