Skip to content

Commit ff877e9

Browse files
committed
Add CMS client to CPP SDK (#14189)
1 parent c1dd8b1 commit ff877e9

File tree

2 files changed

+443
-0
lines changed

2 files changed

+443
-0
lines changed

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

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
#pragma once
2+
3+
#include <ydb-cpp-sdk/client/driver/driver.h>
4+
5+
namespace Ydb::Cms {
6+
class ListDatabasesResult;
7+
class GetDatabaseStatusResult;
8+
9+
class StorageUnits;
10+
class ComputationalUnits;
11+
class AllocatedComputationalUnit;
12+
class ServerlessResources;
13+
class Resources;
14+
class SchemaOperationQuotas;
15+
class SchemaOperationQuotas_LeakyBucket;
16+
class DatabaseQuotas;
17+
class DatabaseQuotas_StorageQuotas;
18+
class ScaleRecommenderPolicies;
19+
class ScaleRecommenderPolicies_ScaleRecommenderPolicy;
20+
class ScaleRecommenderPolicies_ScaleRecommenderPolicy_TargetTrackingPolicy;
21+
} // namespace Ydb::Cms
22+
23+
namespace NYdb::inline V3::NCms {
24+
25+
struct TListDatabasesSettings : public TOperationRequestSettings<TListDatabasesSettings> {};
26+
27+
class TListDatabasesResult : public TStatus {
28+
public:
29+
TListDatabasesResult(TStatus&& status, const Ydb::Cms::ListDatabasesResult& proto);
30+
const std::vector<std::string>& GetPaths() const;
31+
private:
32+
std::vector<std::string> Paths_;
33+
};
34+
35+
using TAsyncListDatabasesResult = NThreading::TFuture<TListDatabasesResult>;
36+
37+
struct TGetDatabaseStatusSettings : public TOperationRequestSettings<TGetDatabaseStatusSettings> {
38+
FLUENT_SETTING(std::string, Path);
39+
};
40+
41+
enum class EState {
42+
StateUnspecified = 0,
43+
Creating = 1,
44+
Running = 2,
45+
Removing = 3,
46+
PendingResources = 4,
47+
Configuring = 5,
48+
};
49+
50+
struct TStorageUnits {
51+
TStorageUnits() = default;
52+
TStorageUnits(const Ydb::Cms::StorageUnits& proto);
53+
54+
std::string UnitKind;
55+
std::uint64_t Count;
56+
};
57+
58+
struct TComputationalUnits {
59+
TComputationalUnits() = default;
60+
TComputationalUnits(const Ydb::Cms::ComputationalUnits& proto);
61+
62+
std::string UnitKind;
63+
std::string AvailabilityZone;
64+
std::uint64_t Count;
65+
};
66+
67+
struct TAllocatedComputationalUnit {
68+
TAllocatedComputationalUnit() = default;
69+
TAllocatedComputationalUnit(const Ydb::Cms::AllocatedComputationalUnit& proto);
70+
71+
std::string Host;
72+
std::uint32_t Port;
73+
std::string UnitKind;
74+
};
75+
76+
struct TResources {
77+
TResources() = default;
78+
TResources(const Ydb::Cms::Resources& proto);
79+
80+
std::vector<TStorageUnits> StorageUnits;
81+
std::vector<TComputationalUnits> ComputationalUnits;
82+
};
83+
84+
struct TSharedResources : public TResources {
85+
using TResources::TResources;
86+
};
87+
88+
struct TServerlessResources {
89+
TServerlessResources() = default;
90+
TServerlessResources(const Ydb::Cms::ServerlessResources& proto);
91+
92+
std::string SharedDatabasePath;
93+
};
94+
95+
struct TSchemaOperationQuotas {
96+
struct TLeakyBucket {
97+
TLeakyBucket() = default;
98+
TLeakyBucket(const Ydb::Cms::SchemaOperationQuotas_LeakyBucket& proto);
99+
100+
double BucketSize = 1;
101+
std::uint64_t BucketSeconds = 2;
102+
};
103+
104+
TSchemaOperationQuotas() = default;
105+
TSchemaOperationQuotas(const Ydb::Cms::SchemaOperationQuotas& proto);
106+
107+
std::vector<TLeakyBucket> LeakyBucketQuotas;
108+
};
109+
110+
struct TDatabaseQuotas {
111+
struct TStorageQuotas {
112+
TStorageQuotas() = default;
113+
TStorageQuotas(const Ydb::Cms::DatabaseQuotas_StorageQuotas& proto);
114+
115+
std::string UnitKind;
116+
std::uint64_t DataSizeHardQuota;
117+
std::uint64_t DataSizeSoftQuota;
118+
};
119+
120+
TDatabaseQuotas() = default;
121+
TDatabaseQuotas(const Ydb::Cms::DatabaseQuotas& proto);
122+
123+
std::uint64_t DataSizeHardQuota;
124+
std::uint64_t DataSizeSoftQuota;
125+
std::uint64_t DataStreamShardsQuota;
126+
std::uint64_t DataStreamReservedStorageQuota;
127+
std::uint32_t TtlMinRunInternalSeconds;
128+
std::vector<TStorageQuotas> StorageQuotas;
129+
};
130+
131+
struct TTargetTrackingPolicy {
132+
using TAverageCpuUtilizationPercent = std::uint32_t;
133+
134+
TTargetTrackingPolicy() = default;
135+
TTargetTrackingPolicy(const Ydb::Cms::ScaleRecommenderPolicies_ScaleRecommenderPolicy_TargetTrackingPolicy& proto);
136+
137+
std::variant<TAverageCpuUtilizationPercent> Target;
138+
};
139+
140+
struct TScaleRecommenderPolicy {
141+
TScaleRecommenderPolicy() = default;
142+
TScaleRecommenderPolicy(const Ydb::Cms::ScaleRecommenderPolicies_ScaleRecommenderPolicy& proto);
143+
144+
std::variant<TTargetTrackingPolicy> Policy;
145+
};
146+
147+
struct TScaleRecommenderPolicies {
148+
TScaleRecommenderPolicies() = default;
149+
TScaleRecommenderPolicies(const Ydb::Cms::ScaleRecommenderPolicies& proto);
150+
151+
std::vector<TScaleRecommenderPolicy> Policies;
152+
};
153+
154+
class TGetDatabaseStatusResult : public TStatus {
155+
public:
156+
TGetDatabaseStatusResult(TStatus&& status, const Ydb::Cms::GetDatabaseStatusResult& proto);
157+
158+
const std::string& GetPath() const;
159+
EState GetState() const;
160+
const std::variant<TResources, TSharedResources, TServerlessResources>& GetResourcesKind() const;
161+
const TResources& GetAllocatedResources() const;
162+
const std::vector<TAllocatedComputationalUnit>& GetRegisteredResources() const;
163+
std::uint64_t GetGeneration() const;
164+
const TSchemaOperationQuotas& GetSchemaOperationQuotas() const;
165+
const TDatabaseQuotas& GetDatabaseQuotas() const;
166+
const TScaleRecommenderPolicies& GetScaleRecommenderPolicies() const;
167+
168+
private:
169+
std::string Path_;
170+
EState State_;
171+
std::variant<TResources, TSharedResources, TServerlessResources> ResourcesKind_;
172+
TResources AllocatedResources_;
173+
std::vector<TAllocatedComputationalUnit> RegisteredResources_;
174+
std::uint64_t Generation_;
175+
TSchemaOperationQuotas SchemaOperationQuotas_;
176+
TDatabaseQuotas DatabaseQuotas_;
177+
TScaleRecommenderPolicies ScaleRecommenderPolicies_;
178+
};
179+
180+
using TAsyncGetDatabaseStatusResult = NThreading::TFuture<TGetDatabaseStatusResult>;
181+
182+
class TCmsClient {
183+
public:
184+
explicit TCmsClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());
185+
186+
TAsyncListDatabasesResult ListDatabases(const TListDatabasesSettings& settings = TListDatabasesSettings());
187+
TAsyncGetDatabaseStatusResult GetDatabaseStatus(const TGetDatabaseStatusSettings& settings = TGetDatabaseStatusSettings());
188+
189+
private:
190+
class TImpl;
191+
std::shared_ptr<TImpl> Impl_;
192+
};
193+
194+
} // namespace NYdb::inline V3::NCms

0 commit comments

Comments
 (0)