You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by dm...@apache.org on 2022/06/16 09:50:45 UTC
[trafficserver] branch 10-Dev updated: JSONRPC: Use string_view in the RPC manager class to avoid possible extra heap allocation when registring a new endpoint. (#8916)
This is an automated email from the ASF dual-hosted git repository.
dmeden pushed a commit to branch 10-Dev
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/10-Dev by this push:
new a82875cce JSONRPC: Use string_view in the RPC manager class to avoid possible extra heap allocation when registring a new endpoint. (#8916)
a82875cce is described below
commit a82875cce668927c43edd5d85f51e59dc6e1d5f7
Author: Damian Meden <da...@gmail.com>
AuthorDate: Thu Jun 16 10:50:38 2022 +0100
JSONRPC: Use string_view in the RPC manager class to avoid possible extra heap allocation when registring a new endpoint. (#8916)
---
mgmt2/rpc/jsonrpc/JsonRPC.h | 4 ++--
mgmt2/rpc/jsonrpc/JsonRPCManager.cc | 10 +++++-----
mgmt2/rpc/jsonrpc/JsonRPCManager.h | 18 +++++++++---------
mgmt2/rpc/server/unit_tests/test_rpcserver.cc | 2 +-
4 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/mgmt2/rpc/jsonrpc/JsonRPC.h b/mgmt2/rpc/jsonrpc/JsonRPC.h
index c885bc40d..8af97399e 100644
--- a/mgmt2/rpc/jsonrpc/JsonRPC.h
+++ b/mgmt2/rpc/jsonrpc/JsonRPC.h
@@ -33,7 +33,7 @@ extern RPCRegistryInfo core_ats_rpc_service_provider_handle;
/// @see JsonRPCManager::add_method_handler for details
template <typename Func>
inline bool
-add_method_handler(const std::string &name, Func &&call, const RPCRegistryInfo *info = nullptr)
+add_method_handler(std::string_view name, Func &&call, const RPCRegistryInfo *info = nullptr)
{
return JsonRPCManager::instance().add_method_handler(name, std::forward<Func>(call), info);
}
@@ -41,7 +41,7 @@ add_method_handler(const std::string &name, Func &&call, const RPCRegistryInfo *
/// @see JsonRPCManager::add_notification_handler for details
template <typename Func>
inline bool
-add_notification_handler(const std::string &name, Func &&call, const RPCRegistryInfo *info = nullptr)
+add_notification_handler(std::string_view name, Func &&call, const RPCRegistryInfo *info = nullptr)
{
return JsonRPCManager::instance().add_notification_handler(name, std::forward<Func>(call), info);
}
diff --git a/mgmt2/rpc/jsonrpc/JsonRPCManager.cc b/mgmt2/rpc/jsonrpc/JsonRPCManager.cc
index a85745728..f84c7fc98 100644
--- a/mgmt2/rpc/jsonrpc/JsonRPCManager.cc
+++ b/mgmt2/rpc/jsonrpc/JsonRPCManager.cc
@@ -52,7 +52,7 @@ RPCRegistryInfo core_ats_rpc_service_provider_handle = {
std::mutex g_rpcHandlingMutex;
std::condition_variable g_rpcHandlingCompletion;
ts::Rv<YAML::Node> g_rpcHandlerResponseData;
-bool g_rpcHandlerProccessingCompleted{false};
+bool g_rpcHandlerProcessingCompleted{false};
// jsonrpc log tag.
static constexpr auto logTag = "rpc";
@@ -164,7 +164,7 @@ JsonRPCManager::Dispatcher::invoke_notification_handler(JsonRPCManager::Dispatch
}
bool
-JsonRPCManager::Dispatcher::remove_handler(std::string const &name)
+JsonRPCManager::Dispatcher::remove_handler(std::string_view name)
{
std::lock_guard<std::mutex> lock(_mutex);
auto foundIt = std::find_if(std::begin(_handlers), std::end(_handlers), [&](auto const &p) { return p.first == name; });
@@ -177,7 +177,7 @@ JsonRPCManager::Dispatcher::remove_handler(std::string const &name)
}
// --- JsonRPCManager
bool
-JsonRPCManager::remove_handler(std::string const &name)
+JsonRPCManager::remove_handler(std::string_view name)
{
return _dispatcher.remove_handler(name);
}
@@ -289,8 +289,8 @@ JsonRPCManager::Dispatcher::InternalHandler::invoke(specs::RPCRequestInfo const
// cond var will give us green to proceed.
handler.cb(*request.id, request.params);
std::unique_lock<std::mutex> lock(g_rpcHandlingMutex);
- g_rpcHandlingCompletion.wait(lock, []() { return g_rpcHandlerProccessingCompleted; });
- g_rpcHandlerProccessingCompleted = false;
+ g_rpcHandlingCompletion.wait(lock, []() { return g_rpcHandlerProcessingCompleted; });
+ g_rpcHandlerProcessingCompleted = false;
// seems to be done, set the response. As the response data is a ts::Rv this will handle both,
// error and non error cases.
ret = g_rpcHandlerResponseData;
diff --git a/mgmt2/rpc/jsonrpc/JsonRPCManager.h b/mgmt2/rpc/jsonrpc/JsonRPCManager.h
index f2a100e91..e00b57f5b 100644
--- a/mgmt2/rpc/jsonrpc/JsonRPCManager.h
+++ b/mgmt2/rpc/jsonrpc/JsonRPCManager.h
@@ -76,7 +76,7 @@ public:
/// @param info RPCRegistryInfo pointer.
/// @return bool Boolean flag. true if the callback was successfully added, false otherwise
///
- template <typename Func> bool add_method_handler(const std::string &name, Func &&call, const RPCRegistryInfo *info);
+ template <typename Func> bool add_method_handler(std::string_view name, Func &&call, const RPCRegistryInfo *info);
///
/// @brief Add new registered notification handler to the JSON RPC engine.
@@ -87,7 +87,7 @@ public:
/// @param info RPCRegistryInfo pointer.
/// @return bool Boolean flag. true if the callback was successfully added, false otherwise
///
- template <typename Func> bool add_notification_handler(const std::string &name, Func &&call, const RPCRegistryInfo *info);
+ template <typename Func> bool add_notification_handler(std::string_view name, Func &&call, const RPCRegistryInfo *info);
///
/// @brief This function handles the incoming jsonrpc request and dispatch the associated registered handler.
@@ -124,8 +124,8 @@ protected: // For unit test.
/// @return true If all is good.
/// @return false If we could not remove it.
///
- bool remove_handler(std::string const &name);
- friend bool test_remove_handler(std::string const &name);
+ bool remove_handler(std::string_view name);
+ friend bool test_remove_handler(std::string_view name);
private:
///
@@ -166,7 +166,7 @@ private:
/// Add a method handler to the internal container
/// @return True if was successfully added, False otherwise.
template <typename FunctionWrapperType, typename Handler>
- bool add_handler(std::string const &name, Handler &&handler, const RPCRegistryInfo *info);
+ bool add_handler(std::string_view name, Handler &&handler, const RPCRegistryInfo *info);
/// Find and call the request's callback. If any error occurs, the return type will have the specific error.
/// For notifications the @c RPCResponseInfo will not be set as part of the response. @c response_type
@@ -177,7 +177,7 @@ private:
/// be false and the handler null.
InternalHandler const &find_handler(specs::RPCRequestInfo const &request, std::error_code &ec) const;
/// Removes a method handler. Unit test mainly.
- bool remove_handler(std::string const &name);
+ bool remove_handler(std::string_view name);
// JSONRPC API - here for now.
ts::Rv<YAML::Node> show_registered_handlers(std::string_view const &, const YAML::Node &);
@@ -244,14 +244,14 @@ private:
// ------------------------------ JsonRPCManager -------------------------------
template <typename Handler>
bool
-JsonRPCManager::add_method_handler(const std::string &name, Handler &&call, const RPCRegistryInfo *info)
+JsonRPCManager::add_method_handler(std::string_view name, Handler &&call, const RPCRegistryInfo *info)
{
return _dispatcher.add_handler<Dispatcher::Method, Handler>(name, std::forward<Handler>(call), info);
}
template <typename Handler>
bool
-JsonRPCManager::add_notification_handler(const std::string &name, Handler &&call, const RPCRegistryInfo *info)
+JsonRPCManager::add_notification_handler(std::string_view name, Handler &&call, const RPCRegistryInfo *info)
{
return _dispatcher.add_handler<Dispatcher::Notification, Handler>(name, std::forward<Handler>(call), info);
}
@@ -276,7 +276,7 @@ bool inline JsonRPCManager::Dispatcher::InternalHandler::operator!() const
// ----------------------------- Dispatcher ------------------------------------
template <typename FunctionWrapperType, typename Handler>
bool
-JsonRPCManager::Dispatcher::add_handler(std::string const &name, Handler &&handler, const RPCRegistryInfo *info)
+JsonRPCManager::Dispatcher::add_handler(std::string_view name, Handler &&handler, const RPCRegistryInfo *info)
{
std::lock_guard<std::mutex> lock(_mutex);
InternalHandler call{info};
diff --git a/mgmt2/rpc/server/unit_tests/test_rpcserver.cc b/mgmt2/rpc/server/unit_tests/test_rpcserver.cc
index 381970bce..ee00df856 100644
--- a/mgmt2/rpc/server/unit_tests/test_rpcserver.cc
+++ b/mgmt2/rpc/server/unit_tests/test_rpcserver.cc
@@ -51,7 +51,7 @@ namespace fs = ts::file;
namespace rpc
{
bool
-test_remove_handler(std::string const &name)
+test_remove_handler(std::string_view name)
{
return rpc::JsonRPCManager::instance().remove_handler(name);
}