aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Demin <deminds@ydb.tech>2025-02-10 16:37:53 +0300
committerGitHub <noreply@github.com>2025-02-10 13:37:53 +0000
commitda88f78abba8a7461c8235bc473b072ff824bcab (patch)
treeaf1456e8649e19504f41fbbdfb5ae0050d3ad0ce
parentfe80c39e692f59ae890e74972042b3317003b3d5 (diff)
downloadydb-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.h31
-rw-r--r--ydb/public/sdk/cpp/src/client/rate_limiter/rate_limiter.cpp70
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)