diff options
author | Daniil Demin <deminds@ydb.tech> | 2025-02-10 16:37:53 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-10 13:37:53 +0000 |
commit | da88f78abba8a7461c8235bc473b072ff824bcab (patch) | |
tree | af1456e8649e19504f41fbbdfb5ae0050d3ad0ce | |
parent | fe80c39e692f59ae890e74972042b3317003b3d5 (diff) | |
download | ydb-da88f78abba8a7461c8235bc473b072ff824bcab.tar.gz |
rate limiter client refactoring: deduplicate structs representing HDRR settings (#14374)
-rw-r--r-- | ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h | 31 | ||||
-rw-r--r-- | ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp | 70 |
2 files changed, 63 insertions, 38 deletions
diff --git a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h index 5901c339909..836d4231545 100644 --- a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h +++ b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h @@ -3,6 +3,7 @@ #include <ydb-cpp-sdk/client/driver/driver.h> namespace Ydb::RateLimiter { +class CreateResourceRequest; class DescribeResourceResult; class HierarchicalDrrSettings; } // namespace Ydb::RateLimiter @@ -11,9 +12,14 @@ namespace NYdb::inline V3::NRateLimiter { // Settings for hierarchical deficit round robin (HDRR) algorithm. template <class TDerived> -struct THierarchicalDrrSettings : public TOperationRequestSettings<TDerived> { +struct THierarchicalDrrSettings { using TSelf = TDerived; + THierarchicalDrrSettings() = default; + THierarchicalDrrSettings(const Ydb::RateLimiter::HierarchicalDrrSettings&); + + void SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings&) const; + // Resource consumption speed limit. // Value is required for root resource. // Must be nonnegative. @@ -43,11 +49,19 @@ struct THierarchicalDrrSettings : public TOperationRequestSettings<TDerived> { }; // Settings for create resource request. -struct TCreateResourceSettings : public THierarchicalDrrSettings<TCreateResourceSettings> { +struct TCreateResourceSettings + : public TOperationRequestSettings<TCreateResourceSettings> + , public THierarchicalDrrSettings<TCreateResourceSettings> +{ + TCreateResourceSettings() = default; + TCreateResourceSettings(const Ydb::RateLimiter::CreateResourceRequest&); }; // Settings for alter resource request. -struct TAlterResourceSettings : public THierarchicalDrrSettings<TAlterResourceSettings> { +struct TAlterResourceSettings + : public TOperationRequestSettings<TAlterResourceSettings> + , public THierarchicalDrrSettings<TAlterResourceSettings> +{ }; // Settings for drop resource request. @@ -89,9 +103,10 @@ using TAsyncListResourcesResult = NThreading::TFuture<TListResourcesResult>; // Result for describe resource request. struct TDescribeResourceResult : public TStatus { - struct THierarchicalDrrProps { + // Note for YDB developers: THierarchicalDrrProps wrapper class exists for compatibility with older client code. + // Newer code should use the THierarchicalDrrSettings class directly. + struct THierarchicalDrrProps : public THierarchicalDrrSettings<THierarchicalDrrProps> { THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings&); - void SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings&) const; // Resource consumption speed limit. std::optional<double> GetMaxUnitsPerSecond() const { @@ -113,12 +128,6 @@ struct TDescribeResourceResult : public TStatus { std::optional<double> GetPrefetchWatermark() const { return PrefetchWatermark_; } - - private: - std::optional<double> MaxUnitsPerSecond_; - std::optional<double> MaxBurstSizeCoefficient_; - std::optional<double> PrefetchCoefficient_; - std::optional<double> PrefetchWatermark_; }; TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result); diff --git a/ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp b/ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp index ef1cd14e636..8571d454521 100644 --- a/ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp +++ b/ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp @@ -9,55 +9,71 @@ namespace NYdb::inline V3::NRateLimiter { -TListResourcesResult::TListResourcesResult(TStatus status, std::vector<std::string> paths) - : TStatus(std::move(status)) - , ResourcePaths_(std::move(paths)) -{ -} - -TDescribeResourceResult::TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result) - : TStatus(std::move(status)) - , ResourcePath_(result.resource().resource_path()) - , HierarchicalDrrProps_(result.resource().hierarchical_drr()) -{ -} - -TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings& settings) { - if (settings.max_units_per_second()) { - MaxUnitsPerSecond_ = settings.max_units_per_second(); +template <class TDerived> +THierarchicalDrrSettings<TDerived>::THierarchicalDrrSettings(const Ydb::RateLimiter::HierarchicalDrrSettings& proto) { + if (proto.max_units_per_second()) { + MaxUnitsPerSecond_ = proto.max_units_per_second(); } - if (settings.max_burst_size_coefficient()) { - MaxBurstSizeCoefficient_ = settings.max_burst_size_coefficient(); + if (proto.max_burst_size_coefficient()) { + MaxBurstSizeCoefficient_ = proto.max_burst_size_coefficient(); } - if (settings.prefetch_coefficient()) { - PrefetchCoefficient_ = settings.prefetch_coefficient(); + if (proto.prefetch_coefficient()) { + PrefetchCoefficient_ = proto.prefetch_coefficient(); } - if (settings.prefetch_watermark()) { - PrefetchWatermark_ = settings.prefetch_watermark(); + if (proto.prefetch_watermark()) { + PrefetchWatermark_ = proto.prefetch_watermark(); } } -void TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps::SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings& settings) const { +template <class TDerived> +void THierarchicalDrrSettings<TDerived>::SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings& proto) const { if (MaxUnitsPerSecond_) { - settings.set_max_units_per_second(*MaxUnitsPerSecond_); + proto.set_max_units_per_second(*MaxUnitsPerSecond_); } if (MaxBurstSizeCoefficient_) { - settings.set_max_burst_size_coefficient(*MaxBurstSizeCoefficient_); + proto.set_max_burst_size_coefficient(*MaxBurstSizeCoefficient_); } if (PrefetchCoefficient_) { - settings.set_prefetch_coefficient(*PrefetchCoefficient_); + proto.set_prefetch_coefficient(*PrefetchCoefficient_); } if (PrefetchWatermark_) { - settings.set_prefetch_watermark(*PrefetchWatermark_); + proto.set_prefetch_watermark(*PrefetchWatermark_); } } +template struct THierarchicalDrrSettings<TCreateResourceSettings>; +template struct THierarchicalDrrSettings<TAlterResourceSettings>; +template struct THierarchicalDrrSettings<TDescribeResourceResult::THierarchicalDrrProps>; + +TCreateResourceSettings::TCreateResourceSettings(const Ydb::RateLimiter::CreateResourceRequest& proto) + : THierarchicalDrrSettings(proto.resource().hierarchical_drr()) +{ +} + +TListResourcesResult::TListResourcesResult(TStatus status, std::vector<std::string> paths) + : TStatus(std::move(status)) + , ResourcePaths_(std::move(paths)) +{ +} + +TDescribeResourceResult::TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result) + : TStatus(std::move(status)) + , ResourcePath_(result.resource().resource_path()) + , HierarchicalDrrProps_(result.resource().hierarchical_drr()) +{ +} + +TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings& settings) + : THierarchicalDrrSettings<THierarchicalDrrProps>(settings) +{ +} + class TRateLimiterClient::TImpl : public TClientImplCommon<TRateLimiterClient::TImpl> { public: TImpl(std::shared_ptr<TGRpcConnectionsImpl> connections, const TCommonClientSettings& settings) |