10
10
11
11
#include < limits>
12
12
13
-
14
13
namespace NYdb {
15
14
class TProtoAccessor ;
16
15
@@ -29,6 +28,12 @@ enum class EMeteringMode : ui32 {
29
28
Unknown = std::numeric_limits<int >::max(),
30
29
};
31
30
31
+ enum class EAutoscalingStrategy : ui32 {
32
+ Unspecified = 0 ,
33
+ Disabled = 1 ,
34
+ ScaleUp = 2 ,
35
+ ScaleUpAndDown = 3 ,
36
+ };
32
37
33
38
class TConsumer {
34
39
public:
@@ -93,7 +98,6 @@ class TPartitionStats {
93
98
ui64 BytesWrittenPerMinute_;
94
99
ui64 BytesWrittenPerHour_;
95
100
ui64 BytesWrittenPerDay_;
96
-
97
101
};
98
102
99
103
class TPartitionConsumerStats {
@@ -150,20 +154,98 @@ class TPartitionInfo {
150
154
std::optional<TPartitionLocation> PartitionLocation_;
151
155
};
152
156
157
+ struct TAlterPartitioningSettings ;
158
+ struct TAlterTopicSettings ;
159
+
160
+ struct TAutoscalingSettings {
161
+ friend struct TAutoscalingSettingsBuilder ;
162
+ public:
163
+ TAutoscalingSettings ()
164
+ : Strategy_(EAutoscalingStrategy::Disabled)
165
+ , ThresholdTime_(TDuration::Seconds(0 ))
166
+ , ScaleDownThresholdPercent_(0 )
167
+ , ScaleUpThresholdPercent_(0 ) {
168
+ }
169
+ TAutoscalingSettings (const Ydb::Topic::AutoscalingSettings& settings);
170
+ TAutoscalingSettings (EAutoscalingStrategy strategy, TDuration thresholdTime, ui64 scaleUpThresholdPercent, ui64 scaleDownThresholdPercent)
171
+ : Strategy_(strategy)
172
+ , ThresholdTime_(thresholdTime)
173
+ , ScaleDownThresholdPercent_(scaleDownThresholdPercent)
174
+ , ScaleUpThresholdPercent_(scaleUpThresholdPercent) {}
175
+
176
+ EAutoscalingStrategy GetStrategy () const ;
177
+ TDuration GetThresholdTime () const ;
178
+ ui32 GetScaleDownThresholdPercent () const ;
179
+ ui32 GetScaleUpThresholdPercent () const ;
180
+ private:
181
+ EAutoscalingStrategy Strategy_;
182
+ TDuration ThresholdTime_;
183
+ ui32 ScaleDownThresholdPercent_;
184
+ ui32 ScaleUpThresholdPercent_;
185
+ };
186
+
187
+ struct TAlterAutoscalingSettings {
188
+ using TSelf = TAlterAutoscalingSettings;
189
+ public:
190
+ TAlterAutoscalingSettings (TAlterPartitioningSettings& parent): Parent_(parent) {}
191
+
192
+ FLUENT_SETTING_OPTIONAL (EAutoscalingStrategy, Strategy);
193
+ FLUENT_SETTING_OPTIONAL (TDuration, ThresholdTime);
194
+ FLUENT_SETTING_OPTIONAL (ui64, ScaleUpThresholdPercent);
195
+ FLUENT_SETTING_OPTIONAL (ui64, ScaleDownThresholdPercent);
196
+
197
+ TAlterPartitioningSettings& EndAlterAutoscalingSettings () { return Parent_; };
198
+
199
+ private:
200
+ TAlterPartitioningSettings& Parent_;
201
+ };
202
+
153
203
class TPartitioningSettings {
204
+ using TSelf = TPartitioningSettings;
205
+ friend struct TPartitioningSettingsBuilder ;
154
206
public:
155
- TPartitioningSettings () : MinActivePartitions_(0 ), PartitionCountLimit_(0 ){}
207
+ TPartitioningSettings () : MinActivePartitions_(0 ), MaxActivePartitions_( 0 ), PartitionCountLimit_(0 ), AutoscalingSettings_( ){}
156
208
TPartitioningSettings (const Ydb::Topic::PartitioningSettings& settings);
157
- TPartitioningSettings (ui64 minActivePartitions, ui64 partitionCountLimit )
209
+ TPartitioningSettings (ui64 minActivePartitions, ui64 maxActivePartitions, TAutoscalingSettings autoscalingSettings = {} )
158
210
: MinActivePartitions_(minActivePartitions)
159
- , PartitionCountLimit_(partitionCountLimit) {
211
+ , MaxActivePartitions_(maxActivePartitions)
212
+ , PartitionCountLimit_(0 )
213
+ , AutoscalingSettings_(autoscalingSettings)
214
+ {
160
215
}
161
216
162
217
ui64 GetMinActivePartitions () const ;
218
+ ui64 GetMaxActivePartitions () const ;
163
219
ui64 GetPartitionCountLimit () const ;
220
+ TAutoscalingSettings GetAutoscalingSettings () const ;
164
221
private:
165
222
ui64 MinActivePartitions_;
223
+ ui64 MaxActivePartitions_;
166
224
ui64 PartitionCountLimit_;
225
+ TAutoscalingSettings AutoscalingSettings_;
226
+ };
227
+
228
+ struct TAlterTopicSettings ;
229
+
230
+ struct TAlterPartitioningSettings {
231
+ using TSelf = TAlterPartitioningSettings;
232
+ public:
233
+ TAlterPartitioningSettings (TAlterTopicSettings& parent): Parent_(parent) {}
234
+
235
+ FLUENT_SETTING_OPTIONAL (ui64, MinActivePartitions);
236
+ FLUENT_SETTING_OPTIONAL (ui64, MaxActivePartitions);
237
+
238
+ TAlterTopicSettings& EndAlterTopicPartitioningSettings () { return Parent_; };
239
+
240
+ TAlterAutoscalingSettings& BeginAlterAutoscalingSettings () {
241
+ AutoscalingSettings_.emplace (*this );
242
+ return *AutoscalingSettings_;
243
+ }
244
+
245
+ std::optional<TAlterAutoscalingSettings> AutoscalingSettings_;
246
+
247
+ private:
248
+ TAlterTopicSettings& Parent_;
167
249
};
168
250
169
251
class TTopicDescription {
@@ -267,7 +349,6 @@ class TPartitionDescription {
267
349
struct TDescribeTopicResult : public TStatus {
268
350
friend class NYdb ::TProtoAccessor;
269
351
270
-
271
352
TDescribeTopicResult (TStatus&& status, Ydb::Topic::DescribeTopicResult&& result);
272
353
273
354
const TTopicDescription& GetTopicDescription () const ;
@@ -280,7 +361,6 @@ struct TDescribeTopicResult : public TStatus {
280
361
struct TDescribeConsumerResult : public TStatus {
281
362
friend class NYdb ::TProtoAccessor;
282
363
283
-
284
364
TDescribeConsumerResult (TStatus&& status, Ydb::Topic::DescribeConsumerResult&& result);
285
365
286
366
const TConsumerDescription& GetConsumerDescription () const ;
@@ -331,7 +411,6 @@ class TAlterAttributesBuilderImpl {
331
411
TSettings& Parent_;
332
412
};
333
413
334
-
335
414
struct TAlterConsumerSettings ;
336
415
struct TAlterTopicSettings ;
337
416
@@ -386,7 +465,6 @@ struct TConsumerSettings {
386
465
TSettings& Parent_;
387
466
};
388
467
389
-
390
468
struct TAlterConsumerSettings {
391
469
using TSelf = TAlterConsumerSettings;
392
470
@@ -423,7 +501,7 @@ struct TAlterConsumerSettings {
423
501
TAlterTopicSettings& Parent_;
424
502
};
425
503
426
-
504
+ struct TPartitioningSettingsBuilder ;
427
505
struct TCreateTopicSettings : public TOperationRequestSettings <TCreateTopicSettings> {
428
506
429
507
using TSelf = TCreateTopicSettings;
@@ -445,7 +523,6 @@ struct TCreateTopicSettings : public TOperationRequestSettings<TCreateTopicSetti
445
523
446
524
FLUENT_SETTING (TAttributes, Attributes);
447
525
448
-
449
526
TCreateTopicSettings& SetSupportedCodecs (std::vector<ECodec>&& codecs) {
450
527
SupportedCodecs_ = std::move (codecs);
451
528
return *this ;
@@ -481,20 +558,80 @@ struct TCreateTopicSettings : public TOperationRequestSettings<TCreateTopicSetti
481
558
return *this ;
482
559
}
483
560
484
- TCreateTopicSettings& PartitioningSettings (ui64 minActivePartitions, ui64 partitionCountLimit) {
485
- PartitioningSettings_ = TPartitioningSettings (minActivePartitions, partitionCountLimit);
561
+ TCreateTopicSettings& PartitioningSettings (ui64 minActivePartitions, ui64 maxActivePartitions, TAutoscalingSettings autoscalingSettings = {}) {
562
+ PartitioningSettings_ = TPartitioningSettings (minActivePartitions, maxActivePartitions, autoscalingSettings);
563
+ return *this ;
564
+ }
565
+
566
+ TPartitioningSettingsBuilder BeginConfigurePartitioningSettings ();
567
+ };
568
+
569
+ struct TAutoscalingSettingsBuilder {
570
+ using TSelf = TAutoscalingSettingsBuilder;
571
+ public:
572
+ TAutoscalingSettingsBuilder (TPartitioningSettingsBuilder& parent, TAutoscalingSettings& settings): Parent_(parent), Settings_(settings) {}
573
+
574
+ TSelf Strategy (EAutoscalingStrategy value) {
575
+ Settings_.Strategy_ = value;
576
+ return *this ;
577
+ }
578
+
579
+ TSelf ThresholdTime (TDuration value) {
580
+ Settings_.ThresholdTime_ = value;
581
+ return *this ;
582
+ }
583
+
584
+ TSelf ScaleDownThresholdPercent (ui32 value) {
585
+ Settings_.ScaleDownThresholdPercent_ = value;
486
586
return *this ;
487
587
}
588
+
589
+ TSelf ScaleUpThresholdPercent (ui32 value) {
590
+ Settings_.ScaleUpThresholdPercent_ = value;
591
+ return *this ;
592
+ }
593
+
594
+ TPartitioningSettingsBuilder& EndConfigureAutoscalingSettings () {
595
+ return Parent_;
596
+ }
597
+
598
+ private:
599
+ TPartitioningSettingsBuilder& Parent_;
600
+ TAutoscalingSettings& Settings_;
488
601
};
489
602
603
+ struct TPartitioningSettingsBuilder {
604
+ using TSelf = TPartitioningSettingsBuilder;
605
+ public:
606
+ TPartitioningSettingsBuilder (TCreateTopicSettings& parent): Parent_(parent) {}
607
+
608
+ TSelf MinActivePartitions (ui64 value) {
609
+ Parent_.PartitioningSettings_ .MinActivePartitions_ = value;
610
+ return *this ;
611
+ }
612
+
613
+ TSelf MaxActivePartitions (ui64 value) {
614
+ Parent_.PartitioningSettings_ .MaxActivePartitions_ = value;
615
+ return *this ;
616
+ }
617
+
618
+ TAutoscalingSettingsBuilder BeginConfigureAutoscalingSettings () {
619
+ return {*this , Parent_.PartitioningSettings_ .AutoscalingSettings_ };
620
+ }
621
+
622
+ TCreateTopicSettings& EndConfigurePartitioningSettings () {
623
+ return Parent_;
624
+ }
625
+
626
+ private:
627
+ TCreateTopicSettings& Parent_;
628
+ };
490
629
491
630
struct TAlterTopicSettings : public TOperationRequestSettings <TAlterTopicSettings> {
492
631
493
632
using TSelf = TAlterTopicSettings;
494
633
using TAlterAttributes = std::map<std::string, std::string>;
495
634
496
- FLUENT_SETTING_OPTIONAL (TPartitioningSettings, AlterPartitioningSettings);
497
-
498
635
FLUENT_SETTING_OPTIONAL (TDuration, SetRetentionPeriod);
499
636
500
637
FLUENT_SETTING_OPTIONAL_VECTOR (ECodec, SetSupportedCodecs);
@@ -546,12 +683,25 @@ struct TAlterTopicSettings : public TOperationRequestSettings<TAlterTopicSetting
546
683
return AlterConsumers_.back ();
547
684
}
548
685
549
- TAlterTopicSettings& AlterPartitioningSettings (ui64 minActivePartitions, ui64 partitionCountLimit) {
550
- AlterPartitioningSettings_ = TPartitioningSettings (minActivePartitions, partitionCountLimit);
686
+ TAlterPartitioningSettings& BeginAlterPartitioningSettings () {
687
+ AlterPartitioningSettings_.emplace (*this );
688
+ return *AlterPartitioningSettings_;
689
+ }
690
+
691
+ TAlterTopicSettings& AlterPartitioningSettings (ui64 minActivePartitions, ui64 maxActivePartitions) {
692
+ AlterPartitioningSettings_.emplace (*this );
693
+ AlterPartitioningSettings_->MinActivePartitions (minActivePartitions);
694
+ AlterPartitioningSettings_->MaxActivePartitions (maxActivePartitions);
551
695
return *this ;
552
696
}
697
+
698
+ std::optional<TAlterPartitioningSettings> AlterPartitioningSettings_;
553
699
};
554
700
701
+ inline TPartitioningSettingsBuilder TCreateTopicSettings::BeginConfigurePartitioningSettings () {
702
+ return {*this };
703
+ }
704
+
555
705
// Settings for drop resource request.
556
706
struct TDropTopicSettings : public TOperationRequestSettings <TDropTopicSettings> {
557
707
using TOperationRequestSettings<TDropTopicSettings>::TOperationRequestSettings;
@@ -587,4 +737,4 @@ struct TDescribePartitionSettings: public TOperationRequestSettings<TDescribePar
587
737
// Settings for commit offset request.
588
738
struct TCommitOffsetSettings : public TOperationRequestSettings <TCommitOffsetSettings> {};
589
739
590
- }
740
+ } // namespace NYdb::NTopic
0 commit comments