Skip to content
Merged
2 changes: 1 addition & 1 deletion .github/import_generation.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
28
29
2 changes: 1 addition & 1 deletion .github/last_commit.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
42606baa568dd1f0408b0651dce31577f28bcfe1
eaa66fe4cc75727a60d89a9ec9d99970e03ce0e0
20 changes: 20 additions & 0 deletions include/ydb-cpp-sdk/client/monitoring/monitoring.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Ydb {
namespace Monitoring {
class SelfCheckResult;
class ClusterStateResult;
}
}

Expand Down Expand Up @@ -34,6 +35,12 @@ struct TSelfCheckSettings : public TOperationRequestSettings<TSelfCheckSettings>
FLUENT_SETTING_OPTIONAL(uint32_t, MaximumLevel);
};

struct TClusterStateSettings : public TOperationRequestSettings<TClusterStateSettings> {
FLUENT_SETTING_OPTIONAL(uint32_t, DurationSeconds);
FLUENT_SETTING_OPTIONAL(uint32_t, PeriodSeconds);
};


class TSelfCheckResult : public TStatus {
friend class NYdb::TProtoAccessor;
public:
Expand All @@ -45,13 +52,26 @@ class TSelfCheckResult : public TStatus {

using TAsyncSelfCheckResult = NThreading::TFuture<TSelfCheckResult>;

class TClusterStateResult : public TStatus {
friend class NYdb::TProtoAccessor;
public:
TClusterStateResult(TStatus&& status, Ydb::Monitoring::ClusterStateResult&& result);
private:
class TImpl;
std::shared_ptr<TImpl> Impl_;
};

using TAsyncClusterStateResult = NThreading::TFuture<TClusterStateResult>;

class TMonitoringClient {
class TImpl;

public:
TMonitoringClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());

TAsyncSelfCheckResult SelfCheck(const TSelfCheckSettings& settings = TSelfCheckSettings());

TAsyncClusterStateResult ClusterState(const TClusterStateSettings& settings = TClusterStateSettings());
private:
std::shared_ptr<TImpl> Impl_;
};
Expand Down
1 change: 1 addition & 0 deletions include/ydb-cpp-sdk/client/proto/accessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class TProtoAccessor {
static const Ydb::Topic::DescribeTopicResult& GetProto(const NYdb::NTopic::TTopicDescription& topicDescription);
static const Ydb::Topic::DescribeConsumerResult& GetProto(const NYdb::NTopic::TConsumerDescription& consumerDescription);
static const Ydb::Monitoring::SelfCheckResult& GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult);
static const Ydb::Monitoring::ClusterStateResult& GetProto(const NYdb::NMonitoring::TClusterStateResult& clusterStateResult);
static const Ydb::Coordination::DescribeNodeResult& GetProto(const NYdb::NCoordination::TNodeDescription& describeNodeResult);
static const Ydb::Import::ListObjectsInS3ExportResult& GetProto(const NYdb::NImport::TListObjectsInS3ExportResult& result);

Expand Down
57 changes: 54 additions & 3 deletions include/ydb-cpp-sdk/client/table/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class ExplicitPartitions;
class GlobalIndexSettings;
class VectorIndexSettings;
class KMeansTreeSettings;
class FulltextIndexSettings;
class PartitioningSettings;
class ReadReplicasSettings;
class DateTypeColumnModeSettings;
Expand Down Expand Up @@ -295,6 +296,49 @@ struct TKMeansTreeSettings {
void Out(IOutputStream &o) const;
};

struct TFulltextIndexSettings {
public:
enum class ELayout {
Unspecified = 0,
Flat,
};

enum class ETokenizer {
Unspecified = 0,
Whitespace,
Standard,
Keyword,
};

struct TAnalyzers {
std::optional<ETokenizer> Tokenizer;
std::optional<std::string> Language;
std::optional<bool> UseFilterLowercase;
std::optional<bool> UseFilterStopwords;
std::optional<bool> UseFilterNgram;
std::optional<bool> UseFilterEdgeNgram;
std::optional<int32_t> FilterNgramMinLength;
std::optional<int32_t> FilterNgramMaxLength;
std::optional<bool> UseFilterLength;
std::optional<int32_t> FilterLengthMin;
std::optional<int32_t> FilterLengthMax;
};

struct TColumnAnalyzers {
std::optional<std::string> Column;
std::optional<TAnalyzers> Analyzers;
};

std::optional<ELayout> Layout;
std::vector<TColumnAnalyzers> Columns;

static TFulltextIndexSettings FromProto(const Ydb::Table::FulltextIndexSettings& proto);

void SerializeTo(Ydb::Table::FulltextIndexSettings& settings) const;

void Out(IOutputStream& o) const;
};

//! Represents index description
class TIndexDescription {
friend class NYdb::TProtoAccessor;
Expand All @@ -306,7 +350,7 @@ class TIndexDescription {
const std::vector<std::string>& indexColumns,
const std::vector<std::string>& dataColumns = {},
const std::vector<TGlobalIndexSettings>& globalIndexSettings = {},
const std::variant<std::monostate, TKMeansTreeSettings>& specializedIndexSettings = {}
const std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings>& specializedIndexSettings = {}
);

TIndexDescription(
Expand All @@ -320,7 +364,7 @@ class TIndexDescription {
EIndexType GetIndexType() const;
const std::vector<std::string>& GetIndexColumns() const;
const std::vector<std::string>& GetDataColumns() const;
const std::variant<std::monostate, TKMeansTreeSettings>& GetIndexSettings() const;
const std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings>& GetIndexSettings() const;
uint64_t GetSizeBytes() const;

void SerializeTo(Ydb::Table::TableIndex& proto) const;
Expand All @@ -340,7 +384,7 @@ class TIndexDescription {
std::vector<std::string> IndexColumns_;
std::vector<std::string> DataColumns_;
std::vector<TGlobalIndexSettings> GlobalIndexSettings_;
std::variant<std::monostate, TKMeansTreeSettings> SpecializedIndexSettings_;
std::variant<std::monostate, TKMeansTreeSettings, TFulltextIndexSettings> SpecializedIndexSettings_;
uint64_t SizeBytes_ = 0;
};

Expand Down Expand Up @@ -755,6 +799,9 @@ class TTableDescription {
// vector KMeansTree
void AddVectorKMeansTreeIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const TKMeansTreeSettings& indexSettings);
void AddVectorKMeansTreeIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TKMeansTreeSettings& indexSettings);
// fulltext
void AddFulltextIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const TFulltextIndexSettings& indexSettings);
void AddFulltextIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TFulltextIndexSettings& indexSettings);

// default
void AddSecondaryIndex(const std::string& indexName, const std::vector<std::string>& indexColumns);
Expand Down Expand Up @@ -996,6 +1043,10 @@ class TTableBuilder {
TTableBuilder& AddVectorKMeansTreeIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const TKMeansTreeSettings& indexSettings);
TTableBuilder& AddVectorKMeansTreeIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TKMeansTreeSettings& indexSettings);

// fulltext
TTableBuilder& AddFulltextIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const TFulltextIndexSettings& indexSettings);
TTableBuilder& AddFulltextIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns, const TFulltextIndexSettings& indexSettings);

// default
TTableBuilder& AddSecondaryIndex(const std::string& indexName, const std::vector<std::string>& indexColumns, const std::vector<std::string>& dataColumns);
TTableBuilder& AddSecondaryIndex(const std::string& indexName, const std::vector<std::string>& indexColumns);
Expand Down
1 change: 1 addition & 0 deletions include/ydb-cpp-sdk/client/table/table_enum.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ enum class EIndexType {
GlobalAsync,
GlobalUnique,
GlobalVectorKMeansTree,
GlobalFulltext,

Unknown = std::numeric_limits<int>::max()
};
Expand Down
2 changes: 1 addition & 1 deletion include/ydb-cpp-sdk/client/types/request_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ struct TRequestSettings {
FLUENT_SETTING(std::string, TraceId);
FLUENT_SETTING(std::string, RequestType);
FLUENT_SETTING(THeader, Header);
FLUENT_SETTING(TDuration, ClientTimeout);
FLUENT_SETTING_DEFAULT(TDuration, ClientTimeout, TDuration::Max());
FLUENT_SETTING(std::string, TraceParent);

TRequestSettings() = default;
Expand Down
2 changes: 2 additions & 0 deletions src/api/grpc/ydb_monitoring_v1.proto
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ service MonitoringService {
rpc SelfCheck(Monitoring.SelfCheckRequest) returns (Monitoring.SelfCheckResponse);
// Checks current node health
rpc NodeCheck(Monitoring.NodeCheckRequest) returns (Monitoring.NodeCheckResponse);
// Get cluster state
rpc ClusterState(Monitoring.ClusterStateRequest) returns (Monitoring.ClusterStateResponse);
}
22 changes: 22 additions & 0 deletions src/api/protos/ydb_monitoring.proto
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,19 @@ message LocationBridgePile {
string name = 1;
}

message LocationStateStorage {
uint32 ring = 1;
LocationNode node = 2;
LocationBridgePile pile = 3;
}

message LocationCompute {
LocationNode node = 1;
LocationComputePool pool = 2;
LocationComputeTablet tablet = 3;
LocationComputeSchema schema = 4;
LocationBridgePile pile = 5;
LocationStateStorage state_storage = 6;
}

message LocationDatabase {
Expand Down Expand Up @@ -227,3 +234,18 @@ message SelfCheckResult {
repeated DatabaseStatus database_status = 3;
LocationNode location = 4;
}

message ClusterStateRequest {
Ydb.Operations.OperationParams operation_params = 1; // basic operation params, including timeout
uint32 duration_seconds = 2;
uint32 period_seconds = 3;
}

message ClusterStateResponse {
// After successfull completion must contain ClusterStateResult.
Ydb.Operations.Operation operation = 1;
}

message ClusterStateResult {
string result = 1;
}
2 changes: 1 addition & 1 deletion src/api/protos/ydb_scheme.proto
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ message Entry {
RESOURCE_POOL = 21;
TRANSFER = 23;
SYS_VIEW = 24;
STREAMING_QUERY = 25;
STREAMING_QUERY = 26;
}

// Name of scheme entry (dir2 of /dir1/dir2)
Expand Down
1 change: 1 addition & 0 deletions src/client/common_client/impl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ _ydb_sdk_add_library(client-ydb_common_client-impl)
target_link_libraries(client-ydb_common_client-impl PUBLIC
yutil
impl-internal-grpc_connections
impl-internal-rpc_request_settings
)

target_sources(client-ydb_common_client-impl PRIVATE
Expand Down
2 changes: 1 addition & 1 deletion src/client/common_client/impl/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class TClientImplCommon
return DbDriverState_->DiscoveryCompleted();
}

void ScheduleTask(const std::function<void()>& fn, TDuration timeout) override {
void ScheduleTask(const std::function<void()>& fn, TDeadline::Duration timeout) override {
std::weak_ptr<IClientImplCommon> weak = this->shared_from_this();
auto cbGuard = [weak, fn]() {
auto strongClient = weak.lock();
Expand Down
5 changes: 3 additions & 2 deletions src/client/common_client/impl/iface.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
#pragma once

#include <src/library/time/time.h>

#include <functional>
#include <util/datetime/base.h>

namespace NYdb::inline V3 {

class IClientImplCommon {
public:
virtual ~IClientImplCommon() = default;
virtual void ScheduleTask(const std::function<void()>& fn, TDuration timeout) = 0;
virtual void ScheduleTask(const std::function<void()>& fn, TDeadline::Duration timeout) = 0;
};

}
4 changes: 2 additions & 2 deletions src/client/driver/driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,9 @@ TDriverConfig TDriver::GetConfig() const {
);
config.SetDrainOnDtors(Impl_->DrainOnDtors_);
config.SetBalancingPolicy(std::make_unique<TBalancingPolicy::TImpl>(Impl_->BalancingSettings_));
config.SetGRpcKeepAliveTimeout(Impl_->GRpcKeepAliveTimeout_);
config.SetGRpcKeepAliveTimeout(std::chrono::duration_cast<std::chrono::microseconds>(Impl_->GRpcKeepAliveTimeout_));
config.SetGRpcKeepAlivePermitWithoutCalls(Impl_->GRpcKeepAlivePermitWithoutCalls_);
config.SetSocketIdleTimeout(Impl_->SocketIdleTimeout_);
config.SetSocketIdleTimeout(std::chrono::duration_cast<std::chrono::microseconds>(Impl_->SocketIdleTimeout_));
config.SetMaxInboundMessageSize(Impl_->MaxInboundMessageSize_);
config.SetMaxOutboundMessageSize(Impl_->MaxOutboundMessageSize_);
config.SetMaxMessageSize(Impl_->MaxMessageSize_);
Expand Down
7 changes: 5 additions & 2 deletions src/client/federated_topic/impl/federation_observer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ TFederatedDbObserverImpl::TFederatedDbObserverImpl(std::shared_ptr<TGRpcConnecti
, PromiseToInitState(NThreading::NewPromise())
, FederationDiscoveryRetryPolicy(settings.RetryPolicy_)
{
RpcSettings.ClientTimeout = settings.ConnectionTimeout_;
RpcSettings.EndpointPolicy = TRpcRequestSettings::TEndpointPolicy::UseDiscoveryEndpoint;
RpcSettings.UseAuth = true;
ConnectionTimeout = TDeadline::SafeDurationCast(settings.ConnectionTimeout_);
}

TFederatedDbObserverImpl::~TFederatedDbObserverImpl() {
Expand Down Expand Up @@ -82,6 +82,9 @@ void TFederatedDbObserverImpl::RunFederationDiscoveryImpl() {
}
};

TRpcRequestSettings settings = RpcSettings;
settings.Deadline = TDeadline::AfterDuration(ConnectionTimeout);

Connections_->RunDeferred<Ydb::FederationDiscovery::V1::FederationDiscoveryService,
Ydb::FederationDiscovery::ListFederationDatabasesRequest,
Ydb::FederationDiscovery::ListFederationDatabasesResponse>(
Expand All @@ -90,7 +93,7 @@ void TFederatedDbObserverImpl::RunFederationDiscoveryImpl() {
&Ydb::FederationDiscovery::V1::FederationDiscoveryService::Stub::AsyncListFederationDatabases,
DbDriverState_,
{}, // no polling unready operations, so no need in delay parameter
RpcSettings,
settings,
FederationDiscoveryDelayContext);
}

Expand Down
1 change: 1 addition & 0 deletions src/client/federated_topic/impl/federation_observer.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class TFederatedDbObserverImpl : public TClientImplCommon<TFederatedDbObserverIm
std::shared_ptr<TFederatedDbState> FederatedDbState;
NThreading::TPromise<void> PromiseToInitState;
TRpcRequestSettings RpcSettings;
TDeadline::Duration ConnectionTimeout;
TSpinLock Lock;

NTopic::IRetryPolicy::TPtr FederationDiscoveryRetryPolicy;
Expand Down
1 change: 1 addition & 0 deletions src/client/impl/internal/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ add_subdirectory(grpc_connections)
add_subdirectory(logger)
add_subdirectory(make_request)
add_subdirectory(plain_status)
add_subdirectory(rpc_request_settings)
add_subdirectory(retry)
add_subdirectory(thread_pool)
add_subdirectory(value_helpers)
6 changes: 4 additions & 2 deletions src/client/impl/internal/db_driver_state/state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ namespace {

namespace NYdb::inline V3 {

using namespace std::chrono_literals;

constexpr int PESSIMIZATION_DISCOVERY_THRESHOLD = 50; // percent of endpoints pessimized by transport error to start recheck
constexpr TDuration ENDPOINT_UPDATE_PERIOD = TDuration::Minutes(1); // period to perform endpoints update in "normal" case
constexpr TDuration DISCOVERY_RECHECK_PERIOD = TDuration::Seconds(5); // period to run periodic discovery task
constexpr TDeadline::Duration DISCOVERY_RECHECK_PERIOD = 5s; // period to run periodic discovery task

TDbDriverState::TDbDriverState(
const std::string& database,
Expand Down Expand Up @@ -237,7 +239,7 @@ TDbDriverStatePtr TDbDriverStateTracker::GetDriverState(
return strongState;
}

void TDbDriverState::AddPeriodicTask(TPeriodicCb&& cb, TDuration period) {
void TDbDriverState::AddPeriodicTask(TPeriodicCb&& cb, TDeadline::Duration period) {
Client->AddPeriodicTask(std::move(cb), period);
}

Expand Down
2 changes: 1 addition & 1 deletion src/client/impl/internal/db_driver_state/state.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class TDbDriverState

void SignalDiscoveryCompleted();

void AddPeriodicTask(TPeriodicCb&& cb, TDuration period) override;
void AddPeriodicTask(TPeriodicCb&& cb, TDeadline::Duration period) override;

void AddCb(TCb&& cb, ENotifyType type);
void ForEachEndpoint(const TEndpointElectorSafe::THandleCb& cb, const void* tag) const;
Expand Down
1 change: 1 addition & 0 deletions src/client/impl/internal/grpc_connections/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ target_link_libraries(impl-internal-grpc_connections PUBLIC
api-protos
impl-internal-db_driver_state
impl-internal-plain_status
impl-internal-rpc_request_settings
client-impl-ydb_stats
client-resources
client-types-exceptions
Expand Down
Loading
Loading