Skip to content

Commit 514256b

Browse files
committed
Support double config mode for BSC/distconf (#13607)
1 parent 5496e30 commit 514256b

File tree

3 files changed

+64
-20
lines changed

3 files changed

+64
-20
lines changed

include/ydb-cpp-sdk/client/bsconfig/storage_config.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,24 @@ namespace NYdb::inline V3::NStorageConfig {
1414
struct TFetchStorageConfigResult : public TStatus {
1515
TFetchStorageConfigResult(
1616
TStatus&& status,
17-
std::string&& config)
17+
std::string&& config,
18+
std::string&& storage_config)
1819
: TStatus(std::move(status))
1920
, Config_(std::move(config))
21+
, StorageConfig_(std::move(storage_config))
2022
{}
2123

2224
const std::string& GetConfig() const {
2325
return Config_;
2426
}
2527

28+
const std::string& GetStorageConfig() const {
29+
return StorageConfig_;
30+
}
31+
2632
private:
2733
std::string Config_;
34+
std::string StorageConfig_;
2835
};
2936

3037
using TAsyncFetchStorageConfigResult = NThreading::TFuture<TFetchStorageConfigResult>;
@@ -39,10 +46,14 @@ class TStorageConfigClient {
3946
~TStorageConfigClient();
4047

4148
// Replace config
42-
TAsyncStatus ReplaceStorageConfig(const std::string& config);
49+
TAsyncStatus ReplaceStorageConfig(const std::optional<TString>& yaml_config,
50+
const std::optional<TString>& storage_yaml_config,
51+
std::optional<bool> switch_dedicated_storage_section,
52+
bool dedicated_config_mode);
4353

4454
// Fetch current cluster storage config
45-
TAsyncFetchStorageConfigResult FetchStorageConfig(const TStorageConfigSettings& settings = {});
55+
TAsyncFetchStorageConfigResult FetchStorageConfig(bool dedicated_storage_section, bool dedicated_cluster_section,
56+
const TStorageConfigSettings& settings = {});
4657

4758
// Bootstrap cluster with automatic configuration
4859
TAsyncStatus BootstrapCluster(const std::string& selfAssemblyUUID);

src/api/protos/ydb_bsconfig.proto

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ import "src/api/protos/ydb_operation.proto";
1515

1616
message ReplaceStorageConfigRequest {
1717
Ydb.Operations.OperationParams operation_params = 1;
18-
string yaml_config = 2;
18+
optional string yaml_config = 2; // cluster yaml config
19+
optional string storage_yaml_config = 3; // dedicated storage yaml config (when dual-config mode is enabled)
20+
optional bool switch_dedicated_storage_section = 4; // if filled, can turn on or off dedicated section of YAML config
21+
bool dedicated_config_mode = 5; // if true, then user expects system to work in dual-config mode
1922
}
2023

2124
message ReplaceStorageConfigResponse {
@@ -27,14 +30,17 @@ message ReplaceStorageConfigResult {
2730

2831
message FetchStorageConfigRequest {
2932
Ydb.Operations.OperationParams operation_params = 1;
33+
bool dedicated_storage_section = 2;
34+
bool dedicated_cluster_section = 3;
3035
}
3136

3237
message FetchStorageConfigResponse {
3338
Ydb.Operations.Operation operation = 1;
3439
}
3540

3641
message FetchStorageConfigResult {
37-
string yaml_config = 1;
42+
optional string yaml_config = 1;
43+
optional string storage_yaml_config = 2;
3844
}
3945

4046
message BootstrapClusterRequest {

src/client/bsconfig/storage_config.cpp

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,51 @@ class TStorageConfigClient::TImpl : public TClientImplCommon<TStorageConfigClien
1414
{
1515
}
1616

17-
TAsyncStatus ReplaceStorageConfig(const std::string& config) {
17+
TAsyncStatus ReplaceStorageConfig(const std::optional<TString>& yaml_config,
18+
const std::optional<TString>& storage_yaml_config,
19+
std::optional<bool> switch_dedicated_storage_section,
20+
bool dedicated_config_mode) {
1821
auto request = MakeRequest<Ydb::BSConfig::ReplaceStorageConfigRequest>();
19-
request.set_yaml_config(config);
22+
23+
if (yaml_config) {
24+
request.set_yaml_config(*yaml_config);
25+
}
26+
if (storage_yaml_config) {
27+
request.set_storage_yaml_config(*storage_yaml_config);
28+
}
29+
if (switch_dedicated_storage_section) {
30+
request.set_switch_dedicated_storage_section(*switch_dedicated_storage_section);
31+
}
32+
request.set_dedicated_config_mode(dedicated_config_mode);
2033

2134
return RunSimple<Ydb::BSConfig::V1::BSConfigService, Ydb::BSConfig::ReplaceStorageConfigRequest, Ydb::BSConfig::ReplaceStorageConfigResponse>(
2235
std::move(request),
2336
&Ydb::BSConfig::V1::BSConfigService::Stub::AsyncReplaceStorageConfig);
2437
}
2538

26-
TAsyncFetchStorageConfigResult FetchStorageConfig(const TStorageConfigSettings& settings = {}) {
39+
TAsyncFetchStorageConfigResult FetchStorageConfig(bool dedicated_storage_section, bool dedicated_cluster_section,
40+
const TStorageConfigSettings& settings = {}) {
2741
auto request = MakeOperationRequest<Ydb::BSConfig::FetchStorageConfigRequest>(settings);
42+
if (dedicated_storage_section) {
43+
request.set_dedicated_storage_section(true);
44+
}
45+
if (dedicated_cluster_section) {
46+
request.set_dedicated_cluster_section(true);
47+
}
2848
auto promise = NThreading::NewPromise<TFetchStorageConfigResult>();
2949

3050
auto extractor = [promise] (google::protobuf::Any* any, TPlainStatus status) mutable {
31-
NYdb::TStringType config;
32-
if (Ydb::BSConfig::FetchStorageConfigResult result; any && any->UnpackTo(&result)) {
33-
config = result.yaml_config();
34-
}
35-
36-
TFetchStorageConfigResult val(TStatus(std::move(status)), std::string{std::move(config)});
37-
promise.SetValue(std::move(val));
38-
};
51+
NYdb::TStringType config;
52+
NYdb::TStringType storage_config;
53+
if (Ydb::BSConfig::FetchStorageConfigResult result; any && any->UnpackTo(&result)) {
54+
config = result.yaml_config();
55+
storage_config = result.storage_yaml_config();
56+
}
57+
58+
TFetchStorageConfigResult val(TStatus(std::move(status)), std::string{std::move(config)},
59+
std::string{std::move(storage_config)});
60+
promise.SetValue(std::move(val));
61+
};
3962

4063
Connections_->RunDeferred<Ydb::BSConfig::V1::BSConfigService, Ydb::BSConfig::FetchStorageConfigRequest, Ydb::BSConfig::FetchStorageConfigResponse>(
4164
std::move(request),
@@ -62,12 +85,16 @@ TStorageConfigClient::TStorageConfigClient(const TDriver& driver, const TCommonC
6285

6386
TStorageConfigClient::~TStorageConfigClient() = default;
6487

65-
TAsyncStatus TStorageConfigClient::ReplaceStorageConfig(const std::string& config) {
66-
return Impl_->ReplaceStorageConfig(config);
88+
TAsyncStatus TStorageConfigClient::ReplaceStorageConfig(const std::optional<TString>& yaml_config,
89+
const std::optional<TString>& storage_yaml_config, std::optional<bool> switch_dedicated_storage_section,
90+
bool dedicated_config_mode) {
91+
return Impl_->ReplaceStorageConfig(yaml_config, storage_yaml_config, switch_dedicated_storage_section,
92+
dedicated_config_mode);
6793
}
6894

69-
TAsyncFetchStorageConfigResult TStorageConfigClient::FetchStorageConfig(const TStorageConfigSettings& settings) {
70-
return Impl_->FetchStorageConfig(settings);
95+
TAsyncFetchStorageConfigResult TStorageConfigClient::FetchStorageConfig(bool dedicated_storage_section,
96+
bool dedicated_cluster_section, const TStorageConfigSettings& settings) {
97+
return Impl_->FetchStorageConfig(dedicated_storage_section, dedicated_cluster_section, settings);
7198
}
7299

73100
TAsyncStatus TStorageConfigClient::BootstrapCluster(const std::string& selfAssemblyUUID) {

0 commit comments

Comments
 (0)