diff --git a/.mapping.json b/.mapping.json index 351fe5989c81..87d2cc74773b 100644 --- a/.mapping.json +++ b/.mapping.json @@ -2943,9 +2943,7 @@ "redis/include/userver/storages/redis/hedged_request.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/hedged_request.hpp", "redis/include/userver/storages/redis/impl/base.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/base.hpp", "redis/include/userver/storages/redis/impl/keyshard.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/keyshard.hpp", - "redis/include/userver/storages/redis/impl/request.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/request.hpp", "redis/include/userver/storages/redis/impl/secdist_redis.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/secdist_redis.hpp", - "redis/include/userver/storages/redis/impl/thread_pools.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/thread_pools.hpp", "redis/include/userver/storages/redis/impl/transaction_subrequest_data.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/impl/transaction_subrequest_data.hpp", "redis/include/userver/storages/redis/key_type.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/key_type.hpp", "redis/include/userver/storages/redis/parse_reply.hpp":"taxi/uservices/userver/redis/include/userver/storages/redis/parse_reply.hpp", @@ -2978,14 +2976,12 @@ "redis/src/storages/redis/client_redistest.hpp":"taxi/uservices/userver/redis/src/storages/redis/client_redistest.hpp", "redis/src/storages/redis/client_scan_redistest.cpp":"taxi/uservices/userver/redis/src/storages/redis/client_scan_redistest.cpp", "redis/src/storages/redis/command_control.cpp":"taxi/uservices/userver/redis/src/storages/redis/command_control.cpp", - "redis/src/storages/redis/command_options.cpp":"taxi/uservices/userver/redis/src/storages/redis/command_options.cpp", "redis/src/storages/redis/component.cpp":"taxi/uservices/userver/redis/src/storages/redis/component.cpp", "redis/src/storages/redis/dynamic_config.cpp":"taxi/uservices/userver/redis/src/storages/redis/dynamic_config.cpp", "redis/src/storages/redis/dynamic_config.hpp":"taxi/uservices/userver/redis/src/storages/redis/dynamic_config.hpp", "redis/src/storages/redis/exception.cpp":"taxi/uservices/userver/redis/src/storages/redis/exception.cpp", "redis/src/storages/redis/expire_reply.cpp":"taxi/uservices/userver/redis/src/storages/redis/expire_reply.cpp", "redis/src/storages/redis/hedged_request_redistest.cpp":"taxi/uservices/userver/redis/src/storages/redis/hedged_request_redistest.cpp", - "redis/src/storages/redis/impl/base.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/base.cpp", "redis/src/storages/redis/impl/cluster_sentinel_impl.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_sentinel_impl.cpp", "redis/src/storages/redis/impl/cluster_sentinel_impl.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_sentinel_impl.hpp", "redis/src/storages/redis/impl/cluster_shard.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_shard.cpp", @@ -2996,6 +2992,8 @@ "redis/src/storages/redis/impl/cluster_subscription_storage_test.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_subscription_storage_test.cpp", "redis/src/storages/redis/impl/cluster_topology.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_topology.cpp", "redis/src/storages/redis/impl/cluster_topology.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cluster_topology.hpp", + "redis/src/storages/redis/impl/cmd_args.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cmd_args.cpp", + "redis/src/storages/redis/impl/cmd_args.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/cmd_args.hpp", "redis/src/storages/redis/impl/command.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/command.cpp", "redis/src/storages/redis/impl/command.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/command.hpp", "redis/src/storages/redis/impl/command_control_impl.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/command_control_impl.cpp", @@ -3027,6 +3025,7 @@ "redis/src/storages/redis/impl/reply_status_strings.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/reply_status_strings.hpp", "redis/src/storages/redis/impl/reply_test.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/reply_test.cpp", "redis/src/storages/redis/impl/request.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/request.cpp", + "redis/src/storages/redis/impl/request.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/request.hpp", "redis/src/storages/redis/impl/sentinel.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/sentinel.cpp", "redis/src/storages/redis/impl/sentinel.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/sentinel.hpp", "redis/src/storages/redis/impl/sentinel_impl.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/sentinel_impl.cpp", @@ -3055,6 +3054,7 @@ "redis/src/storages/redis/impl/tcp_socket.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/tcp_socket.cpp", "redis/src/storages/redis/impl/tcp_socket.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/tcp_socket.hpp", "redis/src/storages/redis/impl/thread_pools.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/thread_pools.cpp", + "redis/src/storages/redis/impl/thread_pools.hpp":"taxi/uservices/userver/redis/src/storages/redis/impl/thread_pools.hpp", "redis/src/storages/redis/impl/transaction_subrequest_data.cpp":"taxi/uservices/userver/redis/src/storages/redis/impl/transaction_subrequest_data.cpp", "redis/src/storages/redis/key_type.cpp":"taxi/uservices/userver/redis/src/storages/redis/key_type.cpp", "redis/src/storages/redis/parse_reply.cpp":"taxi/uservices/userver/redis/src/storages/redis/parse_reply.cpp", diff --git a/redis/benchmark/redis_fixture.cpp b/redis/benchmark/redis_fixture.cpp index 8a77ae420c4a..61b82e1bee70 100644 --- a/redis/benchmark/redis_fixture.cpp +++ b/redis/benchmark/redis_fixture.cpp @@ -1,9 +1,9 @@ #include "redis_fixture.hpp" +#include #include #include #include -#include #include #include diff --git a/redis/include/userver/storages/redis/base.hpp b/redis/include/userver/storages/redis/base.hpp index 220b5e9e1a0e..effb5360dbea 100644 --- a/redis/include/userver/storages/redis/base.hpp +++ b/redis/include/userver/storages/redis/base.hpp @@ -50,67 +50,8 @@ struct Stat { double timeouts = 0.0; }; -class CmdArgs { // TODO: move to impl -public: - using CmdArgsArray = std::vector; - using CmdArgsChain = std::vector; - - CmdArgs() = default; - - template - CmdArgs(Args&&... _args) { - Then(std::forward(_args)...); - } - - CmdArgs(const CmdArgs& o) = delete; - CmdArgs(CmdArgs&& o) = default; - - CmdArgs& operator=(const CmdArgs& o) = delete; - CmdArgs& operator=(CmdArgs&& o) = default; - - template - CmdArgs& Then(Args&&... _args); - - CmdArgs Clone() const { - CmdArgs r; - r.args = args; - return r; - } - - CmdArgsChain args; -}; - -logging::LogHelper& operator<<(logging::LogHelper& os, const CmdArgs& v); - using ScanCursor = int64_t; -template -typename std::enable_if::value, void>::type -PutArg(CmdArgs::CmdArgsArray& args_, const Arg& arg) { - args_.emplace_back(std::to_string(arg)); -} - -void PutArg(CmdArgs::CmdArgsArray& args_, const char* arg); - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::string& arg); - -void PutArg(CmdArgs::CmdArgsArray& args_, std::string&& arg); - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector& arg); - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg); - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg); - -template -CmdArgs& CmdArgs::Then(Args&&... _args) { - args.emplace_back(); - auto& new_args = args.back(); - new_args.reserve(sizeof...(Args)); - (PutArg(new_args, std::forward(_args)), ...); - return *this; -} - struct CommandsBufferingSettings { bool buffering_enabled{false}; size_t commands_buffering_threshold{0}; diff --git a/redis/include/userver/storages/redis/command_options.hpp b/redis/include/userver/storages/redis/command_options.hpp index a061f0ceecc2..985c61ec7d8d 100644 --- a/redis/include/userver/storages/redis/command_options.hpp +++ b/redis/include/userver/storages/redis/command_options.hpp @@ -58,16 +58,21 @@ struct ZaddOptions { enum class ReturnValue { kAddedCount, kChangedCount }; ZaddOptions() = default; - ZaddOptions(Exist exist, ReturnValue return_value = ReturnValue::kAddedCount) + constexpr ZaddOptions(Exist exist, ReturnValue return_value = ReturnValue::kAddedCount) + : exist(exist), return_value(return_value) {} + constexpr ZaddOptions(ReturnValue return_value, Exist exist = Exist::kAddAlways) : exist(exist), return_value(return_value) {} - ZaddOptions(ReturnValue return_value, Exist exist = Exist::kAddAlways) : exist(exist), return_value(return_value) {} Exist exist = Exist::kAddAlways; ReturnValue return_value = ReturnValue::kAddedCount; }; -ZaddOptions operator|(ZaddOptions::Exist exist, ZaddOptions::ReturnValue return_value); -ZaddOptions operator|(ZaddOptions::ReturnValue return_value, ZaddOptions::Exist exist); +constexpr ZaddOptions operator|(ZaddOptions::Exist exist, ZaddOptions::ReturnValue return_value) { + return {exist, return_value}; +} +constexpr ZaddOptions operator|(ZaddOptions::ReturnValue return_value, ZaddOptions::Exist exist) { + return {exist, return_value}; +} class ScanOptionsBase { public: @@ -151,19 +156,6 @@ struct RangeScoreOptions { RangeOptions range_options; }; -void PutArg(CmdArgs::CmdArgsArray& args_, std::optional arg); -void PutArg(CmdArgs::CmdArgsArray& args_, std::optional arg); -void PutArg(CmdArgs::CmdArgsArray& args_, GeoaddArg arg); -void PutArg(CmdArgs::CmdArgsArray& args_, std::vector arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const GeoradiusOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const GeosearchOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const SetOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const ZaddOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const ScanOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const ScoreOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const RangeOptions& arg); -void PutArg(CmdArgs::CmdArgsArray& args_, const RangeScoreOptions& arg); - } // namespace storages::redis USERVER_NAMESPACE_END diff --git a/redis/include/userver/storages/redis/fwd.hpp b/redis/include/userver/storages/redis/fwd.hpp index 818c0e7b9085..63ffa2852deb 100644 --- a/redis/include/userver/storages/redis/fwd.hpp +++ b/redis/include/userver/storages/redis/fwd.hpp @@ -13,7 +13,7 @@ class ReplyData; struct CommandControl; -template +template class [[nodiscard]] Request; using ReplyPtr = std::shared_ptr; diff --git a/redis/include/userver/storages/redis/impl/base.hpp b/redis/include/userver/storages/redis/impl/base.hpp index 9f337b19e6e0..b910ac7eebbe 100644 --- a/redis/include/userver/storages/redis/impl/base.hpp +++ b/redis/include/userver/storages/redis/impl/base.hpp @@ -6,7 +6,6 @@ USERVER_NAMESPACE_BEGIN namespace redis { -using storages::redis::CmdArgs; // TODO: move to impl using storages::redis::CommandsBufferingSettings; using storages::redis::ConnectionInfo; using storages::redis::ConnectionSecurity; diff --git a/redis/include/userver/storages/redis/request.hpp b/redis/include/userver/storages/redis/request.hpp index f695cd60ec80..fbb794cf27d6 100644 --- a/redis/include/userver/storages/redis/request.hpp +++ b/redis/include/userver/storages/redis/request.hpp @@ -21,9 +21,10 @@ namespace storages::redis { template class RequestScanData; -template +template class [[nodiscard]] Request final { public: + using Result = ResultType; using Reply = ReplyType; explicit Request(std::unique_ptr>&& impl) : impl_(std::move(impl)) {} diff --git a/redis/src/storages/redis/client_impl.cpp b/redis/src/storages/redis/client_impl.cpp index 426aa2875743..3fa0e4313885 100644 --- a/redis/src/storages/redis/client_impl.cpp +++ b/redis/src/storages/redis/client_impl.cpp @@ -12,6 +12,7 @@ USERVER_NAMESPACE_BEGIN namespace storages::redis { +using impl::CmdArgs; using impl::CommandControlImpl; namespace { diff --git a/redis/src/storages/redis/client_impl.hpp b/redis/src/storages/redis/client_impl.hpp index e10c37388eeb..1c06a4bf9cb8 100644 --- a/redis/src/storages/redis/client_impl.hpp +++ b/redis/src/storages/redis/client_impl.hpp @@ -6,9 +6,9 @@ #include #include +#include #include #include -#include #include #include @@ -18,6 +18,7 @@ USERVER_NAMESPACE_BEGIN namespace storages::redis::impl { +class CmdArgs; class Sentinel; } // namespace storages::redis::impl @@ -431,7 +432,7 @@ class ClientImpl final : public Client, public std::enable_shared_from_this #include +#include #include #include #include #include #include -#include #include #include #include diff --git a/redis/src/storages/redis/impl/base.cpp b/redis/src/storages/redis/impl/base.cpp deleted file mode 100644 index 0f7870af83de..000000000000 --- a/redis/src/storages/redis/impl/base.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include - -#include - -#include -#include - -USERVER_NAMESPACE_BEGIN - -namespace storages::redis { - -void PutArg(CmdArgs::CmdArgsArray& args_, const char* arg) { args_.emplace_back(arg); } - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::string& arg) { args_.emplace_back(arg); } - -void PutArg(CmdArgs::CmdArgsArray& args_, std::string&& arg) { args_.emplace_back(std::move(arg)); } - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector& arg) { - for (const auto& str : arg) args_.emplace_back(str); -} - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg) { - for (const auto& pair : arg) { - args_.emplace_back(pair.first); - args_.emplace_back(pair.second); - } -} - -void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg) { - for (const auto& pair : arg) { - args_.emplace_back(std::to_string(pair.first)); - args_.emplace_back(pair.second); - } -} - -logging::LogHelper& operator<<(logging::LogHelper& os, const CmdArgs& v) { - constexpr std::size_t kArgSizeLimit = 1024; - - if (v.args.size() > 1) os << "["; - bool first = true; - for (const auto& arg_array : v.args) { - if (first) - first = false; - else - os << ", "; - - if (os.IsLimitReached()) { - os << "..."; - break; - } - - os << "\""; - bool first_arg = true; - for (const auto& arg : arg_array) { - if (first_arg) - first_arg = false; - else { - os << " "; - if (os.IsLimitReached()) { - os << "..."; - break; - } - } - - if (utils::text::IsUtf8(arg)) { - if (arg.size() <= kArgSizeLimit) { - os << arg; - } else { - std::string_view view{arg}; - view = view.substr(0, kArgSizeLimit); - utils::text::utf8::TrimViewTruncatedEnding(view); - os << view << "<...>"; - } - } else { - os << ""; - } - } - os << "\""; - } - if (v.args.size() > 1) os << "]"; - return os; -} - -} // namespace storages::redis - -USERVER_NAMESPACE_END diff --git a/redis/src/storages/redis/command_options.cpp b/redis/src/storages/redis/impl/cmd_args.cpp similarity index 64% rename from redis/src/storages/redis/command_options.cpp rename to redis/src/storages/redis/impl/cmd_args.cpp index b87df02948ff..085d5327bcbd 100644 --- a/redis/src/storages/redis/command_options.cpp +++ b/redis/src/storages/redis/impl/cmd_args.cpp @@ -1,8 +1,37 @@ -#include +#include + +#include + +#include +#include USERVER_NAMESPACE_BEGIN -namespace storages::redis { +namespace storages::redis::impl { + +void PutArg(CmdArgs::CmdArgsArray& args_, const char* arg) { args_.emplace_back(arg); } + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::string& arg) { args_.emplace_back(arg); } + +void PutArg(CmdArgs::CmdArgsArray& args_, std::string&& arg) { args_.emplace_back(std::move(arg)); } + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector& arg) { + for (const auto& str : arg) args_.emplace_back(str); +} + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg) { + for (const auto& pair : arg) { + args_.emplace_back(pair.first); + args_.emplace_back(pair.second); + } +} + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg) { + for (const auto& pair : arg) { + args_.emplace_back(std::to_string(pair.first)); + args_.emplace_back(pair.second); + } +} void PutArg(CmdArgs::CmdArgsArray& args_, std::optional arg) { if (arg) { @@ -18,10 +47,6 @@ void PutArg(CmdArgs::CmdArgsArray& args_, std::optional } } -ZaddOptions operator|(ZaddOptions::Exist exist, ZaddOptions::ReturnValue return_value) { return {exist, return_value}; } - -ZaddOptions operator|(ZaddOptions::ReturnValue return_value, ZaddOptions::Exist exist) { return {exist, return_value}; } - void PutArg(CmdArgs::CmdArgsArray& args_, GeoaddArg arg) { args_.emplace_back(std::to_string(arg.lon)); args_.emplace_back(std::to_string(arg.lat)); @@ -134,6 +159,54 @@ void PutArg(CmdArgs::CmdArgsArray& args_, const RangeScoreOptions& arg) { PutArg(args_, arg.range_options); } -} // namespace storages::redis +logging::LogHelper& operator<<(logging::LogHelper& os, const CmdArgs& v) { + constexpr std::size_t kArgSizeLimit = 1024; + + if (v.args.size() > 1) os << "["; + bool first = true; + for (const auto& arg_array : v.args) { + if (first) + first = false; + else + os << ", "; + + if (os.IsLimitReached()) { + os << "..."; + break; + } + + os << "\""; + bool first_arg = true; + for (const auto& arg : arg_array) { + if (first_arg) + first_arg = false; + else { + os << " "; + if (os.IsLimitReached()) { + os << "..."; + break; + } + } + + if (utils::text::IsUtf8(arg)) { + if (arg.size() <= kArgSizeLimit) { + os << arg; + } else { + std::string_view view{arg}; + view = view.substr(0, kArgSizeLimit); + utils::text::utf8::TrimViewTruncatedEnding(view); + os << view << "<...>"; + } + } else { + os << ""; + } + } + os << "\""; + } + if (v.args.size() > 1) os << "]"; + return os; +} + +} // namespace storages::redis::impl USERVER_NAMESPACE_END diff --git a/redis/src/storages/redis/impl/cmd_args.hpp b/redis/src/storages/redis/impl/cmd_args.hpp new file mode 100644 index 000000000000..31e22eb62843 --- /dev/null +++ b/redis/src/storages/redis/impl/cmd_args.hpp @@ -0,0 +1,90 @@ +#pragma once + +#include +#include +#include + +#include +#include + +#include + +USERVER_NAMESPACE_BEGIN + +namespace storages::redis::impl { + +class CmdArgs { +public: + using CmdArgsArray = std::vector; + using CmdArgsChain = std::vector; + + CmdArgs() = default; + + template + CmdArgs(Args&&... _args) { + Then(std::forward(_args)...); + } + + CmdArgs(const CmdArgs& o) = delete; + CmdArgs(CmdArgs&& o) = default; + + CmdArgs& operator=(const CmdArgs& o) = delete; + CmdArgs& operator=(CmdArgs&& o) = default; + + template + CmdArgs& Then(Args&&... _args); + + CmdArgs Clone() const { + CmdArgs r; + r.args = args; + return r; + } + + CmdArgsChain args; +}; + +void PutArg(CmdArgs::CmdArgsArray& args_, const char* arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::string& arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, std::string&& arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector& arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, const std::vector>& arg); + +void PutArg(CmdArgs::CmdArgsArray& args_, std::optional arg); +void PutArg(CmdArgs::CmdArgsArray& args_, std::optional arg); +void PutArg(CmdArgs::CmdArgsArray& args_, GeoaddArg arg); +void PutArg(CmdArgs::CmdArgsArray& args_, std::vector arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const GeoradiusOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const GeosearchOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const SetOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const ZaddOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const ScanOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const ScoreOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const RangeOptions& arg); +void PutArg(CmdArgs::CmdArgsArray& args_, const RangeScoreOptions& arg); + +logging::LogHelper& operator<<(logging::LogHelper& os, const CmdArgs& v); + +template +typename std::enable_if::value, void>::type +PutArg(CmdArgs::CmdArgsArray& args_, const Arg& arg) { + args_.emplace_back(std::to_string(arg)); +} + +template +CmdArgs& CmdArgs::Then(Args&&... _args) { + args.emplace_back(); + auto& new_args = args.back(); + new_args.reserve(sizeof...(Args)); + (storages::redis::impl::PutArg(new_args, std::forward(_args)), ...); + return *this; +} + +} // namespace storages::redis::impl + +USERVER_NAMESPACE_END diff --git a/redis/src/storages/redis/impl/command.hpp b/redis/src/storages/redis/impl/command.hpp index 4d562a99c05f..a21b0571a902 100644 --- a/redis/src/storages/redis/impl/command.hpp +++ b/redis/src/storages/redis/impl/command.hpp @@ -1,10 +1,10 @@ #pragma once #include - -#include #include +#include + USERVER_NAMESPACE_BEGIN namespace storages::redis::impl { diff --git a/redis/src/storages/redis/impl/redis.hpp b/redis/src/storages/redis/impl/redis.hpp index f1f7dfc99ce0..a03d77801999 100644 --- a/redis/src/storages/redis/impl/redis.hpp +++ b/redis/src/storages/redis/impl/redis.hpp @@ -9,9 +9,9 @@ #include #include +#include #include #include -#include #include #include "redis_creation_settings.hpp" diff --git a/redis/src/storages/redis/impl/request.cpp b/redis/src/storages/redis/impl/request.cpp index 165916589de9..308f0be12ae6 100644 --- a/redis/src/storages/redis/impl/request.cpp +++ b/redis/src/storages/redis/impl/request.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/redis/include/userver/storages/redis/impl/request.hpp b/redis/src/storages/redis/impl/request.hpp similarity index 98% rename from redis/include/userver/storages/redis/impl/request.hpp rename to redis/src/storages/redis/impl/request.hpp index 9aa713ed971e..3e48600acd3b 100644 --- a/redis/include/userver/storages/redis/impl/request.hpp +++ b/redis/src/storages/redis/impl/request.hpp @@ -16,6 +16,7 @@ class Span; namespace storages::redis::impl { +class CmdArgs; struct Command; using CommandPtr = std::shared_ptr; class Sentinel; diff --git a/redis/src/storages/redis/impl/sentinel.hpp b/redis/src/storages/redis/impl/sentinel.hpp index 03fe10829140..392851b231be 100644 --- a/redis/src/storages/redis/impl/sentinel.hpp +++ b/redis/src/storages/redis/impl/sentinel.hpp @@ -10,13 +10,13 @@ #include #include +#include +#include #include #include #include #include -#include #include -#include #include #include diff --git a/redis/src/storages/redis/impl/server_common_sentinel_test.hpp b/redis/src/storages/redis/impl/server_common_sentinel_test.hpp index 60601019771c..9fee74915022 100644 --- a/redis/src/storages/redis/impl/server_common_sentinel_test.hpp +++ b/redis/src/storages/redis/impl/server_common_sentinel_test.hpp @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include #include #include diff --git a/redis/src/storages/redis/impl/server_test.cpp b/redis/src/storages/redis/impl/server_test.cpp index 7192ee939293..3123a90bd635 100644 --- a/redis/src/storages/redis/impl/server_test.cpp +++ b/redis/src/storages/redis/impl/server_test.cpp @@ -2,9 +2,9 @@ #include +#include #include #include -#include #include #include diff --git a/redis/src/storages/redis/impl/thread_pools.cpp b/redis/src/storages/redis/impl/thread_pools.cpp index 01c69d2dbf57..63de96469bd3 100644 --- a/redis/src/storages/redis/impl/thread_pools.cpp +++ b/redis/src/storages/redis/impl/thread_pools.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/redis/include/userver/storages/redis/impl/thread_pools.hpp b/redis/src/storages/redis/impl/thread_pools.hpp similarity index 100% rename from redis/include/userver/storages/redis/impl/thread_pools.hpp rename to redis/src/storages/redis/impl/thread_pools.hpp diff --git a/redis/src/storages/redis/request_data_impl.cpp b/redis/src/storages/redis/request_data_impl.cpp index f20422722237..538c4d81fe82 100644 --- a/redis/src/storages/redis/request_data_impl.cpp +++ b/redis/src/storages/redis/request_data_impl.cpp @@ -4,9 +4,7 @@ USERVER_NAMESPACE_BEGIN -namespace storages::redis { - -namespace impl { +namespace storages::redis::impl { void Wait(impl::Request& request) { try { @@ -16,16 +14,6 @@ void Wait(impl::Request& request) { } } -} // namespace impl - -RequestDataImplBase::RequestDataImplBase(impl::Request&& request) : request_(std::move(request)) {} - -RequestDataImplBase::~RequestDataImplBase() = default; - -ReplyPtr RequestDataImplBase::GetReply() { return request_.Get(); } - -impl::Request& RequestDataImplBase::GetRequest() { return request_; } - -} // namespace storages::redis +} // namespace storages::redis::impl USERVER_NAMESPACE_END diff --git a/redis/src/storages/redis/request_data_impl.hpp b/redis/src/storages/redis/request_data_impl.hpp index 2e90c5c6fa63..d1375701c069 100644 --- a/redis/src/storages/redis/request_data_impl.hpp +++ b/redis/src/storages/redis/request_data_impl.hpp @@ -3,8 +3,8 @@ #include #include +#include #include -#include #include #include @@ -42,27 +42,12 @@ storages::redis::Request> MakeScanRequest( } // namespace impl -class RequestDataImplBase { -public: - RequestDataImplBase(impl::Request&& request); - - virtual ~RequestDataImplBase(); - -protected: - ReplyPtr GetReply(); - - impl::Request& GetRequest(); - -private: - impl::Request request_; -}; - template -class RequestDataImpl final : public RequestDataImplBase, public RequestDataBase { +class RequestDataImpl final : public RequestDataBase { public: - explicit RequestDataImpl(impl::Request&& request) : RequestDataImplBase(std::move(request)) {} + explicit RequestDataImpl(impl::Request&& request) : request_(std::move(request)) {} - void Wait() override { impl::Wait(GetRequest()); } + void Wait() override { impl::Wait(request_); } ReplyType Get(const std::string& request_description) override { auto reply = GetReply(); @@ -72,8 +57,13 @@ class RequestDataImpl final : public RequestDataImplBase, public RequestDataBase ReplyPtr GetRaw() override { return GetReply(); } engine::impl::ContextAccessor* TryGetContextAccessor() noexcept override { - return GetRequest().TryGetContextAccessor(); + return request_.TryGetContextAccessor(); } + +private: + ReplyPtr GetReply() { return request_.Get(); } + + impl::Request request_; }; template diff --git a/redis/src/storages/redis/request_exec_data_impl.cpp b/redis/src/storages/redis/request_exec_data_impl.cpp index 54ac8d662ec2..a75a9767d79e 100644 --- a/redis/src/storages/redis/request_exec_data_impl.cpp +++ b/redis/src/storages/redis/request_exec_data_impl.cpp @@ -8,9 +8,9 @@ RequestExecDataImpl::RequestExecDataImpl( impl::Request&& request, std::vector&& result_promises ) - : RequestDataImplBase(std::move(request)), result_promises_(std::move(result_promises)) {} + : request_(std::move(request)), result_promises_(std::move(result_promises)) {} -void RequestExecDataImpl::Wait() { impl::Wait(GetRequest()); } +void RequestExecDataImpl::Wait() { impl::Wait(request_); } void RequestExecDataImpl::Get(const std::string& request_description) { auto reply = GetReply(); diff --git a/redis/src/storages/redis/request_exec_data_impl.hpp b/redis/src/storages/redis/request_exec_data_impl.hpp index b7bd7a32742d..99599edee328 100644 --- a/redis/src/storages/redis/request_exec_data_impl.hpp +++ b/redis/src/storages/redis/request_exec_data_impl.hpp @@ -7,7 +7,7 @@ USERVER_NAMESPACE_BEGIN namespace storages::redis { -class RequestExecDataImpl final : public RequestDataImplBase, public RequestDataBase { +class RequestExecDataImpl final : public RequestDataBase { public: RequestExecDataImpl(impl::Request&& request, std::vector&& result_promises); @@ -23,6 +23,9 @@ class RequestExecDataImpl final : public RequestDataImplBase, public RequestData } private: + ReplyPtr GetReply() { return request_.Get(); } + + impl::Request request_; std::vector result_promises_; }; diff --git a/redis/src/storages/redis/request_impl.hpp b/redis/src/storages/redis/request_impl.hpp index 30d647b468fd..c9ad55f480b1 100644 --- a/redis/src/storages/redis/request_impl.hpp +++ b/redis/src/storages/redis/request_impl.hpp @@ -2,64 +2,39 @@ #include -#include +#include #include "request_data_impl.hpp" USERVER_NAMESPACE_BEGIN namespace storages::redis { -namespace impl { - -template -storages::redis::Request -CreateRequest(impl::Request&& request, storages::redis::Request* /* for ADL */) { - return storages::redis::Request( - std::make_unique>(std::move(request)) - ); -} - -template -storages::redis::Request CreateAggregateRequest( - std::vector&& requests, - storages::redis::Request* /* for ADL */ -) { - std::vector>> req_data; - req_data.reserve(requests.size()); - for (auto& request : requests) { - req_data.push_back(std::make_unique>(std::move(request))); - } - return storages::redis::Request( - std::make_unique>(std::move(req_data)) - ); -} - -template -storages::redis::Request -CreateDummyRequest(ReplyPtr&& reply, storages::redis::Request* /* for ADL */) { - return storages::redis::Request( - std::make_unique>(std::move(reply)) - ); -} - -} // namespace impl template Request CreateRequest(impl::Request&& request) { - Request* tmp = nullptr; - return impl::CreateRequest(std::move(request), tmp); + return Request( + std::make_unique>(std::move(request)) + ); } template Request CreateAggregateRequest(std::vector&& requests) { - Request* tmp = nullptr; - return impl::CreateAggregateRequest(std::move(requests), tmp); + using ThisRequestDataImpl = RequestDataImpl; + using ThisAggregateRequestDataImpl = AggregateRequestDataImpl; + + std::vector>> req_data; + req_data.reserve(requests.size()); + for (auto& request : requests) { + req_data.push_back(std::make_unique(std::move(request))); + } + return Request(std::make_unique(std::move(req_data))); } template Request CreateDummyRequest(ReplyPtr reply) { - Request* tmp = nullptr; - return impl::CreateDummyRequest(std::move(reply), tmp); + return Request( + std::make_unique>(std::move(reply)) + ); } } // namespace storages::redis diff --git a/redis/src/storages/redis/transaction_impl.hpp b/redis/src/storages/redis/transaction_impl.hpp index f415885a2606..0d1fbe040f4c 100644 --- a/redis/src/storages/redis/transaction_impl.hpp +++ b/redis/src/storages/redis/transaction_impl.hpp @@ -3,12 +3,13 @@ #include #include -#include - #include +#include #include #include +#include + #include "request_data_impl.hpp" USERVER_NAMESPACE_BEGIN @@ -327,7 +328,7 @@ class TransactionImpl final : public Transaction { std::optional shard_; bool master_{}; - CmdArgs cmd_args_; + impl::CmdArgs cmd_args_; std::vector result_promises_; }; diff --git a/redis/src/storages/redis/utest/impl/redis_connection_state.hpp b/redis/src/storages/redis/utest/impl/redis_connection_state.hpp index 813c8aa4c3ba..e546a8e45547 100644 --- a/redis/src/storages/redis/utest/impl/redis_connection_state.hpp +++ b/redis/src/storages/redis/utest/impl/redis_connection_state.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include diff --git a/redis/testing/include/userver/storages/redis/mock_request.hpp b/redis/testing/include/userver/storages/redis/mock_request.hpp index 993d59aacf39..20e991b30a51 100644 --- a/redis/testing/include/userver/storages/redis/mock_request.hpp +++ b/redis/testing/include/userver/storages/redis/mock_request.hpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -114,27 +113,6 @@ class MockRequestScanData : public RequestScanDataBase { std::deque data_; }; -template -storages::redis::Request -CreateMockRequest(Result&& result, storages::redis::Request* /* for ADL */) { - return storages::redis::Request( - std::make_unique>(std::forward(result)) - ); -} - -template -storages::redis::Request -CreateMockRequestVoid(storages::redis::Request* /* for ADL */) { - static_assert(std::is_same::value, "ReplyType must be void"); - return storages::redis::Request(std::make_unique>()); -} - -template -storages::redis::Request -CreateMockRequestTimeout(storages::redis::Request* /* for ADL */) { - return storages::redis::Request(std::make_unique>()); -} - template struct ReplyTypeHelper {}; @@ -143,30 +121,24 @@ struct ReplyTypeHelper> { using ExtractedReplyType = ReplyType; }; -template -using ExtractReplyType = typename ReplyTypeHelper::ExtractedReplyType; - } // namespace impl template -Request CreateMockRequest(impl::ExtractReplyType reply) { - Request* tmp = nullptr; - return impl::CreateMockRequest(std::move(reply), tmp); +Request CreateMockRequest(typename Request::Reply reply) { + return Request( + std::make_unique>(std::move(reply)) + ); } template Request CreateMockRequest() { - static_assert( - std::is_same, void>::value, "you must specify the reply for this request" - ); - Request* tmp = nullptr; - return impl::CreateMockRequestVoid(tmp); + static_assert(std::is_same_v, "you must specify the reply for this request"); + return Request(std::make_unique>()); } template Request CreateMockRequestTimeout() { - Request* tmp = nullptr; - return impl::CreateMockRequestTimeout(tmp); + return Request(std::make_unique>()); } template