1
1
#include < ydb-cpp-sdk/client/cms/cms.h>
2
2
3
+ #include < src/client/common_client/impl/client.h>
3
4
#include < src/api/grpc/ydb_cms_v1.grpc.pb.h>
4
5
#include < src/api/protos/ydb_cms.pb.h>
5
- #include < src/client/common_client/impl/client.h>
6
+
7
+ #define INCLUDE_YDB_INTERNAL_H
8
+ #include < src/client/impl/ydb_internal/make_request/make.h>
9
+ #undef INCLUDE_YDB_INTERNAL_H
6
10
7
11
namespace NYdb ::inline V3::NCms {
8
12
@@ -25,6 +29,82 @@ namespace {
25
29
return EState::StateUnspecified;
26
30
}
27
31
}
32
+
33
+ void SerializeToImpl (
34
+ const TResourcesKind& resourcesKind,
35
+ const TSchemaOperationQuotas& schemaQuotas,
36
+ const TDatabaseQuotas& dbQuotas,
37
+ const TScaleRecommenderPolicies& scaleRecommenderPolicies,
38
+ Ydb::Cms::CreateDatabaseRequest& out)
39
+ {
40
+ if (std::holds_alternative<NCms::TResources>(resourcesKind)) {
41
+ const auto & resources = std::get<NCms::TResources>(resourcesKind);
42
+ for (const auto & storageUnit : resources.StorageUnits ) {
43
+ auto * protoUnit = out.mutable_resources ()->add_storage_units ();
44
+ protoUnit->set_unit_kind (storageUnit.UnitKind );
45
+ protoUnit->set_count (storageUnit.Count );
46
+ }
47
+ for (const auto & computationalUnit : resources.ComputationalUnits ) {
48
+ auto * protoUnit = out.mutable_resources ()->add_computational_units ();
49
+ protoUnit->set_unit_kind (computationalUnit.UnitKind );
50
+ protoUnit->set_count (computationalUnit.Count );
51
+ protoUnit->set_availability_zone (computationalUnit.AvailabilityZone );
52
+ }
53
+ } else if (std::holds_alternative<NCms::TSharedResources>(resourcesKind)) {
54
+ const auto & resources = std::get<NCms::TSharedResources>(resourcesKind);
55
+ for (const auto & storageUnit : resources.StorageUnits ) {
56
+ auto * protoUnit = out.mutable_shared_resources ()->add_storage_units ();
57
+ protoUnit->set_unit_kind (storageUnit.UnitKind );
58
+ protoUnit->set_count (storageUnit.Count );
59
+ }
60
+ for (const auto & computationalUnit : resources.ComputationalUnits ) {
61
+ auto * protoUnit = out.mutable_shared_resources ()->add_computational_units ();
62
+ protoUnit->set_unit_kind (computationalUnit.UnitKind );
63
+ protoUnit->set_count (computationalUnit.Count );
64
+ protoUnit->set_availability_zone (computationalUnit.AvailabilityZone );
65
+ }
66
+ } else if (std::holds_alternative<NCms::TServerlessResources>(resourcesKind)) {
67
+ const auto & resources = std::get<NCms::TServerlessResources>(resourcesKind);
68
+ out.mutable_serverless_resources ()->set_shared_database_path (resources.SharedDatabasePath );
69
+ } else if (std::holds_alternative<std::monostate>(resourcesKind)) {
70
+ out.clear_resources_kind ();
71
+ }
72
+
73
+ for (const auto & quota : schemaQuotas.LeakyBucketQuotas ) {
74
+ auto protoQuota = out.mutable_schema_operation_quotas ()->add_leaky_bucket_quotas ();
75
+ protoQuota->set_bucket_seconds (quota.BucketSeconds );
76
+ protoQuota->set_bucket_size (quota.BucketSize );
77
+ }
78
+
79
+ out.mutable_database_quotas ()->set_data_size_hard_quota (dbQuotas.DataSizeHardQuota );
80
+ out.mutable_database_quotas ()->set_data_size_soft_quota (dbQuotas.DataSizeSoftQuota );
81
+ out.mutable_database_quotas ()->set_data_stream_shards_quota (dbQuotas.DataStreamShardsQuota );
82
+ out.mutable_database_quotas ()->set_data_stream_reserved_storage_quota (dbQuotas.DataStreamReservedStorageQuota );
83
+ out.mutable_database_quotas ()->set_ttl_min_run_internal_seconds (dbQuotas.TtlMinRunInternalSeconds );
84
+
85
+ for (const auto & quota : dbQuotas.StorageQuotas ) {
86
+ auto protoQuota = out.mutable_database_quotas ()->add_storage_quotas ();
87
+ protoQuota->set_unit_kind (quota.UnitKind );
88
+ protoQuota->set_data_size_hard_quota (quota.DataSizeHardQuota );
89
+ protoQuota->set_data_size_soft_quota (quota.DataSizeSoftQuota );
90
+ }
91
+
92
+ for (const auto & policy : scaleRecommenderPolicies.Policies ) {
93
+ auto * protoPolicy = out.mutable_scale_recommender_policies ()->add_policies ();
94
+ if (std::holds_alternative<NCms::TTargetTrackingPolicy>(policy.Policy )) {
95
+ const auto & targetTracking = std::get<NCms::TTargetTrackingPolicy>(policy.Policy );
96
+ auto * protoTargetTracking = protoPolicy->mutable_target_tracking_policy ();
97
+ if (std::holds_alternative<NCms::TTargetTrackingPolicy::TAverageCpuUtilizationPercent>(targetTracking.Target )) {
98
+ const auto & target = std::get<NCms::TTargetTrackingPolicy::TAverageCpuUtilizationPercent>(targetTracking.Target );
99
+ protoTargetTracking->set_average_cpu_utilization_percent (target);
100
+ } else if (std::holds_alternative<std::monostate>(targetTracking.Target )) {
101
+ protoTargetTracking->clear_target ();
102
+ }
103
+ } else if (std::holds_alternative<std::monostate>(policy.Policy )) {
104
+ protoPolicy->clear_policy ();
105
+ }
106
+ }
107
+ }
28
108
} // anonymous namespace
29
109
30
110
TListDatabasesResult::TListDatabasesResult (TStatus&& status, const Ydb::Cms::ListDatabasesResult& proto)
@@ -93,6 +173,7 @@ TTargetTrackingPolicy::TTargetTrackingPolicy(const Ydb::Cms::ScaleRecommenderPol
93
173
Target = proto.average_cpu_utilization_percent ();
94
174
break ;
95
175
case Ydb::Cms::ScaleRecommenderPolicies_ScaleRecommenderPolicy_TargetTrackingPolicy::TARGET_NOT_SET:
176
+ Target = std::monostate ();
96
177
break ;
97
178
}
98
179
}
@@ -104,6 +185,7 @@ TScaleRecommenderPolicy::TScaleRecommenderPolicy(const Ydb::Cms::ScaleRecommende
104
185
Policy = proto.target_tracking_policy ();
105
186
break ;
106
187
case Ydb::Cms::ScaleRecommenderPolicies_ScaleRecommenderPolicy::POLICY_NOT_SET:
188
+ Policy = std::monostate ();
107
189
break ;
108
190
}
109
191
}
@@ -134,6 +216,7 @@ TGetDatabaseStatusResult::TGetDatabaseStatusResult(TStatus&& status, const Ydb::
134
216
ResourcesKind_ = proto.serverless_resources ();
135
217
break ;
136
218
case Ydb::Cms::GetDatabaseStatusResult::RESOURCES_KIND_NOT_SET:
219
+ ResourcesKind_ = std::monostate ();
137
220
break ;
138
221
}
139
222
}
@@ -146,7 +229,7 @@ EState TGetDatabaseStatusResult::GetState() const {
146
229
return State_;
147
230
}
148
231
149
- const std::variant<TResources, TSharedResources, TServerlessResources> & TGetDatabaseStatusResult::GetResourcesKind () const {
232
+ const TResourcesKind & TGetDatabaseStatusResult::GetResourcesKind () const {
150
233
return ResourcesKind_;
151
234
}
152
235
@@ -176,67 +259,32 @@ const TScaleRecommenderPolicies& TGetDatabaseStatusResult::GetScaleRecommenderPo
176
259
177
260
void TGetDatabaseStatusResult::SerializeTo (Ydb::Cms::CreateDatabaseRequest& request) const {
178
261
request.set_path (Path_);
179
- if (std::holds_alternative<NCms::TResources>(ResourcesKind_)) {
180
- const auto & resources = std::get<NCms::TResources>(ResourcesKind_);
181
- for (const auto & storageUnit : resources.StorageUnits ) {
182
- auto * protoUnit = request.mutable_resources ()->add_storage_units ();
183
- protoUnit->set_unit_kind (storageUnit.UnitKind );
184
- protoUnit->set_count (storageUnit.Count );
185
- }
186
- for (const auto & computationalUnit : resources.ComputationalUnits ) {
187
- auto * protoUnit = request.mutable_resources ()->add_computational_units ();
188
- protoUnit->set_unit_kind (computationalUnit.UnitKind );
189
- protoUnit->set_count (computationalUnit.Count );
190
- protoUnit->set_availability_zone (computationalUnit.AvailabilityZone );
191
- }
192
- } else if (std::holds_alternative<NCms::TSharedResources>(ResourcesKind_)) {
193
- const auto & resources = std::get<NCms::TSharedResources>(ResourcesKind_);
194
- for (const auto & storageUnit : resources.StorageUnits ) {
195
- auto * protoUnit = request.mutable_shared_resources ()->add_storage_units ();
196
- protoUnit->set_unit_kind (storageUnit.UnitKind );
197
- protoUnit->set_count (storageUnit.Count );
198
- }
199
- for (const auto & computationalUnit : resources.ComputationalUnits ) {
200
- auto * protoUnit = request.mutable_shared_resources ()->add_computational_units ();
201
- protoUnit->set_unit_kind (computationalUnit.UnitKind );
202
- protoUnit->set_count (computationalUnit.Count );
203
- protoUnit->set_availability_zone (computationalUnit.AvailabilityZone );
204
- }
205
- } else if (std::holds_alternative<NCms::TServerlessResources>(ResourcesKind_)) {
206
- const auto & resources = std::get<NCms::TServerlessResources>(ResourcesKind_);
207
- request.mutable_serverless_resources ()->set_shared_database_path (resources.SharedDatabasePath );
208
- }
209
-
210
- for (const auto & quota : SchemaOperationQuotas_.LeakyBucketQuotas ) {
211
- auto protoQuota = request.mutable_schema_operation_quotas ()->add_leaky_bucket_quotas ();
212
- protoQuota->set_bucket_seconds (quota.BucketSeconds );
213
- protoQuota->set_bucket_size (quota.BucketSize );
214
- }
262
+ SerializeToImpl (ResourcesKind_, SchemaOperationQuotas_, DatabaseQuotas_, ScaleRecommenderPolicies_, request);
263
+ }
215
264
216
- request.mutable_database_quotas ()->set_data_size_hard_quota (DatabaseQuotas_.DataSizeHardQuota );
217
- request.mutable_database_quotas ()->set_data_size_soft_quota (DatabaseQuotas_.DataSizeSoftQuota );
218
- request.mutable_database_quotas ()->set_data_stream_shards_quota (DatabaseQuotas_.DataStreamShardsQuota );
219
- request.mutable_database_quotas ()->set_data_stream_reserved_storage_quota (DatabaseQuotas_.DataStreamReservedStorageQuota );
220
- request.mutable_database_quotas ()->set_ttl_min_run_internal_seconds (DatabaseQuotas_.TtlMinRunInternalSeconds );
221
-
222
- for (const auto & quota : DatabaseQuotas_.StorageQuotas ) {
223
- auto protoQuota = request.mutable_database_quotas ()->add_storage_quotas ();
224
- protoQuota->set_unit_kind (quota.UnitKind );
225
- protoQuota->set_data_size_hard_quota (quota.DataSizeHardQuota );
226
- protoQuota->set_data_size_soft_quota (quota.DataSizeSoftQuota );
227
- }
265
+ TCreateDatabaseSettings::TCreateDatabaseSettings (const Ydb::Cms::CreateDatabaseRequest& request)
266
+ : SchemaOperationQuotas_(request.schema_operation_quotas())
267
+ , DatabaseQuotas_(request.database_quotas())
268
+ , ScaleRecommenderPolicies_(request.scale_recommender_policies())
269
+ {
270
+ switch (request.resources_kind_case ()) {
271
+ case Ydb::Cms::CreateDatabaseRequest::kResources :
272
+ ResourcesKind_ = TResources (request.resources ());
273
+ break ;
274
+ case Ydb::Cms::CreateDatabaseRequest::kSharedResources :
275
+ ResourcesKind_ = TSharedResources (request.shared_resources ());
276
+ break ;
277
+ case Ydb::Cms::CreateDatabaseRequest::kServerlessResources :
278
+ ResourcesKind_ = request.serverless_resources ();
279
+ break ;
280
+ case Ydb::Cms::CreateDatabaseRequest::RESOURCES_KIND_NOT_SET:
281
+ ResourcesKind_ = std::monostate ();
282
+ break ;
283
+ }
284
+ }
228
285
229
- for (const auto & policy : ScaleRecommenderPolicies_.Policies ) {
230
- auto * protoPolicy = request.mutable_scale_recommender_policies ()->add_policies ();
231
- if (std::holds_alternative<NCms::TTargetTrackingPolicy>(policy.Policy )) {
232
- const auto & targetTracking = std::get<NCms::TTargetTrackingPolicy>(policy.Policy );
233
- auto * protoTargetTracking = protoPolicy->mutable_target_tracking_policy ();
234
- if (std::holds_alternative<NCms::TTargetTrackingPolicy::TAverageCpuUtilizationPercent>(targetTracking.Target )) {
235
- const auto & target = std::get<NCms::TTargetTrackingPolicy::TAverageCpuUtilizationPercent>(targetTracking.Target );
236
- protoTargetTracking->set_average_cpu_utilization_percent (target);
237
- }
238
- }
239
- }
286
+ void TCreateDatabaseSettings::SerializeTo (Ydb::Cms::CreateDatabaseRequest& request) const {
287
+ SerializeToImpl (ResourcesKind_, SchemaOperationQuotas_, DatabaseQuotas_, ScaleRecommenderPolicies_, request);
240
288
}
241
289
242
290
class TCmsClient ::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
@@ -246,7 +294,7 @@ class TCmsClient::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
246
294
{ }
247
295
248
296
TAsyncListDatabasesResult ListDatabases (const TListDatabasesSettings& settings) {
249
- Ydb::Cms::ListDatabasesRequest request ;
297
+ auto request = MakeOperationRequest< Ydb::Cms::ListDatabasesRequest>(settings) ;
250
298
251
299
auto promise = NThreading::NewPromise<TListDatabasesResult>();
252
300
@@ -272,7 +320,7 @@ class TCmsClient::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
272
320
}
273
321
274
322
TAsyncGetDatabaseStatusResult GetDatabaseStatus (const std::string& path, const TGetDatabaseStatusSettings& settings) {
275
- Ydb::Cms::GetDatabaseStatusRequest request ;
323
+ auto request = MakeOperationRequest< Ydb::Cms::GetDatabaseStatusRequest>(settings) ;
276
324
request.set_path (path);
277
325
278
326
auto promise = NThreading::NewPromise<TGetDatabaseStatusResult>();
@@ -297,6 +345,17 @@ class TCmsClient::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
297
345
298
346
return promise.GetFuture ();
299
347
}
348
+
349
+ TAsyncStatus CreateDatabase (const std::string& path, const TCreateDatabaseSettings& settings) {
350
+ auto request = MakeOperationRequest<Ydb::Cms::CreateDatabaseRequest>(settings);
351
+ request.set_path (path);
352
+ settings.SerializeTo (request);
353
+
354
+ return RunSimple<Ydb::Cms::V1::CmsService, Ydb::Cms::CreateDatabaseRequest, Ydb::Cms::CreateDatabaseResponse>(
355
+ std::move (request),
356
+ &Ydb::Cms::V1::CmsService::Stub::AsyncCreateDatabase,
357
+ TRpcRequestSettings::Make (settings));
358
+ }
300
359
};
301
360
302
361
TCmsClient::TCmsClient (const TDriver& driver, const TCommonClientSettings& settings)
@@ -314,4 +373,11 @@ TAsyncGetDatabaseStatusResult TCmsClient::GetDatabaseStatus(
314
373
return Impl_->GetDatabaseStatus (path, settings);
315
374
}
316
375
376
+ TAsyncStatus TCmsClient::CreateDatabase (
377
+ const std::string& path,
378
+ const TCreateDatabaseSettings& settings)
379
+ {
380
+ return Impl_->CreateDatabase (path, settings);
381
+ }
382
+
317
383
} // namespace NYdb::NCms
0 commit comments