@@ -101,13 +101,155 @@ namespace NYdb::NDataStreams::V1 {
101
101
TString ExplicitHashDecimal;
102
102
};
103
103
104
+ enum class EAutoPartitioningStrategy : ui32 {
105
+ Unspecified = 0 ,
106
+ Disabled = 1 ,
107
+ ScaleUp = 2 ,
108
+ ScaleUpAndDown = 3 ,
109
+ };
110
+
111
+ struct TCreateStreamSettings ;
112
+ struct TUpdateStreamSettings ;
113
+
114
+
115
+ template <typename TSettings>
116
+ struct TPartitioningSettingsBuilder ;
117
+ template <typename TSettings>
118
+ struct TAutoPartitioningSettingsBuilder ;
119
+
120
+ struct TAutoPartitioningSettings {
121
+ friend struct TAutoPartitioningSettingsBuilder <TCreateStreamSettings>;
122
+ friend struct TAutoPartitioningSettingsBuilder <TUpdateStreamSettings>;
123
+ public:
124
+ TAutoPartitioningSettings ()
125
+ : Strategy_(EAutoPartitioningStrategy::Disabled)
126
+ , StabilizationWindow_(TDuration::Seconds(0 ))
127
+ , DownUtilizationPercent_(0 )
128
+ , UpUtilizationPercent_(0 ) {
129
+ }
130
+ TAutoPartitioningSettings (const Ydb::DataStreams::V1::AutoPartitioningSettings& settings);
131
+ TAutoPartitioningSettings (EAutoPartitioningStrategy strategy, TDuration stabilizationWindow, ui64 downUtilizationPercent, ui64 upUtilizationPercent)
132
+ : Strategy_(strategy)
133
+ , StabilizationWindow_(stabilizationWindow)
134
+ , DownUtilizationPercent_(downUtilizationPercent)
135
+ , UpUtilizationPercent_(upUtilizationPercent) {}
136
+
137
+ EAutoPartitioningStrategy GetStrategy () const { return Strategy_; };
138
+ TDuration GetStabilizationWindow () const { return StabilizationWindow_; };
139
+ ui32 GetDownUtilizationPercent () const { return DownUtilizationPercent_; };
140
+ ui32 GetUpUtilizationPercent () const { return UpUtilizationPercent_; };
141
+ private:
142
+ EAutoPartitioningStrategy Strategy_;
143
+ TDuration StabilizationWindow_;
144
+ ui32 DownUtilizationPercent_;
145
+ ui32 UpUtilizationPercent_;
146
+ };
147
+
148
+
149
+ class TPartitioningSettings {
150
+ using TSelf = TPartitioningSettings;
151
+ friend struct TPartitioningSettingsBuilder <TCreateStreamSettings>;
152
+ friend struct TPartitioningSettingsBuilder <TUpdateStreamSettings>;
153
+ public:
154
+ TPartitioningSettings () : MinActivePartitions_(0 ), MaxActivePartitions_(0 ), AutoPartitioningSettings_(){}
155
+ TPartitioningSettings (const Ydb::DataStreams::V1::PartitioningSettings& settings);
156
+ TPartitioningSettings (ui64 minActivePartitions, ui64 maxActivePartitions, TAutoPartitioningSettings autoscalingSettings = {})
157
+ : MinActivePartitions_(minActivePartitions)
158
+ , MaxActivePartitions_(maxActivePartitions)
159
+ , AutoPartitioningSettings_(autoscalingSettings) {
160
+ }
161
+
162
+ ui64 GetMinActivePartitions () const { return MinActivePartitions_; };
163
+ ui64 GetMaxActivePartitions () const { return MaxActivePartitions_; };
164
+ TAutoPartitioningSettings GetAutoPartitioningSettings () const { return AutoPartitioningSettings_; };
165
+ private:
166
+ ui64 MinActivePartitions_;
167
+ ui64 MaxActivePartitions_;
168
+ TAutoPartitioningSettings AutoPartitioningSettings_;
169
+ };
170
+
104
171
struct TCreateStreamSettings : public NYdb ::TOperationRequestSettings<TCreateStreamSettings> {
105
172
FLUENT_SETTING (ui32, ShardCount);
106
173
FLUENT_SETTING_OPTIONAL (ui32, RetentionPeriodHours);
107
174
FLUENT_SETTING_OPTIONAL (ui32, RetentionStorageMegabytes);
108
175
FLUENT_SETTING (ui64, WriteQuotaKbPerSec);
109
176
FLUENT_SETTING_OPTIONAL (EStreamMode, StreamMode);
177
+
178
+ FLUENT_SETTING_OPTIONAL (TPartitioningSettings, PartitioningSettings);
179
+ TPartitioningSettingsBuilder<TCreateStreamSettings> BeginConfigurePartitioningSettings ();
110
180
};
181
+ template <typename TSettings>
182
+ struct TAutoPartitioningSettingsBuilder {
183
+ using TSelf = TAutoPartitioningSettingsBuilder<TSettings>;
184
+ public:
185
+ TAutoPartitioningSettingsBuilder (TPartitioningSettingsBuilder<TSettings>& parent, TAutoPartitioningSettings& settings): Parent_(parent), Settings_(settings) {}
186
+
187
+ TSelf Strategy (EAutoPartitioningStrategy value) {
188
+ Settings_.Strategy_ = value;
189
+ return *this ;
190
+ }
191
+
192
+ TSelf StabilizationWindow (TDuration value) {
193
+ Settings_.StabilizationWindow_ = value;
194
+ return *this ;
195
+ }
196
+
197
+ TSelf DownUtilizationPercent (ui32 value) {
198
+ Settings_.DownUtilizationPercent_ = value;
199
+ return *this ;
200
+ }
201
+
202
+ TSelf UpUtilizationPercent (ui32 value) {
203
+ Settings_.UpUtilizationPercent_ = value;
204
+ return *this ;
205
+ }
206
+
207
+ TPartitioningSettingsBuilder<TSettings>& EndConfigureAutoPartitioningSettings () {
208
+ return Parent_;
209
+ }
210
+
211
+ private:
212
+ TPartitioningSettingsBuilder<TSettings>& Parent_;
213
+ TAutoPartitioningSettings& Settings_;
214
+ };
215
+
216
+ template <typename TSettings>
217
+ struct TPartitioningSettingsBuilder {
218
+ using TSelf = TPartitioningSettingsBuilder;
219
+ public:
220
+ TPartitioningSettingsBuilder (TSettings& parent): Parent_(parent) {}
221
+
222
+ TSelf MinActivePartitions (ui64 value) {
223
+ if (!Parent_.PartitioningSettings_ .Defined ()) {
224
+ Parent_.PartitioningSettings_ .ConstructInPlace ();
225
+ }
226
+ (*Parent_.PartitioningSettings_ ).MinActivePartitions_ = value;
227
+ return *this ;
228
+ }
229
+
230
+ TSelf MaxActivePartitions (ui64 value) {
231
+ if (!Parent_.PartitioningSettings_ .Defined ()) {
232
+ Parent_.PartitioningSettings_ .ConstructInPlace ();
233
+ }
234
+ (*Parent_.PartitioningSettings_ ).MaxActivePartitions_ = value;
235
+ return *this ;
236
+ }
237
+
238
+ TAutoPartitioningSettingsBuilder<TSettings> BeginConfigureAutoPartitioningSettings () {
239
+ if (!Parent_.PartitioningSettings_ .Defined ()) {
240
+ Parent_.PartitioningSettings_ .ConstructInPlace ();
241
+ }
242
+ return {*this , (*Parent_.PartitioningSettings_ ).AutoPartitioningSettings_ };
243
+ }
244
+
245
+ TSettings& EndConfigurePartitioningSettings () {
246
+ return Parent_;
247
+ }
248
+
249
+ private:
250
+ TSettings& Parent_;
251
+ };
252
+
111
253
struct TListStreamsSettings : public NYdb ::TOperationRequestSettings<TListStreamsSettings> {
112
254
FLUENT_SETTING (ui32, Limit);
113
255
FLUENT_SETTING (TString, ExclusiveStartStreamName);
@@ -155,6 +297,8 @@ namespace NYdb::NDataStreams::V1 {
155
297
FLUENT_SETTING (ui64, WriteQuotaKbPerSec);
156
298
FLUENT_SETTING_OPTIONAL (EStreamMode, StreamMode);
157
299
300
+ FLUENT_SETTING_OPTIONAL (TPartitioningSettings, PartitioningSettings);
301
+ TPartitioningSettingsBuilder<TUpdateStreamSettings> BeginConfigurePartitioningSettings ();
158
302
};
159
303
struct TPutRecordSettings : public NYdb ::TOperationRequestSettings<TPutRecordSettings> {};
160
304
struct TPutRecordsSettings : public NYdb ::TOperationRequestSettings<TPutRecordsSettings> {};
0 commit comments