summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2016-02-09 08:46:21 +0000
committerPavan Deolasee2016-10-18 09:57:45 +0000
commitc92296d6cd8d3f2dd0b6b39b3264c17d48e61c72 (patch)
tree994af1543384f86472fc56176aadbc7576daf82a
parent32fc67762a3c89e937413ff8817dbfb02356f36d (diff)
Adjust log_line_prefix to log much more information about connections.
'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.
-rw-r--r--src/backend/access/transam/gtm.c8
-rw-r--r--src/backend/commands/variable.c9
-rw-r--r--src/backend/pgxc/pool/pgxcnode.c2
-rw-r--r--src/backend/postmaster/postmaster.c1
-rw-r--r--src/backend/utils/error/elog.c44
-rw-r--r--src/backend/utils/init/globals.c1
-rw-r--r--src/backend/utils/init/miscinit.c1
-rw-r--r--src/backend/utils/misc/guc.c14
-rw-r--r--src/include/pgxc/pgxc.h1
-rw-r--r--src/include/storage/backendid.h1
-rw-r--r--src/include/utils/guc.h1
11 files changed, 66 insertions, 17 deletions
diff --git a/src/backend/access/transam/gtm.c b/src/backend/access/transam/gtm.c
index ad4097c355..26defd944e 100644
--- a/src/backend/access/transam/gtm.c
+++ b/src/backend/access/transam/gtm.c
@@ -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();
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 8a4516c21f..19afb3d80c 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -940,6 +940,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);
}
@@ -948,6 +956,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;
diff --git a/src/backend/pgxc/pool/pgxcnode.c b/src/backend/pgxc/pool/pgxcnode.c
index 7ca3691dcd..b103403280 100644
--- a/src/backend/pgxc/pool/pgxcnode.c
+++ b/src/backend/pgxc/pool/pgxcnode.c
@@ -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;
}
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 86ebaac5f0..60045e06a4 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -555,6 +555,7 @@ static void ShmemBackendArrayRemove(Backend *bn);
#ifdef XCP
char *parentPGXCNode = NULL;
int parentPGXCNodeId = -1;
+int parentPGXCPid = -1;
char parentPGXCNodeType = PGXC_NODE_DATANODE;
#endif
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index eee276e94f..d85a22e4f1 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -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 */
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index d91257f152..656a672432 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -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;
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 136b81cb71..880526ed55 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -61,6 +61,7 @@
#include "utils/snapmgr.h"
#endif
#include "utils/syscache.h"
+#include "utils/lsyscache.h"
#define DIRECTORY_LOCK_FILE "postmaster.pid"
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index e74666d045..fb521d2e79 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -553,7 +553,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;
@@ -2975,6 +2975,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 */
diff --git a/src/include/pgxc/pgxc.h b/src/include/pgxc/pgxc.h
index af68918b5d..d918d2c9b3 100644
--- a/src/include/pgxc/pgxc.h
+++ b/src/include/pgxc/pgxc.h
@@ -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;
diff --git a/src/include/storage/backendid.h b/src/include/storage/backendid.h
index a0a77233a9..a4e131a7c0 100644
--- a/src/include/storage/backendid.h
+++ b/src/include/storage/backendid.h
@@ -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;
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 60586f406b..bdd197c254 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -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;