|
| 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