Skip to content

Commit cbc851e

Browse files
jepett0Gazizonoki
authored andcommitted
rate limiter client refactoring: deduplicate structs representing HDRR settings (#14374)
1 parent 7f71ba8 commit cbc851e

File tree

2 files changed

+63
-38
lines changed

2 files changed

+63
-38
lines changed

include/ydb-cpp-sdk/client/rate_limiter/rate_limiter.h

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <ydb-cpp-sdk/client/driver/driver.h>
44

55
namespace Ydb::RateLimiter {
6+
class CreateResourceRequest;
67
class DescribeResourceResult;
78
class HierarchicalDrrSettings;
89
} // namespace Ydb::RateLimiter
@@ -11,9 +12,14 @@ namespace NYdb::inline V3::NRateLimiter {
1112

1213
// Settings for hierarchical deficit round robin (HDRR) algorithm.
1314
template <class TDerived>
14-
struct THierarchicalDrrSettings : public TOperationRequestSettings<TDerived> {
15+
struct THierarchicalDrrSettings {
1516
using TSelf = TDerived;
1617

18+
THierarchicalDrrSettings() = default;
19+
THierarchicalDrrSettings(const Ydb::RateLimiter::HierarchicalDrrSettings&);
20+
21+
void SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings&) const;
22+
1723
// Resource consumption speed limit.
1824
// Value is required for root resource.
1925
// Must be nonnegative.
@@ -43,11 +49,19 @@ struct THierarchicalDrrSettings : public TOperationRequestSettings<TDerived> {
4349
};
4450

4551
// Settings for create resource request.
46-
struct TCreateResourceSettings : public THierarchicalDrrSettings<TCreateResourceSettings> {
52+
struct TCreateResourceSettings
53+
: public TOperationRequestSettings<TCreateResourceSettings>
54+
, public THierarchicalDrrSettings<TCreateResourceSettings>
55+
{
56+
TCreateResourceSettings() = default;
57+
TCreateResourceSettings(const Ydb::RateLimiter::CreateResourceRequest&);
4758
};
4859

4960
// Settings for alter resource request.
50-
struct TAlterResourceSettings : public THierarchicalDrrSettings<TAlterResourceSettings> {
61+
struct TAlterResourceSettings
62+
: public TOperationRequestSettings<TAlterResourceSettings>
63+
, public THierarchicalDrrSettings<TAlterResourceSettings>
64+
{
5165
};
5266

5367
// Settings for drop resource request.
@@ -89,9 +103,10 @@ using TAsyncListResourcesResult = NThreading::TFuture<TListResourcesResult>;
89103

90104
// Result for describe resource request.
91105
struct TDescribeResourceResult : public TStatus {
92-
struct THierarchicalDrrProps {
106+
// Note for YDB developers: THierarchicalDrrProps wrapper class exists for compatibility with older client code.
107+
// Newer code should use the THierarchicalDrrSettings class directly.
108+
struct THierarchicalDrrProps : public THierarchicalDrrSettings<THierarchicalDrrProps> {
93109
THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings&);
94-
void SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings&) const;
95110

96111
// Resource consumption speed limit.
97112
std::optional<double> GetMaxUnitsPerSecond() const {
@@ -113,12 +128,6 @@ struct TDescribeResourceResult : public TStatus {
113128
std::optional<double> GetPrefetchWatermark() const {
114129
return PrefetchWatermark_;
115130
}
116-
117-
private:
118-
std::optional<double> MaxUnitsPerSecond_;
119-
std::optional<double> MaxBurstSizeCoefficient_;
120-
std::optional<double> PrefetchCoefficient_;
121-
std::optional<double> PrefetchWatermark_;
122131
};
123132

124133
TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result);

src/client/rate_limiter/rate_limiter.cpp

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,55 +9,71 @@
99

1010
namespace NYdb::inline V3::NRateLimiter {
1111

12-
TListResourcesResult::TListResourcesResult(TStatus status, std::vector<std::string> paths)
13-
: TStatus(std::move(status))
14-
, ResourcePaths_(std::move(paths))
15-
{
16-
}
17-
18-
TDescribeResourceResult::TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result)
19-
: TStatus(std::move(status))
20-
, ResourcePath_(result.resource().resource_path())
21-
, HierarchicalDrrProps_(result.resource().hierarchical_drr())
22-
{
23-
}
24-
25-
TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings& settings) {
26-
if (settings.max_units_per_second()) {
27-
MaxUnitsPerSecond_ = settings.max_units_per_second();
12+
template <class TDerived>
13+
THierarchicalDrrSettings<TDerived>::THierarchicalDrrSettings(const Ydb::RateLimiter::HierarchicalDrrSettings& proto) {
14+
if (proto.max_units_per_second()) {
15+
MaxUnitsPerSecond_ = proto.max_units_per_second();
2816
}
2917

30-
if (settings.max_burst_size_coefficient()) {
31-
MaxBurstSizeCoefficient_ = settings.max_burst_size_coefficient();
18+
if (proto.max_burst_size_coefficient()) {
19+
MaxBurstSizeCoefficient_ = proto.max_burst_size_coefficient();
3220
}
3321

34-
if (settings.prefetch_coefficient()) {
35-
PrefetchCoefficient_ = settings.prefetch_coefficient();
22+
if (proto.prefetch_coefficient()) {
23+
PrefetchCoefficient_ = proto.prefetch_coefficient();
3624
}
3725

38-
if (settings.prefetch_watermark()) {
39-
PrefetchWatermark_ = settings.prefetch_watermark();
26+
if (proto.prefetch_watermark()) {
27+
PrefetchWatermark_ = proto.prefetch_watermark();
4028
}
4129
}
4230

43-
void TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps::SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings& settings) const {
31+
template <class TDerived>
32+
void THierarchicalDrrSettings<TDerived>::SerializeTo(Ydb::RateLimiter::HierarchicalDrrSettings& proto) const {
4433
if (MaxUnitsPerSecond_) {
45-
settings.set_max_units_per_second(*MaxUnitsPerSecond_);
34+
proto.set_max_units_per_second(*MaxUnitsPerSecond_);
4635
}
4736

4837
if (MaxBurstSizeCoefficient_) {
49-
settings.set_max_burst_size_coefficient(*MaxBurstSizeCoefficient_);
38+
proto.set_max_burst_size_coefficient(*MaxBurstSizeCoefficient_);
5039
}
5140

5241
if (PrefetchCoefficient_) {
53-
settings.set_prefetch_coefficient(*PrefetchCoefficient_);
42+
proto.set_prefetch_coefficient(*PrefetchCoefficient_);
5443
}
5544

5645
if (PrefetchWatermark_) {
57-
settings.set_prefetch_watermark(*PrefetchWatermark_);
46+
proto.set_prefetch_watermark(*PrefetchWatermark_);
5847
}
5948
}
6049

50+
template struct THierarchicalDrrSettings<TCreateResourceSettings>;
51+
template struct THierarchicalDrrSettings<TAlterResourceSettings>;
52+
template struct THierarchicalDrrSettings<TDescribeResourceResult::THierarchicalDrrProps>;
53+
54+
TCreateResourceSettings::TCreateResourceSettings(const Ydb::RateLimiter::CreateResourceRequest& proto)
55+
: THierarchicalDrrSettings(proto.resource().hierarchical_drr())
56+
{
57+
}
58+
59+
TListResourcesResult::TListResourcesResult(TStatus status, std::vector<std::string> paths)
60+
: TStatus(std::move(status))
61+
, ResourcePaths_(std::move(paths))
62+
{
63+
}
64+
65+
TDescribeResourceResult::TDescribeResourceResult(TStatus status, const Ydb::RateLimiter::DescribeResourceResult& result)
66+
: TStatus(std::move(status))
67+
, ResourcePath_(result.resource().resource_path())
68+
, HierarchicalDrrProps_(result.resource().hierarchical_drr())
69+
{
70+
}
71+
72+
TDescribeResourceResult::THierarchicalDrrProps::THierarchicalDrrProps(const Ydb::RateLimiter::HierarchicalDrrSettings& settings)
73+
: THierarchicalDrrSettings<THierarchicalDrrProps>(settings)
74+
{
75+
}
76+
6177
class TRateLimiterClient::TImpl : public TClientImplCommon<TRateLimiterClient::TImpl> {
6278
public:
6379
TImpl(std::shared_ptr<TGRpcConnectionsImpl> connections, const TCommonClientSettings& settings)

0 commit comments

Comments
 (0)