You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by zt...@apache.org on 2021/12/09 06:25:48 UTC

[hawq] 03/04: HAWQ-1820. avoid of qe termination by proxy dispatcher

This is an automated email from the ASF dual-hosted git repository.

ztao1987 pushed a commit to branch ztao
in repository https://gitbox.apache.org/repos/asf/hawq.git

commit 3636513fb67db810894d859c4cdda6c6f2a70fc2
Author: ztao1987 <zh...@gmail.com>
AuthorDate: Thu Dec 9 14:23:09 2021 +0800

    HAWQ-1820. avoid of qe termination by proxy dispatcher
---
 src/backend/cdb/cdbvars.c   | 1 +
 src/backend/tcop/postgres.c | 3 ++-
 src/include/cdb/cdbvars.h   | 2 ++
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/backend/cdb/cdbvars.c b/src/backend/cdb/cdbvars.c
index 0225d34..219743a 100644
--- a/src/backend/cdb/cdbvars.c
+++ b/src/backend/cdb/cdbvars.c
@@ -54,6 +54,7 @@
 GpRoleValue Gp_role;			/* Role paid by this Greenplum Database backend */
 char	   *gp_role_string;	/* Staging area for guc.c */
 bool		gp_set_read_only;	/* Staging area for guc.c */
+bool        gp_is_proxy_dispatcher = false;
 bool        proxy_dispatcher_prepare_error = false;
 
 GpRoleValue Gp_session_role;	/* Role paid by this Greenplum Database backend */
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index ba6c17a..cd48d60 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -4903,7 +4903,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 		/*
 		 * (3) read a command (loop blocks here)
 		 */
-		if (Gp_role == GP_ROLE_DISPATCH)
+		if (Gp_role == GP_ROLE_DISPATCH && !gp_is_proxy_dispatcher)
 		{
 			/*
 			 * We want to check to see if our session goes "idle" (nobody sending us work to do)
@@ -5504,6 +5504,7 @@ PostgresMain(int argc, char *argv[], const char *username)
 			case 'V':  /* HAWQ proxy dispatcher startup info*/
 			{
 			  Gp_role = GP_ROLE_DISPATCH;  // I am proxy dispatcher
+			  gp_is_proxy_dispatcher = true;
 			  PG_TRY();
 			  {
 			    set_ps_display("proxy dispatcher", false);
diff --git a/src/include/cdb/cdbvars.h b/src/include/cdb/cdbvars.h
index 5b58562..2b6bfdc 100644
--- a/src/include/cdb/cdbvars.h
+++ b/src/include/cdb/cdbvars.h
@@ -144,6 +144,8 @@ extern char *gp_role_string;	/* Use by guc.c as staging area for value. */
 extern const char *assign_gp_role(const char *newval, bool doit, GucSource source);
 extern const char *show_gp_role(void);
 
+extern bool gp_is_proxy_dispatcher;
+
 extern bool proxy_dispatcher_prepare_error;
 
 extern bool gp_reraise_signal; /* try to force a core dump ?*/