Skip to content

Commit 5bf7224

Browse files
mregrockGazizonoki
authored andcommitted
Moved commit "Add ydb cli replace and fetch storage config commands" from ydb repo
1 parent b8d3f94 commit 5bf7224

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
3+
#include <ydb-cpp-sdk/client/common_client/settings.h>
4+
#include <ydb-cpp-sdk/client/driver/driver.h>
5+
#include <ydb-cpp-sdk/client/types/status/status.h>
6+
#include <ydb-cpp-sdk/client/types/request_settings.h>
7+
#include <ydb-cpp-sdk/client/types/ydb.h>
8+
9+
#include <memory>
10+
#include <string>
11+
12+
namespace NYdb::inline V3::NStorageConfig {
13+
14+
struct TFetchStorageConfigResult : public TStatus {
15+
TFetchStorageConfigResult(
16+
TStatus&& status,
17+
std::string&& config)
18+
: TStatus(std::move(status))
19+
, Config_(std::move(config))
20+
{}
21+
22+
const std::string& GetConfig() const {
23+
return Config_;
24+
}
25+
26+
private:
27+
std::string Config_;
28+
};
29+
30+
using TAsyncFetchStorageConfigResult = NThreading::TFuture<TFetchStorageConfigResult>;
31+
32+
struct TStorageConfigSettings : public NYdb::TOperationRequestSettings<TStorageConfigSettings> {};
33+
34+
class TStorageConfigClient {
35+
public:
36+
37+
explicit TStorageConfigClient(const TDriver& driver, const TCommonClientSettings& settings = {});
38+
39+
~TStorageConfigClient();
40+
41+
// Replace config
42+
TAsyncStatus ReplaceStorageConfig(const std::string& config);
43+
44+
// Fetch current cluster storage config
45+
TAsyncFetchStorageConfigResult FetchStorageConfig(const TStorageConfigSettings& settings = {});
46+
47+
private:
48+
class TImpl;
49+
50+
std::unique_ptr<TImpl> Impl_;
51+
};
52+
53+
}

src/client/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
add_subdirectory(bsconfig)
12
add_subdirectory(draft)
23
add_subdirectory(helpers)
34
add_subdirectory(iam)

src/client/bsconfig/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
_ydb_sdk_add_library(client-bsconfig)
2+
3+
target_link_libraries(client-bsconfig
4+
PUBLIC
5+
client-ydb_driver
6+
client-ydb_common_client
7+
client-ydb_types-status
8+
client-ydb_types
9+
PRIVATE
10+
api-grpc
11+
impl-ydb_internal-make_request
12+
client-ydb_common_client-impl
13+
)
14+
15+
target_sources(client-bsconfig
16+
PRIVATE
17+
storage_config.cpp
18+
)
19+
20+
_ydb_sdk_make_client_component(BSConfig client-bsconfig)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include <ydb-cpp-sdk/client/bsconfig/storage_config.h>
2+
3+
#include <src/client/common_client/impl/client.h>
4+
#include <src/client/impl/ydb_internal/make_request/make.h>
5+
6+
#include <src/api/grpc/ydb_bsconfig_v1.grpc.pb.h>
7+
8+
namespace NYdb::inline V3::NStorageConfig {
9+
10+
class TStorageConfigClient::TImpl : public TClientImplCommon<TStorageConfigClient::TImpl> {
11+
public:
12+
TImpl(std::shared_ptr<TGRpcConnectionsImpl> connections, const TCommonClientSettings& settings)
13+
: TClientImplCommon(std::move(connections), settings)
14+
{
15+
}
16+
17+
TAsyncStatus ReplaceStorageConfig(const std::string& config) {
18+
auto request = MakeRequest<Ydb::BSConfig::ReplaceStorageConfigRequest>();
19+
request.set_yaml_config(config);
20+
21+
return RunSimple<Ydb::BSConfig::V1::BSConfigService, Ydb::BSConfig::ReplaceStorageConfigRequest, Ydb::BSConfig::ReplaceStorageConfigResponse>(
22+
std::move(request),
23+
&Ydb::BSConfig::V1::BSConfigService::Stub::AsyncReplaceStorageConfig);
24+
}
25+
26+
TAsyncFetchStorageConfigResult FetchStorageConfig(const TStorageConfigSettings& settings = {}) {
27+
auto request = MakeOperationRequest<Ydb::BSConfig::FetchStorageConfigRequest>(settings);
28+
auto promise = NThreading::NewPromise<TFetchStorageConfigResult>();
29+
30+
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+
};
39+
40+
Connections_->RunDeferred<Ydb::BSConfig::V1::BSConfigService, Ydb::BSConfig::FetchStorageConfigRequest, Ydb::BSConfig::FetchStorageConfigResponse>(
41+
std::move(request),
42+
extractor,
43+
&Ydb::BSConfig::V1::BSConfigService::Stub::AsyncFetchStorageConfig,
44+
DbDriverState_,
45+
INITIAL_DEFERRED_CALL_DELAY,
46+
TRpcRequestSettings::Make(settings));
47+
return promise.GetFuture();
48+
}
49+
50+
};
51+
52+
TStorageConfigClient::TStorageConfigClient(const TDriver& driver, const TCommonClientSettings& settings)
53+
: Impl_(new TStorageConfigClient::TImpl(CreateInternalInterface(driver), settings))
54+
{}
55+
56+
TStorageConfigClient::~TStorageConfigClient() = default;
57+
58+
TAsyncStatus TStorageConfigClient::ReplaceStorageConfig(const std::string& config) {
59+
return Impl_->ReplaceStorageConfig(config);
60+
}
61+
62+
TAsyncFetchStorageConfigResult TStorageConfigClient::FetchStorageConfig(const TStorageConfigSettings& settings) {
63+
return Impl_->FetchStorageConfig(settings);
64+
}
65+
66+
67+
}

0 commit comments

Comments
 (0)