[ https://issues.apache.org/jira/browse/HBASE-18535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xiaobing Zhou updated HBASE-18535: ---------------------------------- Description: This is a follow up work of HBASE-18338. In RpcPipelineFactory::newPipeline, the HBASE_CLIENT_RPC_TEST_MODE is used to exclude SaslHandler which otherwise will cause RpcTestServer not receiving any requests. {code} + if (!conf_->GetBool( + Configuration::HBASE_CLIENT_RPC_TEST_MODE, + Configuration::DEFAULT_HBASE_CLIENT_RPC_TEST_MODE)) { + secure = security::User::IsSecurityEnabled(*conf_); + pipeline->addBack(SaslHandler{user_util_.user_name(secure), conf_}); + } {code} This is not clean. Handlers should be added to pipeline regardless of test or not, instead, every handler can choose to discriminate test or not. Taking ClientHandler as an example: {code} folly::Future<folly::Unit> ClientHandler::write(Context *ctx, std::unique_ptr<Request> r) { /* for RPC test, there's no need to send connection header */ if (!conf_->GetBool(RpcSerde::HBASE_CLIENT_RPC_TEST_MODE, RpcSerde::DEFAULT_HBASE_CLIENT_RPC_TEST_MODE)) { // We need to send the header once. // So use call_once to make sure that only one thread wins this. std::call_once((*once_flag_), [ctx, this]() { VLOG(3) << "Writing RPC Header to server: " << server_; auto header = serde_.Header(user_name_); ctx->fireWrite(std::move(header)); }); } {code} > [C++] make RPC test mode transparent to initialization of RpcPipeline > --------------------------------------------------------------------- > > Key: HBASE-18535 > URL: https://issues.apache.org/jira/browse/HBASE-18535 > Project: HBase > Issue Type: Sub-task > Reporter: Xiaobing Zhou > > This is a follow up work of HBASE-18338. > In RpcPipelineFactory::newPipeline, the HBASE_CLIENT_RPC_TEST_MODE is used to > exclude SaslHandler which otherwise will cause RpcTestServer not receiving > any requests. > {code} > + if (!conf_->GetBool( > + Configuration::HBASE_CLIENT_RPC_TEST_MODE, > + Configuration::DEFAULT_HBASE_CLIENT_RPC_TEST_MODE)) { > + secure = security::User::IsSecurityEnabled(*conf_); > + pipeline->addBack(SaslHandler{user_util_.user_name(secure), conf_}); > + } > {code} > This is not clean. Handlers should be added to pipeline regardless of test or > not, instead, every handler can choose to discriminate test or not. Taking > ClientHandler as an example: > {code} > folly::Future<folly::Unit> ClientHandler::write(Context *ctx, > std::unique_ptr<Request> r) { > /* for RPC test, there's no need to send connection header */ > if (!conf_->GetBool(RpcSerde::HBASE_CLIENT_RPC_TEST_MODE, > RpcSerde::DEFAULT_HBASE_CLIENT_RPC_TEST_MODE)) { > // We need to send the header once. > // So use call_once to make sure that only one thread wins this. > std::call_once((*once_flag_), [ctx, this]() { > VLOG(3) << "Writing RPC Header to server: " << server_; > auto header = serde_.Header(user_name_); > ctx->fireWrite(std::move(header)); > }); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)