Skip to content

Commit 2706831

Browse files
committed
Add cluster & database dump to YDB CLI (#14306)
1 parent 630decb commit 2706831

File tree

2 files changed

+80
-9
lines changed

2 files changed

+80
-9
lines changed

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

Lines changed: 8 additions & 5 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::Cms {
6+
class CreateDatabaseRequest;
67
class ListDatabasesResult;
78
class GetDatabaseStatusResult;
89

@@ -34,9 +35,7 @@ class TListDatabasesResult : public TStatus {
3435

3536
using TAsyncListDatabasesResult = NThreading::TFuture<TListDatabasesResult>;
3637

37-
struct TGetDatabaseStatusSettings : public TOperationRequestSettings<TGetDatabaseStatusSettings> {
38-
FLUENT_SETTING(std::string, Path);
39-
};
38+
struct TGetDatabaseStatusSettings : public TOperationRequestSettings<TGetDatabaseStatusSettings> {};
4039

4140
enum class EState {
4241
StateUnspecified = 0,
@@ -165,6 +164,9 @@ class TGetDatabaseStatusResult : public TStatus {
165164
const TDatabaseQuotas& GetDatabaseQuotas() const;
166165
const TScaleRecommenderPolicies& GetScaleRecommenderPolicies() const;
167166

167+
// Fills CreateDatabaseRequest proto from this database status
168+
void SerializeTo(Ydb::Cms::CreateDatabaseRequest& request) const;
169+
168170
private:
169171
std::string Path_;
170172
EState State_;
@@ -184,8 +186,9 @@ class TCmsClient {
184186
explicit TCmsClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());
185187

186188
TAsyncListDatabasesResult ListDatabases(const TListDatabasesSettings& settings = TListDatabasesSettings());
187-
TAsyncGetDatabaseStatusResult GetDatabaseStatus(const TGetDatabaseStatusSettings& settings = TGetDatabaseStatusSettings());
188-
189+
TAsyncGetDatabaseStatusResult GetDatabaseStatus(const std::string& path,
190+
const TGetDatabaseStatusSettings& settings = TGetDatabaseStatusSettings());
191+
189192
private:
190193
class TImpl;
191194
std::shared_ptr<TImpl> Impl_;

src/client/cms/cms.cpp

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,71 @@ const TScaleRecommenderPolicies& TGetDatabaseStatusResult::GetScaleRecommenderPo
174174
return ScaleRecommenderPolicies_;
175175
}
176176

177+
void TGetDatabaseStatusResult::SerializeTo(Ydb::Cms::CreateDatabaseRequest& request) const {
178+
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+
}
215+
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+
}
228+
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+
}
240+
}
241+
177242
class TCmsClient::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
178243
public:
179244
TImpl(std::shared_ptr<TGRpcConnectionsImpl>&& connections, const TCommonClientSettings& settings)
@@ -206,9 +271,9 @@ class TCmsClient::TImpl : public TClientImplCommon<TCmsClient::TImpl> {
206271
return promise.GetFuture();
207272
}
208273

209-
TAsyncGetDatabaseStatusResult GetDatabaseStatus(const TGetDatabaseStatusSettings& settings) {
274+
TAsyncGetDatabaseStatusResult GetDatabaseStatus(const std::string& path, const TGetDatabaseStatusSettings& settings) {
210275
Ydb::Cms::GetDatabaseStatusRequest request;
211-
request.set_path(settings.Path_);
276+
request.set_path(path);
212277

213278
auto promise = NThreading::NewPromise<TGetDatabaseStatusResult>();
214279

@@ -242,8 +307,11 @@ TAsyncListDatabasesResult TCmsClient::ListDatabases(const TListDatabasesSettings
242307
return Impl_->ListDatabases(settings);
243308
}
244309

245-
TAsyncGetDatabaseStatusResult TCmsClient::GetDatabaseStatus(const TGetDatabaseStatusSettings& settings) {
246-
return Impl_->GetDatabaseStatus(settings);
310+
TAsyncGetDatabaseStatusResult TCmsClient::GetDatabaseStatus(
311+
const std::string& path,
312+
const TGetDatabaseStatusSettings& settings)
313+
{
314+
return Impl_->GetDatabaseStatus(path, settings);
247315
}
248316

249317
} // namespace NYdb::NCms

0 commit comments

Comments
 (0)