From b654ef984bc59c5bafb43de4d9b1273f69fd9406 Mon Sep 17 00:00:00 2001 From: liucc1997 <1192520566@qq.com> Date: Thu, 3 Aug 2023 03:12:17 +0000 Subject: [PATCH] liboblog support rpc authentication --- .../oblib/src/rpc/obrpc/ob_poc_rpc_server.cpp | 21 +++++++++++++++++++ deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.h | 1 + src/logservice/libobcdc/src/ob_log_rpc.cpp | 2 ++ src/share/config/ob_server_config.cpp | 6 +++--- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.cpp b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.cpp index fe6cfa052..b3e7d9b57 100644 --- a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.cpp +++ b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.cpp @@ -246,6 +246,27 @@ int ObPocRpcServer::start(int port, int net_thread_count, frame::ObReqDeliver* d return ret; } +int ObPocRpcServer::start_net_client(int net_thread_count) +{ + int ret = OB_SUCCESS; + if (OB_UNLIKELY(has_start_)) { + RPC_LOG(WARN, "client has already started!"); + } else { + int count = 0; + const int listen_none = -1; + if ((count = pn_provision(listen_none, DEFAULT_PNIO_GROUP, net_thread_count)) != net_thread_count) { + ret = OB_ERR_SYS; + RPC_LOG(WARN, "pn_provision error", K(count), K(net_thread_count)); + } else if((count = pn_provision(listen_none, RATELIMIT_PNIO_GROUP, net_thread_count)) != net_thread_count) { + ret = OB_ERR_SYS; + RPC_LOG(WARN, "pn_provision for RATELIMIT_PNIO_GROUP error", K(count), K(net_thread_count)); + } else { + has_start_ = true; + } + } + return ret; +} + void ObPocRpcServer::stop() { for (uint64_t gid = 1; gid < END_GROUP; gid++) { diff --git a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.h b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.h index 6a99981a2..37b315850 100644 --- a/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.h +++ b/deps/oblib/src/rpc/obrpc/ob_poc_rpc_server.h @@ -63,6 +63,7 @@ public: ObPocRpcServer() : has_start_(false){} ~ObPocRpcServer() {} int start(int port, int net_thread_count, rpc::frame::ObReqDeliver* deliver); + int start_net_client(int net_thread_count); void stop(); void wait(); bool has_start() {return has_start_;} diff --git a/src/logservice/libobcdc/src/ob_log_rpc.cpp b/src/logservice/libobcdc/src/ob_log_rpc.cpp index 836272995..77769d6c9 100644 --- a/src/logservice/libobcdc/src/ob_log_rpc.cpp +++ b/src/logservice/libobcdc/src/ob_log_rpc.cpp @@ -176,6 +176,8 @@ int ObLogRpc::init(const int64_t io_thread_num) LOG_ERROR("invalid argument", KR(ret), K(io_thread_num)); } else if (OB_FAIL(init_client_id_())) { LOG_ERROR("init client identity failed", KR(ret)); + } else if (OB_FAIL(global_poc_server.start_net_client(opt.rpc_io_cnt_))) { + LOG_ERROR("start net client failed", KR(ret), K(io_thread_num)); } else if (OB_FAIL(net_client_.init(opt))) { LOG_ERROR("init net client fail", KR(ret), K(io_thread_num)); } else if (OB_FAIL(reload_rpc_client_auth_method())) { diff --git a/src/share/config/ob_server_config.cpp b/src/share/config/ob_server_config.cpp index 33b94c90a..06c867f05 100644 --- a/src/share/config/ob_server_config.cpp +++ b/src/share/config/ob_server_config.cpp @@ -420,9 +420,9 @@ OB_DEF_SERIALIZE_SIZE(ObServerConfig) namespace obrpc { bool enable_pkt_nio() { bool bool_ret = false; - if (OB_UNLIKELY(OBSERVER.is_arbitration_mode())) { - bool enable_clent_auth = (get_client_auth_methods() != USSL_AUTH_NONE); - bool_ret = GCONF._enable_pkt_nio && enable_clent_auth; + if (OB_UNLIKELY(OBSERVER.is_stopped() || OBSERVER.is_arbitration_mode())) { + bool enable_client_auth = (get_client_auth_methods() != USSL_AUTH_NONE); + bool_ret = GCONF._enable_pkt_nio && enable_client_auth; } else { bool_ret = GCONF._enable_pkt_nio && GET_MIN_CLUSTER_VERSION() >= CLUSTER_VERSION_4_2_0_0; }