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 2015/10/19 06:31:03 UTC

incubator-hawq git commit: HAWQ-51. Support Kerberos for libyarn

Repository: incubator-hawq
Updated Branches:
  refs/heads/master 6061349ae -> 52e970628


HAWQ-51. Support Kerberos for libyarn


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

Branch: refs/heads/master
Commit: 52e970628d7e90a7320eac9e9135b4fae41a91c4
Parents: 6061349
Author: Wen Lin <wl...@pivotal.io>
Authored: Mon Oct 19 11:48:45 2015 +0800
Committer: Wen Lin <wl...@pivotal.io>
Committed: Mon Oct 19 11:48:45 2015 +0800

----------------------------------------------------------------------
 depends/libyarn/src/CMakeLists.txt              |  2 +-
 .../src/libyarnclient/ApplicationClient.cpp     | 12 ++---
 .../src/libyarnclient/ApplicationClient.h       | 57 +++++++++++++++++++-
 .../src/libyarnclient/ApplicationMaster.cpp     |  5 +-
 .../libyarn/src/libyarnclient/LibYarnClient.cpp | 40 ++++++++------
 .../libyarn/src/libyarnclient/LibYarnClient.h   |  4 +-
 .../src/libyarnclient/LibYarnClientC.cpp        |  9 ++--
 .../libyarn/src/libyarnclient/LibYarnClientC.h  |  2 +-
 .../libyarnserver/ApplicationClientProtocol.cpp | 29 +++++++---
 .../libyarnserver/ApplicationClientProtocol.h   | 11 ++--
 depends/libyarn/src/rpc/RpcChannel.cpp          |  4 +-
 depends/libyarn/src/rpc/SaslClient.cpp          | 23 ++------
 depends/libyarn/src/rpc/SaslClient.h            |  2 -
 13 files changed, 135 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/CMakeLists.txt b/depends/libyarn/src/CMakeLists.txt
index ecfa8bb..1ecf6ba 100644
--- a/depends/libyarn/src/CMakeLists.txt
+++ b/depends/libyarn/src/CMakeLists.txt
@@ -2,7 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
 SET(libyarn_VERSION_MAJOR 0)
 SET(libyarn_VERSION_MINOR 1)
-SET(libyarn_VERSION_PATCH 3)
+SET(libyarn_VERSION_PATCH 4)
 SET(libyarn_VERSION_STRING "${libyarn_VERSION_MAJOR}.${libyarn_VERSION_MINOR}.${libyarn_VERSION_PATCH}")
 SET(libyarn_VERSION_API 1)
 SET(libyarn_ROOT_SOURCES_DIR ${CMAKE_SOURCE_DIR}/src)

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/ApplicationClient.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/ApplicationClient.cpp b/depends/libyarn/src/libyarnclient/ApplicationClient.cpp
index 4d586ea..cc72c5b 100644
--- a/depends/libyarn/src/libyarnclient/ApplicationClient.cpp
+++ b/depends/libyarn/src/libyarnclient/ApplicationClient.cpp
@@ -9,14 +9,12 @@
 
 namespace libyarn {
 
-ApplicationClient::ApplicationClient(string &host, string &port) {
+ApplicationClient::ApplicationClient(string &user, string &host, string &port) {
 	std::string tokenService = "";
-	Yarn::Config config;
-	Yarn::Internal::SessionConfig sessionConfig(config);
-	Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser();
-	Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE);
-	appClient = (void*) new ApplicationClientProtocol(host, port, tokenService,
-			sessionConfig, rpcAuth);
+	Yarn::Internal::shared_ptr<Yarn::Config> conf = DefaultConfig().getConfig();
+	Yarn::Internal::SessionConfig sessionConfig(*conf);
+	LOG(INFO, "ApplicationClient session auth method : %s", sessionConfig.getRpcAuthMethod().c_str());
+	appClient = (void*) new ApplicationClientProtocol(user, host, port, tokenService, sessionConfig);
 }
 
 ApplicationClient::ApplicationClient(ApplicationClientProtocol *appclient){

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/ApplicationClient.h
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/ApplicationClient.h b/depends/libyarn/src/libyarnclient/ApplicationClient.h
index 2c3b9c1..ae81ea0 100644
--- a/depends/libyarn/src/libyarnclient/ApplicationClient.h
+++ b/depends/libyarn/src/libyarnclient/ApplicationClient.h
@@ -15,9 +15,58 @@ using namespace std;
 
 namespace libyarn {
 
+class DefaultConfig {
+public:
+    DefaultConfig() : conf(new Yarn::Config) {
+        bool reportError = false;
+        const char * env = getenv("LIBYARN_CONF");
+        std::string confPath = env ? env : "";
+
+        if (!confPath.empty()) {
+            size_t pos = confPath.find_first_of('=');
+
+            if (pos != confPath.npos) {
+                confPath = confPath.c_str() + pos + 1;
+            }
+
+            reportError = true;
+        } else {
+            confPath = "yarn-client.xml";
+        }
+
+        init(confPath, reportError);
+    }
+
+    DefaultConfig(const char * path) : conf(new Yarn::Config) {
+        assert(path != NULL && strlen(path) > 0);
+        init(path, true);
+    }
+
+    Yarn::Internal::shared_ptr<Yarn::Config> getConfig() {
+        return conf;
+    }
+
+private:
+    void init(const std::string & confPath, bool reportError) {
+        if (access(confPath.c_str(), R_OK)) {
+            if (reportError) {
+                LOG(LOG_ERROR,
+                    "Environment variable LIBYARN_CONF is set but %s cannot be read",
+                    confPath.c_str());
+            } else {
+                return;
+            }
+        }
+
+        conf->update(confPath.c_str());
+    }
+private:
+    Yarn::Internal::shared_ptr<Yarn::Config> conf;
+};
+
 class ApplicationClient {
 public:
-	ApplicationClient(string &host, string &port);
+	ApplicationClient(string &user, string &host, string &port);
 
 	ApplicationClient(ApplicationClientProtocol *appclient);
 
@@ -45,6 +94,12 @@ public:
 
 	virtual list<QueueUserACLInfo> getQueueAclsInfo();
 
+    const std::string & getUser() const {return ((ApplicationClientProtocol*)appClient)->getUser();};
+
+    AuthMethod getMethod() const {return ((ApplicationClientProtocol*)appClient)->getMethod();};
+
+    const std::string getPrincipal() const {return ((ApplicationClientProtocol*)appClient)->getPrincipal();};
+
 private:
 	void *appClient;
 };

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/ApplicationMaster.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/ApplicationMaster.cpp b/depends/libyarn/src/libyarnclient/ApplicationMaster.cpp
index 6d23f9a..0d26082 100644
--- a/depends/libyarn/src/libyarnclient/ApplicationMaster.cpp
+++ b/depends/libyarn/src/libyarnclient/ApplicationMaster.cpp
@@ -5,12 +5,13 @@
 #include "common/SessionConfig.h"
 
 #include "ApplicationMaster.h"
+#include "ApplicationClient.h"
 
 namespace libyarn {
 ApplicationMaster::ApplicationMaster(string &schedHost, string &schedPort,
 		UserInfo &user, const string &tokenService) {
-	Config config;
-	SessionConfig sessionConfig(config);
+	Yarn::Internal::shared_ptr<Yarn::Config> conf = DefaultConfig().getConfig();
+	Yarn::Internal::SessionConfig sessionConfig(*conf);
 	RpcAuth rpcAuth(user, AuthMethod::TOKEN);
 	rmClient = (void*) new ApplicationMasterProtocol(schedHost,
 			schedPort, tokenService, sessionConfig, rpcAuth);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/LibYarnClient.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/LibYarnClient.cpp b/depends/libyarn/src/libyarnclient/LibYarnClient.cpp
index cce0a04..eb5718c 100644
--- a/depends/libyarn/src/libyarnclient/LibYarnClient.cpp
+++ b/depends/libyarn/src/libyarnclient/LibYarnClient.cpp
@@ -17,17 +17,17 @@ using namespace Yarn::Internal;
 
 namespace libyarn {
 
-LibYarnClient::LibYarnClient(string &rmHost, string &rmPort,
+LibYarnClient::LibYarnClient(string &user, string &rmHost, string &rmPort,
 		string &schedHost, string &schedPort, string &amHost,
 		int32_t amPort, string &am_tracking_url,int heartbeatInterval) :
-		schedHost(schedHost), schedPort(schedPort), amHost(amHost),
+		amUser(user), schedHost(schedHost), schedPort(schedPort), amHost(amHost),
 		amPort(amPort), am_tracking_url(am_tracking_url),
 		heartbeatInterval(heartbeatInterval),clientJobId(""),response_id(0),
 		keepRun(true){
         pthread_mutex_init( &(heartbeatLock), NULL );
 
 		amrmClient = NULL;
-		appClient = (void*) new ApplicationClient(rmHost, rmPort);
+		appClient = (void*) new ApplicationClient(user, rmHost, rmPort);
 		nmClient = (void*) new ContainerManagement();
 }
 #ifdef MOCKTEST
@@ -107,10 +107,10 @@ int LibYarnClient::createJob(string &jobName, string &queue,string &jobId) {
     	if (clientJobId != ""){
     		throw std::invalid_argument( "Exist an application for the client");
     	}
-        ApplicationClient *appClientAlias = (ApplicationClient*)appClient;
+        ApplicationClient *applicationClient = (ApplicationClient*)appClient;
 
         //1. getNewApplication
-        ApplicationID appId = appClientAlias->getNewApplication();
+        ApplicationID appId = applicationClient->getNewApplication();
         LOG(INFO, "LibYarnClient::createJob, getNewApplication finished, appId:[clusterTimeStamp:%lld,id:%d]",
                 appId.getClusterTimestamp(), appId.getId());
 
@@ -129,13 +129,13 @@ int LibYarnClient::createJob(string &jobName, string &queue,string &jobId) {
         appSubmitCtx.setUnmanagedAM(true);
         appSubmitCtx.setMaxAppAttempts(1);
 
-        appClientAlias->submitApplication(appSubmitCtx);
+        applicationClient->submitApplication(appSubmitCtx);
         LOG(INFO, "LibYarnClient::createJob, submitApplication finished");
 
         //3. wait util AM is ACCEPTED and return the AMRMToken
         ApplicationReport report;
         while (true) {
-            report = appClientAlias->getApplicationReport(appId);
+            report = applicationClient->getApplicationReport(appId);
             LOG(INFO,"LibYarnClient::createJob, appId[cluster_timestamp:%lld,id:%d], appState:%d",
                     appId.getClusterTimestamp(), appId.getId(), report.getYarnApplicationState());
             if ((report.getAMRMToken().getPassword() != "") && report.getYarnApplicationState() == YarnApplicationState::ACCEPTED) {
@@ -150,15 +150,23 @@ int LibYarnClient::createJob(string &jobName, string &queue,string &jobId) {
 
         //4.1 new ApplicationMaster
         Token token = report.getAMRMToken();
-        UserInfo user = UserInfo::LocalUser();
-        Yarn::Token anotherToken;
-        anotherToken.setIdentifier(token.getIdentifier());
-        anotherToken.setKind(token.getKind());
-        anotherToken.setPassword(token.getPassword());
-        anotherToken.setService(token.getService());
-
-        //LOG(INFO,"%s",token.getIdentifier());
-        user.addToken(anotherToken);
+        UserInfo user;
+        if (applicationClient->getMethod() == SIMPLE)
+			user = UserInfo::LocalUser();
+		else if (applicationClient->getMethod() == KERBEROS) {
+			user.setEffectiveUser(applicationClient->getPrincipal());
+			user.setRealUser(applicationClient->getUser());
+		} else {
+			LOG(WARNING, "LibYarnClient::createJob: unsupported RPC method:%d. ", applicationClient->getMethod());
+		}
+
+		Yarn::Token AMToken;
+		AMToken.setIdentifier(token.getIdentifier());
+		AMToken.setKind(token.getKind());
+		AMToken.setPassword(token.getPassword());
+		AMToken.setService(token.getService());
+
+        user.addToken(AMToken);
 #ifndef MOCKTEST
         amrmClient = (void*) new ApplicationMaster(this->schedHost, this->schedPort,
                 user, token.getService());

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/LibYarnClient.h
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/LibYarnClient.h b/depends/libyarn/src/libyarnclient/LibYarnClient.h
index d6cec20..ce6a213 100644
--- a/depends/libyarn/src/libyarnclient/LibYarnClient.h
+++ b/depends/libyarn/src/libyarnclient/LibYarnClient.h
@@ -25,7 +25,7 @@
 namespace libyarn {
 	class LibYarnClient {
 	public:
-		LibYarnClient(string &rmHost, string &rmPort, string &schedHost,
+		LibYarnClient(string &user, string &rmHost, string &rmPort, string &schedHost,
 				string &schedPort, string &amHost, int32_t amPort,
 				string &am_tracking_url, int heartbeatInterval);
 
@@ -99,6 +99,8 @@ namespace libyarn {
 		ApplicationID clientAppId;
 		ApplicationAttemptId clientAppAttempId;
 
+		// the user of running AM, default is postgres
+		string amUser;
 		string schedHost;
 		string schedPort;
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/LibYarnClientC.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/LibYarnClientC.cpp b/depends/libyarn/src/libyarnclient/LibYarnClientC.cpp
index 72b4e1f..916b2c6 100644
--- a/depends/libyarn/src/libyarnclient/LibYarnClientC.cpp
+++ b/depends/libyarn/src/libyarnclient/LibYarnClientC.cpp
@@ -15,10 +15,10 @@ extern "C" {
 
 	struct LibYarnClient_wrapper {
 		public:
-			LibYarnClient_wrapper(string &rmHost, string &rmPort, string &schedHost,
+			LibYarnClient_wrapper(string &rmUser, string &rmHost, string &rmPort, string &schedHost,
 							string &schedPort, string &amHost, int32_t amPort,
 							string &am_tracking_url,int heartbeatInterval) {
-				client = new LibYarnClient(rmHost, rmPort, schedHost, schedPort, amHost,
+				client = new LibYarnClient(rmUser, rmHost, rmPort, schedHost, schedPort, amHost,
 								amPort, am_tracking_url,heartbeatInterval);
 			}
 
@@ -121,16 +121,17 @@ extern "C" {
 		errorMessage = errorMsg;
 	}
 
-	int  newLibYarnClient(char *rmHost, char *rmPort,
+	int  newLibYarnClient(char* user, char *rmHost, char *rmPort,
 					char *schedHost, char *schedPort, char *amHost,
 					int32_t amPort, char *am_tracking_url,LibYarnClient_t **client,int heartbeatInterval) {
+		string userStr(user);
 		string rmHostStr(rmHost);
 		string rmPortStr(rmPort);
 		string schedHostStr(schedHost);
 		string schedPortStr(schedPort);
 		string amHostStr(amHost);
 		string amTrackingUrlStr(am_tracking_url);
-		*client =  new LibYarnClient_t(rmHostStr, rmPortStr, schedHostStr, schedPortStr,
+		*client =  new LibYarnClient_t(userStr, rmHostStr, rmPortStr, schedHostStr, schedPortStr,
 						amHostStr, amPort, amTrackingUrlStr,heartbeatInterval);
 		return FUNCTION_SUCCEEDED;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnclient/LibYarnClientC.h
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnclient/LibYarnClientC.h b/depends/libyarn/src/libyarnclient/LibYarnClientC.h
index ef40f58..6b02ec7 100644
--- a/depends/libyarn/src/libyarnclient/LibYarnClientC.h
+++ b/depends/libyarn/src/libyarnclient/LibYarnClientC.h
@@ -130,7 +130,7 @@ const char* getErrorMessage();
 
 void setErrorMessage(const char* errorMsg);
 
-int newLibYarnClient(char *rmHost, char *rmPort,
+int newLibYarnClient(char* user, char *rmHost, char *rmPort,
 				char *schedHost, char *schedPort, char *amHost,
 				int32_t amPort, char *am_tracking_url,LibYarnClient_t **client,int heartbeatInterval);
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.cpp b/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.cpp
index 5b45f7f..71bc3e9 100644
--- a/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.cpp
+++ b/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.cpp
@@ -15,12 +15,29 @@ using namespace Yarn;
 
 namespace libyarn {
 
-ApplicationClientProtocol::ApplicationClientProtocol(const string & rmHost,
-		const string & rmPort, const string & tokenService,
-		const SessionConfig & c, const RpcAuth & a) :
-		auth(a), client(RpcClient::getClient()), conf(c), protocol(
-		APP_CLIENT_PROTOCOL_VERSION, APP_CLIENT_PROTOCOL,
-		APP_CLIENT_DELEGATION_TOKEN_KIND), server(tokenService, rmHost, rmPort) {
+ApplicationClientProtocol::ApplicationClientProtocol(const string &rmUser,
+			const string & rmHost, const string & rmPort,
+			const string & tokenService,const SessionConfig & c) :
+			client(RpcClient::getClient()), conf(c),
+			protocol(APP_CLIENT_PROTOCOL_VERSION, APP_CLIENT_PROTOCOL,APP_CLIENT_DELEGATION_TOKEN_KIND),
+			server(tokenService, rmHost, rmPort) {
+
+	/* create RpcAuth for rpc method,
+	 * can be SIMPLE or KERBEROS
+	 * */
+	if (RpcAuth::ParseMethod(c.getRpcAuthMethod()) == KERBEROS) {
+		/*
+		 * If using KERBEROS, rmUser should be principal name.
+		 */
+		Yarn::Internal::UserInfo user(rmUser);
+		user.setRealUser(user.getEffectiveUser());
+		Yarn::Internal::RpcAuth rpcAuth(user, KERBEROS);
+		auth = rpcAuth;
+	} else {
+		Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser();
+		Yarn::Internal::RpcAuth rpcAuth(user, SIMPLE);
+		auth = rpcAuth;
+	}
 }
 
 ApplicationClientProtocol::~ApplicationClientProtocol() {

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.h
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.h b/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.h
index 840f713..853f85b 100644
--- a/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.h
+++ b/depends/libyarn/src/libyarnserver/ApplicationClientProtocol.h
@@ -44,9 +44,8 @@ namespace libyarn {
 
 class ApplicationClientProtocol {
 public:
-	ApplicationClientProtocol(const string & rmHost, const string & rmPort,
-			const string & tokenService, const SessionConfig & c,
-			const RpcAuth & a);
+	ApplicationClientProtocol(const string &user, const string &rmHost, const string &rmPort,
+			const string &tokenService, const SessionConfig &c);
 
 	virtual ~ApplicationClientProtocol();
 
@@ -74,6 +73,12 @@ public:
 
 	virtual GetQueueUserAclsInfoResponse getQueueAclsInfo(GetQueueUserAclsInfoRequest &request);
 
+	const string & getUser() {return auth.getUser().getRealUser();};
+
+	AuthMethod getMethod() {return auth.getMethod();};
+
+	const string getPrincipal() {return auth.getUser().getPrincipal();};
+
 private:
 	void invoke(const RpcCall & call);
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/rpc/RpcChannel.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/rpc/RpcChannel.cpp b/depends/libyarn/src/rpc/RpcChannel.cpp
index 3e48cf7..00f45b1 100644
--- a/depends/libyarn/src/rpc/RpcChannel.cpp
+++ b/depends/libyarn/src/rpc/RpcChannel.cpp
@@ -634,7 +634,7 @@ void RpcChannelImpl::sendConnectionHeader(const RpcAuth &auth) {
 void RpcChannelImpl::buildConnectionContext(
     hadoop::common::IpcConnectionContextProto & connectionContext, const RpcAuth & auth) {
     connectionContext.set_protocol(key.getProtocol().getProtocol());
-    std::string euser = key.getAuth().getUser().getPrincipal();
+    std::string euser = key.getAuth().getUser().getEffectiveUser();
     std::string ruser = key.getAuth().getUser().getRealUser();
 
     if (auth.getMethod() != AuthMethod::TOKEN) {
@@ -686,8 +686,10 @@ RpcRemoteCallPtr RpcChannelImpl::getPendingCall(int32_t id) {
 bool RpcChannelImpl::getResponse() {
     int idleTimeout = key.getConf().getMaxIdleTime();
     int pingTimeout = key.getConf().getPingTimeout();
+    int timeout = key.getConf().getRpcTimeout();
     int interval = pingTimeout < idleTimeout ? pingTimeout : idleTimeout;
     interval /= 2;
+    interval = interval < timeout ? interval : timeout;
     steady_clock::time_point s = steady_clock::now();
 
     while (client.isRunning()) {

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/rpc/SaslClient.cpp
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/rpc/SaslClient.cpp b/depends/libyarn/src/rpc/SaslClient.cpp
index 865f907..14d5276 100644
--- a/depends/libyarn/src/rpc/SaslClient.cpp
+++ b/depends/libyarn/src/rpc/SaslClient.cpp
@@ -122,6 +122,9 @@ std::string SaslClient::evaluateChallenge(const std::string & challenge) {
             free(output);
         }
     } else {
+        if (output) {
+            free(output);
+        }
         THROW(AccessControlException, "Failed to evaluate challenge: %s", gsasl_strerror(rc));
     }
 
@@ -136,26 +139,6 @@ bool SaslClient::isComplete() {
     return complete;
 }
 
-std::string SaslClient::getQOP() {
-    const char * retval = gsasl_property_get(session, GSASL_QOP);
-    std::string qop = retval == NULL ? "" : retval;
-    std::transform(qop.begin(), qop.end(), qop.begin(), ::tolower);
-
-    if (qop.find("auth") != qop.npos) {
-        return "auth";
-    }
-
-    if (qop.find("int") != qop.npos) {
-        return "int";
-    }
-
-    if (qop.find("conf") != qop.npos) {
-        return "conf";
-    }
-
-    return "auth";
-}
-
 }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/52e97062/depends/libyarn/src/rpc/SaslClient.h
----------------------------------------------------------------------
diff --git a/depends/libyarn/src/rpc/SaslClient.h b/depends/libyarn/src/rpc/SaslClient.h
index 4cd7754..0424b43 100644
--- a/depends/libyarn/src/rpc/SaslClient.h
+++ b/depends/libyarn/src/rpc/SaslClient.h
@@ -30,8 +30,6 @@ public:
 
     bool isComplete();
 
-    std::string getQOP();
-
 private:
     void initKerberos(const hadoop::common::RpcSaslProto_SaslAuth & auth,
                       const std::string & principal);