You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by wl...@apache.org on 2016/07/22 04:59:41 UTC

incubator-hawq git commit: HAWQ-940. Fix Kerberos ticket expired for libyarn operations

Repository: incubator-hawq
Updated Branches:
  refs/heads/master eab41edab -> 27d72576f


HAWQ-940. Fix Kerberos ticket expired for libyarn operations


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/27d72576
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/27d72576
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/27d72576

Branch: refs/heads/master
Commit: 27d72576fdbb03a8e0b8ea21408c6079febc0625
Parents: eab41ed
Author: Wen Lin <wl...@pivotal.io>
Authored: Fri Jul 22 12:38:06 2016 +0800
Committer: Wen Lin <wl...@pivotal.io>
Committed: Fri Jul 22 12:38:06 2016 +0800

----------------------------------------------------------------------
 .../resourcebroker/resourcebroker_LIBYARN.c     |   2 -
 .../resourcebroker_LIBYARN_proc.c               | 144 +++++++++----------
 2 files changed, 72 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/27d72576/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN.c
----------------------------------------------------------------------
diff --git a/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN.c b/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN.c
index 37e3bca..845cc89 100644
--- a/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN.c
+++ b/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN.c
@@ -470,8 +470,6 @@ int RB_LIBYARN_handleNotification(void)
 	uint32_t		messagehead[2];
 	uint32_t		messageid;
 
-
-
 	FD_ZERO(&rfds);
 	FD_SET(fd, &rfds);
 	timeout.tv_sec  = 0;

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/27d72576/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN_proc.c
----------------------------------------------------------------------
diff --git a/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN_proc.c b/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN_proc.c
index 5a6e6a2..fc0a6db 100644
--- a/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN_proc.c
+++ b/src/backend/resourcemanager/resourcebroker/resourcebroker_LIBYARN_proc.c
@@ -136,28 +136,30 @@ int ResBrokerMain(void)
 
 	ResBrokerKeepRun = true;
 
-    /* Load parameters */
-    int res = loadParameters();
-    if ( res != FUNC_RETURN_OK ) {
-        elog(WARNING, "Resource broker loads invalid yarn parameters");
-    }
+	/* Load parameters */
+	int res = loadParameters();
+	if ( res != FUNC_RETURN_OK ) {
+		elog(WARNING, "Resource broker loads invalid yarn parameters");
+	}
 
-    /* Set signal behavior */
-    PG_SETMASK(&BlockSig);
-    pqsignal(SIGHUP , SIG_IGN);
-    pqsignal(SIGINT , quitResBroker);
-    pqsignal(SIGTERM, quitResBroker);
-    pqsignal(SIGQUIT, SIG_DFL);
-    pqsignal(SIGPIPE, SIG_IGN);
-    pqsignal(SIGUSR1, SIG_IGN);
-    pqsignal(SIGUSR2, SIG_IGN);
-    pqsignal(SIGCHLD, SIG_IGN);
-    pqsignal(SIGTTIN, SIG_IGN);
-    pqsignal(SIGTTOU, SIG_IGN);
-    PG_SETMASK(&UnBlockSig);
+	/* Set signal behavior */
+	PG_SETMASK(&BlockSig);
+	pqsignal(SIGHUP , SIG_IGN);
+	pqsignal(SIGINT , quitResBroker);
+	pqsignal(SIGTERM, quitResBroker);
+	pqsignal(SIGQUIT, SIG_DFL);
+	pqsignal(SIGPIPE, SIG_IGN);
+	pqsignal(SIGUSR1, SIG_IGN);
+	pqsignal(SIGUSR2, SIG_IGN);
+	/* call system() needs set SIG_DFL for SIGCHLD */
+	pqsignal(SIGCHLD, SIG_DFL);
+	pqsignal(SIGTTIN, SIG_IGN);
+	pqsignal(SIGTTOU, SIG_IGN);
+	PG_SETMASK(&UnBlockSig);
 
 	res = ResBrokerMainInternal();
 
+	pqsignal(SIGCHLD, SIG_IGN);
 	elog(LOG, "YARN mode resource broker goes into exit phase.");
 	return res;
 }
@@ -195,6 +197,12 @@ int ResBrokerMainInternal(void)
 			continue;
 		}
 
+		/* refresh kerberos ticket */
+		if (enable_secure_filesystem && !login())
+		{
+			elog(WARNING, "Resource broker failed to refresh kerberos ticket.");
+		}
+
 		/*
 		 * If the connection between YARN and YARN resource broker is not
 		 * created, try to build up connection and register application.
@@ -339,71 +347,63 @@ char * ExtractPrincipalFromTicketCache(const char* cache)
 	char *priName = NULL, *retval = NULL;
 	const char *errorMsg = NULL;
 
-    /*
-     * refresh kerberos ticket
-     */
-    if (!login()) {
-        elog(WARNING, "Cannot login kerberos.");
-        return NULL;
-    }
+	if (cache) {
+		if (0 != setenv("KRB5CCNAME", cache, 1)) {
+			elog(WARNING, "Cannot set env parameter \"KRB5CCNAME\" when extract principal from cache:%s", cache);
+			return NULL;
+		}
+	}
 
-    if (cache) {
-        if (0 != setenv("KRB5CCNAME", cache, 1)) {
-            elog(WARNING, "Cannot set env parameter \"KRB5CCNAME\" when extract principal from cache:%s", cache);
-            return NULL;
-        }
-    }
+	do {
+		if (0 != (ec = krb5_init_context(&cxt))) {
+			break;
+		}
 
-    do {
-        if (0 != (ec = krb5_init_context(&cxt))) {
-            break;
-        }
+		if (0 != (ec = krb5_cc_default(cxt, &ccache))) {
+			break;
+		}
 
-        if (0 != (ec = krb5_cc_default(cxt, &ccache))) {
-            break;
-        }
+		if (0 != (ec = krb5_cc_get_principal(cxt, ccache, &principal))) {
+			break;
+		}
 
-        if (0 != (ec = krb5_cc_get_principal(cxt, ccache, &principal))) {
-            break;
-        }
+		if (0 != (ec = krb5_unparse_name(cxt, principal, &priName))) {
+			break;
+		}
+	} while (0);
 
-        if (0 != (ec = krb5_unparse_name(cxt, principal, &priName))) {
-            break;
-        }
-    } while (0);
-
-    if (!ec) {
-        retval = strdup(priName);
-    } else {
-        if (cxt) {
-        	errorMsg = krb5_get_error_message(cxt, ec);
-        } else {
-        	errorMsg = "Cannot initialize kerberos context";
-        }
-    }
+	if (!ec) {
+		retval = strdup(priName);
+	} else {
+		if (cxt) {
+			errorMsg = krb5_get_error_message(cxt, ec);
+		} else {
+			errorMsg = "Cannot initialize kerberos context";
+		}
+	}
 
-    if (priName != NULL) {
-        krb5_free_unparsed_name(cxt, priName);
-    }
+	if (priName != NULL) {
+		krb5_free_unparsed_name(cxt, priName);
+	}
 
-    if (principal != NULL) {
-        krb5_free_principal(cxt, principal);
-    }
+	if (principal != NULL) {
+		krb5_free_principal(cxt, principal);
+	}
 
-    if (ccache != NULL) {
-        krb5_cc_close(cxt, ccache);
-    }
+	if (ccache != NULL) {
+		krb5_cc_close(cxt, ccache);
+	}
 
-    if (cxt != NULL) {
-        krb5_free_context(cxt);
-    }
+	if (cxt != NULL) {
+		krb5_free_context(cxt);
+	}
 
-    if (errorMsg != NULL) {
-    	elog(WARNING, "Fail to extract principal from cache, because : %s", errorMsg);
-    	return NULL;
-    }
+	if (errorMsg != NULL) {
+		elog(WARNING, "Fail to extract principal from cache, because : %s", errorMsg);
+		return NULL;
+	}
 
-    return retval;
+	return retval;
 }
 
 int  loadParameters(void)