diff options
author | Pavan Deolasee | 2016-02-09 08:46:21 +0000 |
---|---|---|
committer | Pavan Deolasee | 2016-10-18 09:57:45 +0000 |
commit | c92296d6cd8d3f2dd0b6b39b3264c17d48e61c72 (patch) | |
tree | 994af1543384f86472fc56176aadbc7576daf82a | |
parent | 32fc67762a3c89e937413ff8817dbfb02356f36d (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.c | 8 | ||||
-rw-r--r-- | src/backend/commands/variable.c | 9 | ||||
-rw-r--r-- | src/backend/pgxc/pool/pgxcnode.c | 2 | ||||
-rw-r--r-- | src/backend/postmaster/postmaster.c | 1 | ||||
-rw-r--r-- | src/backend/utils/error/elog.c | 44 | ||||
-rw-r--r-- | src/backend/utils/init/globals.c | 1 | ||||
-rw-r--r-- | src/backend/utils/init/miscinit.c | 1 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 14 | ||||
-rw-r--r-- | src/include/pgxc/pgxc.h | 1 | ||||
-rw-r--r-- | src/include/storage/backendid.h | 1 | ||||
-rw-r--r-- | src/include/utils/guc.h | 1 |
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; |