From 23afd508651c5e4a10cf2c4784b543a6e77f3791 Mon Sep 17 00:00:00 2001 From: James Clampffer Date: Mon, 10 Jul 2017 13:47:51 -0400 Subject: [PATCH] HDFS-11908: libhdfs++: Authentication failure when first NN of a kerberized HA cluster is standby. Contributed by James Clampffer --- .../src/main/native/libhdfspp/lib/rpc/rpc_connection.h | 1 + .../native/libhdfspp/lib/rpc/rpc_connection_impl.cc | 5 +++++ .../src/main/native/libhdfspp/lib/rpc/rpc_engine.cc | 10 ++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.h b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.h index 7a671fe6d33..449a1b6626c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.h +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection.h @@ -80,6 +80,7 @@ class RpcConnection : public std::enable_shared_from_this { void SetEventHandlers(std::shared_ptr event_handlers); void SetClusterName(std::string cluster_name); + void SetAuthInfo(const AuthInfo& auth_info); LockFreeRpcEngine *engine() { return engine_; } ::asio::io_service &io_service(); diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc index 198bcdced98..06b16168fe3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_connection_impl.cc @@ -383,6 +383,11 @@ void RpcConnection::SetClusterName(std::string cluster_name) { cluster_name_ = cluster_name; } +void RpcConnection::SetAuthInfo(const AuthInfo& auth_info) { + std::lock_guard state_lock(connection_state_lock_); + auth_info_ = auth_info; +} + void RpcConnection::CommsError(const Status &status) { assert(lock_held(connection_state_lock_)); // Must be holding lock before calling LOG_DEBUG(kRPC, << "RpcConnection::CommsError called"); diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_engine.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_engine.cc index 22c0e74c6e7..98c41dad1f0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_engine.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/rpc/rpc_engine.cc @@ -176,10 +176,12 @@ std::shared_ptr RpcEngine::NewConnection() std::shared_ptr RpcEngine::InitializeConnection() { - std::shared_ptr result = NewConnection(); - result->SetEventHandlers(event_handlers_); - result->SetClusterName(cluster_name_); - return result; + std::shared_ptr newConn = NewConnection(); + newConn->SetEventHandlers(event_handlers_); + newConn->SetClusterName(cluster_name_); + newConn->SetAuthInfo(auth_info_); + + return newConn; } void RpcEngine::AsyncRpcCommsError(