HDFS-11908: libhdfs++: Authentication failure when first NN of a kerberized HA cluster is standby. Contributed by James Clampffer

This commit is contained in:
James Clampffer 2017-07-10 13:47:51 -04:00
parent e64ba87486
commit 23afd50865
3 changed files with 12 additions and 4 deletions

View File

@ -80,6 +80,7 @@ class RpcConnection : public std::enable_shared_from_this<RpcConnection> {
void SetEventHandlers(std::shared_ptr<LibhdfsEvents> event_handlers); void SetEventHandlers(std::shared_ptr<LibhdfsEvents> event_handlers);
void SetClusterName(std::string cluster_name); void SetClusterName(std::string cluster_name);
void SetAuthInfo(const AuthInfo& auth_info);
LockFreeRpcEngine *engine() { return engine_; } LockFreeRpcEngine *engine() { return engine_; }
::asio::io_service &io_service(); ::asio::io_service &io_service();

View File

@ -383,6 +383,11 @@ void RpcConnection::SetClusterName(std::string cluster_name) {
cluster_name_ = cluster_name; cluster_name_ = cluster_name;
} }
void RpcConnection::SetAuthInfo(const AuthInfo& auth_info) {
std::lock_guard<std::mutex> state_lock(connection_state_lock_);
auth_info_ = auth_info;
}
void RpcConnection::CommsError(const Status &status) { void RpcConnection::CommsError(const Status &status) {
assert(lock_held(connection_state_lock_)); // Must be holding lock before calling assert(lock_held(connection_state_lock_)); // Must be holding lock before calling
LOG_DEBUG(kRPC, << "RpcConnection::CommsError called"); LOG_DEBUG(kRPC, << "RpcConnection::CommsError called");

View File

@ -176,10 +176,12 @@ std::shared_ptr<RpcConnection> RpcEngine::NewConnection()
std::shared_ptr<RpcConnection> RpcEngine::InitializeConnection() std::shared_ptr<RpcConnection> RpcEngine::InitializeConnection()
{ {
std::shared_ptr<RpcConnection> result = NewConnection(); std::shared_ptr<RpcConnection> newConn = NewConnection();
result->SetEventHandlers(event_handlers_); newConn->SetEventHandlers(event_handlers_);
result->SetClusterName(cluster_name_); newConn->SetClusterName(cluster_name_);
return result; newConn->SetAuthInfo(auth_info_);
return newConn;
} }
void RpcEngine::AsyncRpcCommsError( void RpcEngine::AsyncRpcCommsError(