From 5071c67eba9c422bbb30c7e234657f3df8eac6c4 Mon Sep 17 00:00:00 2001 From: kruall Date: Tue, 30 Dec 2025 13:30:35 +0000 Subject: [PATCH 1/9] Add kv api v2 (#30697) --- .github/last_commit.txt | 2 +- src/api/grpc/ydb_keyvalue_v2.proto | 35 +++++++ src/api/protos/ydb_keyvalue.proto | 26 ++++++ tests/slo_workloads/.dockerignore | 35 +++++-- tests/slo_workloads/Dockerfile | 143 +++++------------------------ 5 files changed, 113 insertions(+), 128 deletions(-) create mode 100644 src/api/grpc/ydb_keyvalue_v2.proto diff --git a/.github/last_commit.txt b/.github/last_commit.txt index fed5bffc630..470427fb3cb 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -8d2f0915190e981b53b115ea4b755e8dc0a9df5e +c934bf283cc9e4dd69411d713bf3ac2b7a0d8cd7 diff --git a/src/api/grpc/ydb_keyvalue_v2.proto b/src/api/grpc/ydb_keyvalue_v2.proto new file mode 100644 index 00000000000..73d9f148529 --- /dev/null +++ b/src/api/grpc/ydb_keyvalue_v2.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package Ydb.KeyValue.V2; + +option java_package = "com.yandex.ydb.keyvalue.v2"; +option java_outer_classname = "KeyValueGrpc"; +option java_multiple_files = true; + +import "src/api/protos/ydb_keyvalue.proto"; + +// KeyValue tablets provide a simple key-value storage in a low-overhead and easy-to-shoot-your-leg manner. +// To use KeyValue tablets in an efficient way one must be familiar with the design of both the KeyValue tablet +// and the Distributed Storage underneath it. + +service KeyValueService { + + // Acquire an exclusive lock for the partition. + rpc AcquireLock(KeyValue.AcquireLockRequest) returns (KeyValue.AcquireLockResult); + + // Perform list of commands to modify the state of the partition as an atomic transaction. + rpc ExecuteTransaction(KeyValue.ExecuteTransactionRequest) returns (KeyValue.ExecuteTransactionResult); + + // Read the value stored in the item with the key specified. + rpc Read(KeyValue.ReadRequest) returns (KeyValue.ReadResult); + + // Read items with keys in the specified range. + rpc ReadRange(KeyValue.ReadRangeRequest) returns (KeyValue.ReadRangeResult); + + // List keys and metadata of items with keys in the specified range. + rpc ListRange(KeyValue.ListRangeRequest) returns (KeyValue.ListRangeResult); + + // Get storage channel status of the partition. + rpc GetStorageChannelStatus(KeyValue.GetStorageChannelStatusRequest) returns (KeyValue.GetStorageChannelStatusResult); + +} diff --git a/src/api/protos/ydb_keyvalue.proto b/src/api/protos/ydb_keyvalue.proto index 53e0703c793..21e1cc0708b 100644 --- a/src/api/protos/ydb_keyvalue.proto +++ b/src/api/protos/ydb_keyvalue.proto @@ -8,6 +8,8 @@ option java_outer_classname = "KeyValueProtos"; option java_multiple_files = true; import "src/api/protos/ydb_operation.proto"; +import "src/api/protos/ydb_status_codes.proto"; +import "src/api/protos/ydb_issue_message.proto"; // // KeyValue API. @@ -109,6 +111,10 @@ message AcquireLockResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 2; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message ExecuteTransactionRequest { @@ -234,6 +240,10 @@ message ExecuteTransactionResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 2; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message ReadRequest { @@ -290,6 +300,10 @@ message ReadResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 6; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message ReadRangeRequest { @@ -354,6 +368,10 @@ message ReadRangeResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 3; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message ListRangeRequest { @@ -407,6 +425,10 @@ message ListRangeResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 3; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message GetStorageChannelStatusRequest { @@ -435,6 +457,10 @@ message GetStorageChannelStatusResult { // Contains 0 if the request was sent to the node of the partition, node ID of the partition otherwise. uint32 node_id = 2; + + // Response status, use in V2. + StatusIds.StatusCode status = 16; + repeated Ydb.Issue.IssueMessage issues = 17; } message CreateVolumeRequest { diff --git a/tests/slo_workloads/.dockerignore b/tests/slo_workloads/.dockerignore index 9e958bd1bf9..b0b001ba358 100644 --- a/tests/slo_workloads/.dockerignore +++ b/tests/slo_workloads/.dockerignore @@ -5,17 +5,12 @@ .gitattributes # IDE and editor files -.idea/ -.vscode/ -.cache/ -.cursor/ -.cursorrules +.vscode +.idea *.swp *.swo +*~ .DS_Store -*.dSYM -.clangd -compile_commands.json # Build artifacts and cache *.o @@ -34,6 +29,7 @@ node_modules/ # Documentation *.md docs/ +*.txt !requirements.txt # CI/CD @@ -41,8 +37,31 @@ docs/ .travis.yml azure-pipelines.yml +# Test files +*_test.cpp +*_test.py +*_ut.cpp +test_* +tests/ +!ydb/public/sdk/cpp/tests/slo_workloads/ + # Large directories not needed for SDK builds ydb/core/ ydb/apps/ ydb/services/ ydb/tools/ + +# Keep only what's needed (specified in Dockerfile COPY commands): +# - build/ +# - certs/ +# - contrib/ +# - library/cpp/ +# - tools/ +# - util/ +# - ydb/library/yverify_stream/ +# - ydb/public/api/ +# - ydb/public/lib/protobuf/ +# - ydb/public/lib/validation/ +# - ydb/public/sdk/cpp/ +# - ya + diff --git a/tests/slo_workloads/Dockerfile b/tests/slo_workloads/Dockerfile index 091ce23066d..088730c33e8 100644 --- a/tests/slo_workloads/Dockerfile +++ b/tests/slo_workloads/Dockerfile @@ -1,126 +1,31 @@ -FROM ubuntu:22.04 - -ARG PRESET=release-test-clang -ARG REF=unknown - -# Install software-properties-common for add-apt-repository -RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test - -# Install C++ tools and libraries -RUN apt-get -y update && apt-get -y install \ - git gdb wget ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \ - rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \ - libbz2-dev liblz4-dev libdouble-conversion-dev libssl-dev libstdc++-13-dev gcc-13 g++-13 \ - && apt-get clean && rm -rf /var/lib/apt/lists/* - -# Install CMake -ENV CMAKE_VERSION=3.27.7 -RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \ - -q -O cmake-install.sh \ - && chmod u+x cmake-install.sh \ - && ./cmake-install.sh --skip-license --prefix=/usr/local \ - && rm cmake-install.sh - -# Install LLVM -ENV LLVM_VERSION=16 -RUN wget https://apt.llvm.org/llvm.sh && \ - chmod u+x llvm.sh && \ - ./llvm.sh ${LLVM_VERSION} && \ - rm llvm.sh +FROM ubuntu:22.04 AS build -# Update alternatives to use clang-16 by default -RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \ - update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \ - update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000 +ARG SRC_PATH +ARG BINARY_NAME +ARG REF="unknown" -# Update alternatives to use gcc-13 by default -RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \ - update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000 +RUN apt-get update \ + && apt-get install -y --no-install-recommends python3 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -# Install abseil-cpp -ENV ABSEIL_CPP_VERSION=20230802.0 -ENV ABSEIL_CPP_INSTALL_DIR=/root/ydb_deps/absl -RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \ - tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${ABSEIL_CPP_INSTALL_DIR} && \ - rm -rf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz abseil-cpp-${ABSEIL_CPP_VERSION} +COPY build/ /build/ +COPY certs/ /certs/ +COPY contrib/ /contrib/ +COPY library/cpp/ /library/cpp/ +COPY tools/ /tools/ +COPY util/ /util/ +COPY ydb/library/yverify_stream/ /ydb/library/yverify_stream/ +COPY ydb/public/api/ /ydb/public/api/ +COPY ydb/public/lib/protobuf/ /ydb/public/lib/protobuf/ +COPY ydb/public/lib/validation/ /ydb/public/lib/validation/ +COPY ydb/public/sdk/cpp/ /ydb/public/sdk/cpp/ -# Install protobuf -ENV PROTOBUF_VERSION=3.21.12 -ENV PROTOBUF_INSTALL_DIR=/root/ydb_deps/protobuf -RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \ - tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${PROTOBUF_INSTALL_DIR} && \ - rm -rf protobuf-${PROTOBUF_VERSION}.tar.gz protobuf-${PROTOBUF_VERSION} +COPY ./ya / -# Install grpc -ENV GRPC_VERSION=1.54.3 -ENV GRPC_INSTALL_DIR=/root/ydb_deps/grpc -RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \ - tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_PREFIX_PATH="${ABSEIL_CPP_INSTALL_DIR};${PROTOBUF_INSTALL_DIR}" \ - -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \ - -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \ - -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \ - -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ - -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${GRPC_INSTALL_DIR} && \ - rm -rf grpc-${GRPC_VERSION}.tar.gz grpc-${GRPC_VERSION} +RUN ./ya make -r -D REF=${REF} ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH} && cp ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH}/${BINARY_NAME} /slo-workload-bin -# Install base64 -ENV BASE64_VERSION=0.5.2 -ENV BASE64_INSTALL_DIR=/root/ydb_deps/base64 -RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \ - tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${BASE64_INSTALL_DIR} && \ - rm -rf base64-${BASE64_VERSION}.tar.gz base64-${BASE64_VERSION} - -# Install brotli -ENV BROTLI_VERSION=1.1.0 -ENV BROTLI_INSTALL_DIR=/root/ydb_deps/brotli -RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \ - tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${BROTLI_INSTALL_DIR} && \ - rm -rf brotli-${BROTLI_VERSION}.tar.gz brotli-${BROTLI_VERSION} - -# Install jwt-cpp -ENV JWT_CPP_VERSION=0.7.0 -ENV JWT_CPP_INSTALL_DIR=/root/ydb_deps/jwt-cpp -RUN wget -O jwt-cpp-${JWT_CPP_VERSION}.tar.gz https://github.com/Thalhammer/jwt-cpp/archive/refs/tags/v${JWT_CPP_VERSION}.tar.gz && \ - tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \ - mkdir build && cd build && \ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ - cmake --build . --config Release && \ - cmake --install . --config Release --prefix ${JWT_CPP_INSTALL_DIR} && \ - rm -rf jwt-cpp-${JWT_CPP_VERSION}.tar.gz jwt-cpp-${JWT_CPP_VERSION} - -# Install ccache 4.8.1 or above -ENV CCACHE_VERSION=4.8.1 -RUN wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ - && tar -xf ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ - && cp ccache-${CCACHE_VERSION}-linux-x86_64/ccache /usr/local/bin/ \ - && rm -rf ccache-${CCACHE_VERSION}-linux-x86_64 ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz - -COPY . /ydb-cpp-sdk -WORKDIR /ydb-cpp-sdk -RUN rm -rf build - -RUN cmake -DSLO_BRANCH_REF=${REF} --preset ${PRESET} -RUN cmake --build --preset default --target slo-key-value +FROM ubuntu:22.04 -ENTRYPOINT ["./build/tests/slo_workloads/key_value/slo-key-value"] +COPY --from=build /slo-workload-bin / +ENTRYPOINT ["/slo-workload-bin"] From 6084df02e9b4484afd466e64708036f6491d2197 Mon Sep 17 00:00:00 2001 From: Ilnaz Nizametdinov Date: Tue, 30 Dec 2025 13:30:40 +0000 Subject: [PATCH 2/9] Rename materialized index options (#31210) --- .github/last_commit.txt | 2 +- include/ydb-cpp-sdk/client/export/export.h | 2 +- include/ydb-cpp-sdk/client/import/import.h | 4 +-- include/ydb-cpp-sdk/client/proto/accessor.h | 4 +-- src/api/protos/ydb_export.proto | 6 ++-- src/api/protos/ydb_import.proto | 14 ++++----- src/client/export/export.cpp | 4 +-- src/client/import/import.cpp | 4 +-- src/client/proto/accessor.cpp | 34 ++++++++++----------- 9 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.github/last_commit.txt b/.github/last_commit.txt index 470427fb3cb..94a83c333a0 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -c934bf283cc9e4dd69411d713bf3ac2b7a0d8cd7 +9f65709b14e5ae0967eeb348152ee9dc98fec637 diff --git a/include/ydb-cpp-sdk/client/export/export.h b/include/ydb-cpp-sdk/client/export/export.h index 8369fc0e95a..a2ada6ed70f 100644 --- a/include/ydb-cpp-sdk/client/export/export.h +++ b/include/ydb-cpp-sdk/client/export/export.h @@ -101,7 +101,7 @@ struct TExportToS3Settings : public TOperationRequestSettings::max(), }; -enum class EIndexFillingMode { +enum class EIndexPopulationMode { Build = 0, Import = 1, Auto = 2, @@ -71,7 +71,7 @@ struct TImportFromS3Settings : public TOperationRequestSettings TExportClient::ExportToS3(const TExportToS3Settings } request.mutable_settings()->set_disable_virtual_addressing(!settings.UseVirtualAddressing_); - request.mutable_settings()->set_materialize_indexes(settings.MaterializeIndexes_); + request.mutable_settings()->set_include_index_data(settings.IncludeIndexData_); if (settings.EncryptionAlgorithm_.empty() != settings.SymmetricKey_.empty()) { throw TContractViolation("Encryption algorithm and symmetric key must be set together"); diff --git a/src/client/import/import.cpp b/src/client/import/import.cpp index 99936a81768..9fcc478a291 100644 --- a/src/client/import/import.cpp +++ b/src/client/import/import.cpp @@ -77,7 +77,7 @@ TImportFromS3Response::TImportFromS3Response(TStatus&& status, Ydb::Operations:: Metadata_.Settings.Description(metadata.settings().description()); Metadata_.Settings.NumberOfRetries(metadata.settings().number_of_retries()); - Metadata_.Settings.IndexFillingMode(TProtoAccessor::FromProto(metadata.settings().index_filling_mode())); + Metadata_.Settings.IndexPopulationMode(TProtoAccessor::FromProto(metadata.settings().index_population_mode())); // progress Metadata_.Progress = TProtoAccessor::FromProto(metadata.progress()); @@ -316,7 +316,7 @@ TAsyncImportFromS3Response TImportClient::ImportFromS3(const TImportFromS3Settin settingsProto.set_destination_path(settings.DestinationPath_.value()); } - settingsProto.set_index_filling_mode(TProtoAccessor::GetProto(settings.IndexFillingMode_)); + settingsProto.set_index_population_mode(TProtoAccessor::GetProto(settings.IndexPopulationMode_)); for (const std::string& excludeRegexp : settings.ExcludeRegexp_) { settingsProto.add_exclude_regexps(excludeRegexp); diff --git a/src/client/proto/accessor.cpp b/src/client/proto/accessor.cpp index ed7dfbd5355..8a5cbd79c78 100644 --- a/src/client/proto/accessor.cpp +++ b/src/client/proto/accessor.cpp @@ -137,30 +137,30 @@ NImport::EImportProgress TProtoAccessor::FromProto(Ydb::Import::ImportProgress:: } } -Ydb::Import::ImportFromS3Settings::IndexFillingMode TProtoAccessor::GetProto(NImport::EIndexFillingMode value) { +Ydb::Import::ImportFromS3Settings::IndexPopulationMode TProtoAccessor::GetProto(NImport::EIndexPopulationMode value) { switch (value) { - case NImport::EIndexFillingMode::Build: - return Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_BUILD; - case NImport::EIndexFillingMode::Import: - return Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_IMPORT; - case NImport::EIndexFillingMode::Auto: - return Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_AUTO; + case NImport::EIndexPopulationMode::Build: + return Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_BUILD; + case NImport::EIndexPopulationMode::Import: + return Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_IMPORT; + case NImport::EIndexPopulationMode::Auto: + return Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_AUTO; default: - return Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_UNSPECIFIED; + return Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_UNSPECIFIED; } } -NImport::EIndexFillingMode TProtoAccessor::FromProto(Ydb::Import::ImportFromS3Settings::IndexFillingMode value) { +NImport::EIndexPopulationMode TProtoAccessor::FromProto(Ydb::Import::ImportFromS3Settings::IndexPopulationMode value) { switch (value) { - case Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_UNSPECIFIED: - case Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_BUILD: - return NImport::EIndexFillingMode::Build; - case Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_IMPORT: - return NImport::EIndexFillingMode::Import; - case Ydb::Import::ImportFromS3Settings::INDEX_FILLING_MODE_AUTO: - return NImport::EIndexFillingMode::Auto; + case Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_UNSPECIFIED: + case Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_BUILD: + return NImport::EIndexPopulationMode::Build; + case Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_IMPORT: + return NImport::EIndexPopulationMode::Import; + case Ydb::Import::ImportFromS3Settings::INDEX_POPULATION_MODE_AUTO: + return NImport::EIndexPopulationMode::Auto; default: - return NImport::EIndexFillingMode::Unknown; + return NImport::EIndexPopulationMode::Unknown; } } From bee6090ddc00ef9d0cfa68c8443304a44c69ad6c Mon Sep 17 00:00:00 2001 From: Pisarenko Grigoriy Date: Tue, 30 Dec 2025 13:30:46 +0000 Subject: [PATCH 3/9] YQ-4993 optimized data copy in topic sdk (#31231) --- .github/last_commit.txt | 2 +- src/client/topic/impl/read_session_impl.ipp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/last_commit.txt b/.github/last_commit.txt index 94a83c333a0..4c958ced908 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -9f65709b14e5ae0967eeb348152ee9dc98fec637 +506922ec48091e6e3c6926be2ec7a702f170326d diff --git a/src/client/topic/impl/read_session_impl.ipp b/src/client/topic/impl/read_session_impl.ipp index aec1a0e2385..2c98fd05edc 100644 --- a/src/client/topic/impl/read_session_impl.ipp +++ b/src/client/topic/impl/read_session_impl.ipp @@ -3049,7 +3049,7 @@ void TDataDecompressionInfo::TDecompressionTask::operator( ) { const ICodec* codecImpl = TCodecMap::GetTheCodecMap().GetOrThrow(static_cast(data.codec())); std::string decompressed = codecImpl->Decompress(data.data()); - data.set_data(TStringType{decompressed}); + data.set_data(TStringType{std::move(decompressed)}); data.set_codec(Ydb::PersQueue::V1::CODEC_RAW); } } else { @@ -3059,7 +3059,7 @@ void TDataDecompressionInfo::TDecompressionTask::operator( ) { const ICodec* codecImpl = TCodecMap::GetTheCodecMap().GetOrThrow(static_cast(batch.codec())); std::string decompressed = codecImpl->Decompress(data.data()); - data.set_data(TStringType{decompressed}); + data.set_data(TStringType{std::move(decompressed)}); } } } catch (...) { From ff84e5c203336d3c090973d0b1de1b4e28ca6840 Mon Sep 17 00:00:00 2001 From: Nikolay Shestakov Date: Tue, 30 Dec 2025 13:30:51 +0000 Subject: [PATCH 4/9] Fixed possible crash in SDK when topic reading session is destroyng (#31374) --- .github/last_commit.txt | 2 +- src/client/topic/impl/read_session_impl.ipp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/last_commit.txt b/.github/last_commit.txt index 4c958ced908..c1ca4f4f5d5 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -506922ec48091e6e3c6926be2ec7a702f170326d +2229af08d74f7e754538bd104da09320f4a9bcf6 diff --git a/src/client/topic/impl/read_session_impl.ipp b/src/client/topic/impl/read_session_impl.ipp index 2c98fd05edc..99133975632 100644 --- a/src/client/topic/impl/read_session_impl.ipp +++ b/src/client/topic/impl/read_session_impl.ipp @@ -242,6 +242,8 @@ void TSingleClusterReadSessionImpl::TDecompressionQueueIte template TSingleClusterReadSessionImpl::~TSingleClusterReadSessionImpl() { + std::lock_guard guard(Lock); + for (auto&& [_, partitionStream] : PartitionStreams) { partitionStream->ClearQueue(); } From 559bed9de8ea2b22fbdf130ab19d8a709fc00a2d Mon Sep 17 00:00:00 2001 From: Pisarenko Grigoriy Date: Tue, 30 Dec 2025 13:30:56 +0000 Subject: [PATCH 5/9] KIKIMR-24149 add AI into ydb cli (#29380) --- .github/last_commit.txt | 2 +- src/client/types/status/status.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/last_commit.txt b/.github/last_commit.txt index c1ca4f4f5d5..7c4f631d137 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -2229af08d74f7e754538bd104da09320f4a9bcf6 +df7b180abbd89bf1185f58d03b42ab25c048ad74 diff --git a/src/client/types/status/status.cpp b/src/client/types/status/status.cpp index c898a1a4af2..137c41bd6c0 100644 --- a/src/client/types/status/status.cpp +++ b/src/client/types/status/status.cpp @@ -119,6 +119,6 @@ void ThrowOnErrorOrPrintIssues(TStatus status) { }); } -} +} // namespace NStatusHelpers } // namespace NYdb From e19ea38e55f2d9b0d5fda9b88de7777bd7fc9246 Mon Sep 17 00:00:00 2001 From: Bulat Date: Tue, 30 Dec 2025 13:31:01 +0000 Subject: [PATCH 6/9] [C++ SDK] Added deadline propagation in retrier (#30231) --- .github/last_commit.txt | 2 +- include/ydb-cpp-sdk/client/query/client.h | 9 + include/ydb-cpp-sdk/client/table/table.h | 10 + .../client/types/request_settings.h | 11 +- .../ydb-cpp-sdk}/library/time/time.h | 0 src/client/common_client/impl/iface.h | 2 +- src/client/impl/internal/retry/retry.h | 10 + src/client/impl/internal/retry/retry_async.h | 14 +- src/client/impl/internal/retry/retry_sync.h | 13 +- .../internal/rpc_request_settings/settings.h | 15 +- .../impl/session/kqp_session_common.cpp | 2 + src/client/impl/session/kqp_session_common.h | 3 + src/client/query/client.cpp | 78 ++++--- src/client/query/impl/client_session.cpp | 11 +- src/client/query/impl/client_session.h | 1 + src/client/query/impl/exec_query.cpp | 1 + src/client/table/impl/table_client.cpp | 194 ++++++++++++------ src/client/table/impl/table_client.h | 28 +-- src/client/table/table.cpp | 63 +++--- .../types/core_facility/core_facility.h | 2 +- src/library/grpc/client/grpc_client_low.h | 2 +- src/library/time/time.cpp | 2 +- tests/unit/library/time/time_ut.cpp | 2 +- 23 files changed, 309 insertions(+), 166 deletions(-) rename {src => include/ydb-cpp-sdk}/library/time/time.h (100%) diff --git a/.github/last_commit.txt b/.github/last_commit.txt index 7c4f631d137..3522bfc6d07 100644 --- a/.github/last_commit.txt +++ b/.github/last_commit.txt @@ -1 +1 @@ -df7b180abbd89bf1185f58d03b42ab25c048ad74 +303019a794dd98ca44a77440af08bbeecf56d727 diff --git a/include/ydb-cpp-sdk/client/query/client.h b/include/ydb-cpp-sdk/client/query/client.h index c55f762316d..0c67b2f65e2 100644 --- a/include/ydb-cpp-sdk/client/query/client.h +++ b/include/ydb-cpp-sdk/client/query/client.h @@ -22,6 +22,10 @@ namespace NYdb::inline V3 { template class TRetryContext; } // namespace NRetry::Sync + namespace NRetry { + template + class TRetryDeadlineHelper; + } // namespace NRetry } namespace NYdb::inline V3::NQuery { @@ -129,9 +133,12 @@ class TSession { friend class TQueryClient; friend class TTransaction; friend class TExecuteQueryIterator; + friend class NRetry::TRetryDeadlineHelper; public: const std::string& GetId() const; + const std::optional& GetPropagatedDeadline() const; + TAsyncExecuteQueryResult ExecuteQuery(const std::string& query, const TTxControl& txControl, const TExecuteQuerySettings& settings = TExecuteQuerySettings()); @@ -153,6 +160,8 @@ class TSession { TSession(std::shared_ptr client); // Create broken session TSession(std::shared_ptr client, TSession::TImpl* sessionImpl); + void SetPropagatedDeadline(const TDeadline& deadline); + std::shared_ptr Client_; std::shared_ptr SessionImpl_; }; diff --git a/include/ydb-cpp-sdk/client/table/table.h b/include/ydb-cpp-sdk/client/table/table.h index 9ae0114e552..f405fc654af 100644 --- a/include/ydb-cpp-sdk/client/table/table.h +++ b/include/ydb-cpp-sdk/client/table/table.h @@ -57,6 +57,11 @@ template class TRetryContext; } // namespace NRetry::Sync +namespace NRetry { +template +class TRetryDeadlineHelper; +} // namespace NRetry + namespace NScheme { struct TPermissions; } // namespace NScheme @@ -1857,6 +1862,7 @@ class TSession { friend class TDataQuery; friend class TTransaction; friend class TSessionPool; + friend class NRetry::TRetryDeadlineHelper; public: //! The following methods perform corresponding calls. @@ -1931,11 +1937,15 @@ class TSession { //! Returns session id const std::string& GetId() const; + const std::optional& GetPropagatedDeadline() const; + class TImpl; private: TSession(std::shared_ptr client, const std::string& sessionId, const std::string& endpointId, bool isOwnedBySessionPool); TSession(std::shared_ptr client, std::shared_ptr SessionImpl_); + void SetPropagatedDeadline(const TDeadline& deadline); + std::shared_ptr Client_; std::shared_ptr SessionImpl_; }; diff --git a/include/ydb-cpp-sdk/client/types/request_settings.h b/include/ydb-cpp-sdk/client/types/request_settings.h index 51f3b40307c..2067694fd79 100644 --- a/include/ydb-cpp-sdk/client/types/request_settings.h +++ b/include/ydb-cpp-sdk/client/types/request_settings.h @@ -4,6 +4,8 @@ #include "fluent_settings_helpers.h" +#include + #include #include @@ -17,20 +19,23 @@ struct TRequestSettings { using TSelf = TDerived; using THeader = std::vector>; + FLUENT_SETTING_DEFAULT(TDuration, ClientTimeout, TDuration::Max()); + FLUENT_SETTING_DEFAULT(TDeadline, Deadline, TDeadline::Max()); + FLUENT_SETTING(std::string, TraceId); FLUENT_SETTING(std::string, RequestType); FLUENT_SETTING(THeader, Header); - FLUENT_SETTING_DEFAULT(TDuration, ClientTimeout, TDuration::Max()); FLUENT_SETTING(std::string, TraceParent); TRequestSettings() = default; template explicit TRequestSettings(const TRequestSettings& other) - : TraceId_(other.TraceId_) + : ClientTimeout_(other.ClientTimeout_) + , Deadline_(other.Deadline_) + , TraceId_(other.TraceId_) , RequestType_(other.RequestType_) , Header_(other.Header_) - , ClientTimeout_(other.ClientTimeout_) , TraceParent_(other.TraceParent_) {} }; diff --git a/src/library/time/time.h b/include/ydb-cpp-sdk/library/time/time.h similarity index 100% rename from src/library/time/time.h rename to include/ydb-cpp-sdk/library/time/time.h diff --git a/src/client/common_client/impl/iface.h b/src/client/common_client/impl/iface.h index 5fa14e50f12..cd7bea247bc 100644 --- a/src/client/common_client/impl/iface.h +++ b/src/client/common_client/impl/iface.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/src/client/impl/internal/retry/retry.h b/src/client/impl/internal/retry/retry.h index 1228796793c..6fe090409c8 100644 --- a/src/client/impl/internal/retry/retry.h +++ b/src/client/impl/internal/retry/retry.h @@ -4,6 +4,8 @@ #include #include +#include + #include #include #include @@ -111,4 +113,12 @@ class TRetryContextBase : TNonCopyable { } }; +template +class TRetryDeadlineHelper { +public: + static void SetDeadline(TClient::TSession& session, const TDeadline& deadline) { + session.SetPropagatedDeadline(deadline); + } +}; + } // namespace NYdb::NRetry diff --git a/src/client/impl/internal/retry/retry_async.h b/src/client/impl/internal/retry/retry_async.h index 3610ade8b2a..fbaa06df329 100644 --- a/src/client/impl/internal/retry/retry_async.h +++ b/src/client/impl/internal/retry/retry_async.h @@ -112,7 +112,7 @@ class TRetryWithoutSession : public TRetryContext { }; template > -class TRetryWithSession : public TRetryContext { +class TRetryWithSession : public TRetryContext, public TRetryDeadlineHelper { using TRetryContextAsync = TRetryContext; using TStatusType = typename TRetryContextAsync::TStatusType; using TSession = typename TClient::TSession; @@ -120,20 +120,25 @@ class TRetryWithSession : public TRetryContext { using TAsyncCreateSessionResult = typename TClient::TAsyncCreateSessionResult; private: - TOperation Operation_; + const TOperation Operation_; + const TDeadline Deadline_; std::optional Session_; public: explicit TRetryWithSession( const TClient& client, TOperation&& operation, const TRetryOperationSettings& settings) : TRetryContextAsync(client, settings) - , Operation_(operation) + , Operation_(std::move(operation)) + , Deadline_(TDeadline::AfterDuration(this->Settings_.MaxTimeout_)) {} void Retry() override { TIntrusivePtr self(this); if (!Session_) { - auto settings = TCreateSessionSettings().ClientTimeout(this->Settings_.GetSessionClientTimeout_); + auto settings = TCreateSessionSettings() + .ClientTimeout(this->Settings_.GetSessionClientTimeout_) + .Deadline(Deadline_); + this->Client_.GetSession(settings).Subscribe( [self](const TAsyncCreateSessionResult& resultFuture) { try { @@ -143,6 +148,7 @@ class TRetryWithSession : public TRetryContext { } self->Session_ = result.GetSession(); + TRetryDeadlineHelper::SetDeadline(*self->Session_, self->Deadline_); self->DoRunOperation(self); } catch (...) { return TRetryContextAsync::HandleExceptionAsync(self, std::current_exception()); diff --git a/src/client/impl/internal/retry/retry_sync.h b/src/client/impl/internal/retry/retry_sync.h index 01d5fc80f0f..beefcb27714 100644 --- a/src/client/impl/internal/retry/retry_sync.h +++ b/src/client/impl/internal/retry/retry_sync.h @@ -1,9 +1,10 @@ #pragma once -#include #include #include +#include + namespace NYdb::inline V3::NRetry::Sync { template @@ -81,18 +82,20 @@ class TRetryWithoutSession : public TRetryContext { }; template> -class TRetryWithSession : public TRetryContext { +class TRetryWithSession : public TRetryContext, public TRetryDeadlineHelper { using TSession = typename TClient::TSession; using TCreateSessionSettings = typename TClient::TCreateSessionSettings; private: const TOperation& Operation_; + const TDeadline Deadline_; std::optional Session_; public: TRetryWithSession(TClient& client, const TOperation& operation, const TRetryOperationSettings& settings) : TRetryContext(client, settings) , Operation_(operation) + , Deadline_(TDeadline::AfterDuration(this->Settings_.MaxTimeout_)) {} protected: @@ -100,10 +103,14 @@ class TRetryWithSession : public TRetryContext { std::optional status; if (!Session_) { - auto settings = TCreateSessionSettings().ClientTimeout(this->Settings_.GetSessionClientTimeout_); + auto settings = TCreateSessionSettings() + .ClientTimeout(this->Settings_.GetSessionClientTimeout_) + .Deadline(Deadline_); + auto sessionResult = this->Client_.GetSession(settings).GetValueSync(); if (sessionResult.IsSuccess()) { Session_ = sessionResult.GetSession(); + TRetryDeadlineHelper::SetDeadline(*Session_, Deadline_); } status = TStatusType(TStatus(sessionResult)); } diff --git a/src/client/impl/internal/rpc_request_settings/settings.h b/src/client/impl/internal/rpc_request_settings/settings.h index 18269f18d63..a63ddf65329 100644 --- a/src/client/impl/internal/rpc_request_settings/settings.h +++ b/src/client/impl/internal/rpc_request_settings/settings.h @@ -3,7 +3,7 @@ #include #include -#include +#include namespace NYdb::inline V3 { @@ -22,7 +22,9 @@ struct TRpcRequestSettings { std::string TraceParent; template - static TRpcRequestSettings Make(const TRequestSettings& settings, const TEndpointKey& preferredEndpoint = {}, TEndpointPolicy endpointPolicy = TEndpointPolicy::UsePreferredEndpointOptionally) { + static TRpcRequestSettings Make(const TRequestSettings& settings, + const TEndpointKey& preferredEndpoint = {}, + TEndpointPolicy endpointPolicy = TEndpointPolicy::UsePreferredEndpointOptionally) { TRpcRequestSettings rpcSettings; rpcSettings.TraceId = settings.TraceId_; rpcSettings.RequestType = settings.RequestType_; @@ -31,9 +33,16 @@ struct TRpcRequestSettings { rpcSettings.PreferredEndpoint = preferredEndpoint; rpcSettings.EndpointPolicy = endpointPolicy; rpcSettings.UseAuth = true; - rpcSettings.Deadline = NYdb::TDeadline::AfterDuration(settings.ClientTimeout_); + rpcSettings.Deadline = std::min(settings.Deadline_, NYdb::TDeadline::AfterDuration(settings.ClientTimeout_)); return rpcSettings; } + + TRpcRequestSettings& TryUpdateDeadline(const std::optional& deadline) { + if (deadline) { + Deadline = std::min(Deadline, *deadline); + } + return *this; + } }; } // namespace NYdb diff --git a/src/client/impl/session/kqp_session_common.cpp b/src/client/impl/session/kqp_session_common.cpp index fc0fe64ef3b..fedc32358f5 100644 --- a/src/client/impl/session/kqp_session_common.cpp +++ b/src/client/impl/session/kqp_session_common.cpp @@ -168,6 +168,8 @@ void TKqpSessionCommon::CloseFromServer(std::weak_ptr client) no std::function TKqpSessionCommon::GetSmartDeleter(std::shared_ptr client) { return [client](TKqpSessionCommon* sessionImpl) { + sessionImpl->PropagatedDeadline_ = std::nullopt; + switch (sessionImpl->GetState()) { case TKqpSessionCommon::S_STANDALONE: case TKqpSessionCommon::S_BROKEN: diff --git a/src/client/impl/session/kqp_session_common.h b/src/client/impl/session/kqp_session_common.h index cfac2b6e043..225d8646df3 100644 --- a/src/client/impl/session/kqp_session_common.h +++ b/src/client/impl/session/kqp_session_common.h @@ -69,6 +69,9 @@ class TKqpSessionCommon : public TEndpointObj { // Called asynchronously from grpc thread. void CloseFromServer(std::weak_ptr client) noexcept; +public: + std::optional PropagatedDeadline_; + protected: TAdaptiveLock Lock_; diff --git a/src/client/query/client.cpp b/src/client/query/client.cpp index ed5122c327f..9ce7b4343f6 100644 --- a/src/client/query/client.cpp +++ b/src/client/query/client.cpp @@ -99,8 +99,9 @@ class TQueryClient::TImpl: public TClientImplCommon, public } NThreading::TFuture ExecuteScript(const std::string& script, const std::optional& params, const TExecuteScriptSettings& settings) { - using namespace Ydb::Query; - auto request = MakeOperationRequest(settings); + auto rpcSettings = TRpcRequestSettings::Make(settings); + + auto request = MakeOperationRequest(settings); request.set_exec_mode(::Ydb::Query::ExecMode(settings.ExecMode_)); request.set_stats_mode(::Ydb::Query::StatsMode(settings.StatsMode_)); request.set_pool_id(TStringType{settings.ResourcePool_}); @@ -131,12 +132,12 @@ class TQueryClient::TImpl: public TClientImplCommon, public } }; - Connections_->Run( + Connections_->Run( std::move(request), responseCb, - &V1::QueryService::Stub::AsyncExecuteScript, + &Ydb::Query::V1::QueryService::Stub::AsyncExecuteScript, DbDriverState_, - TRpcRequestSettings::Make(settings)); + rpcSettings); return promise.GetFuture(); } @@ -148,8 +149,13 @@ class TQueryClient::TImpl: public TClientImplCommon, public return FetchScriptResultsImpl(std::move(request), settings); } - TAsyncStatus RollbackTransaction(const std::string& txId, const NYdb::NQuery::TRollbackTxSettings& settings, const TSession& session) { - using namespace Ydb::Query; + TAsyncStatus RollbackTransaction(const std::string& txId, + const NYdb::NQuery::TRollbackTxSettings& settings, + const TSession& session) + { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeRequest(); request.set_session_id(TStringType{session.GetId()}); request.set_tx_id(TStringType{txId}); @@ -174,19 +180,23 @@ class TQueryClient::TImpl: public TClientImplCommon, public } }; - Connections_->Run( + Connections_->Run( std::move(request), responseCb, - &V1::QueryService::Stub::AsyncRollbackTransaction, + &Ydb::Query::V1::QueryService::Stub::AsyncRollbackTransaction, DbDriverState_, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey())); + rpcSettings); return promise.GetFuture(); } - TAsyncCommitTransactionResult CommitTransaction(const std::string& txId, const NYdb::NQuery::TCommitTxSettings& settings, const TSession& session) { - using namespace Ydb::Query; - auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()); + TAsyncCommitTransactionResult CommitTransaction(const std::string& txId, + const NYdb::NQuery::TCommitTxSettings& settings, + const TSession& session) + { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeRequest(); request.set_session_id(TStringType{session.GetId()}); request.set_tx_id(TStringType{txId}); @@ -212,10 +222,10 @@ class TQueryClient::TImpl: public TClientImplCommon, public } }; - Connections_->Run( + Connections_->Run( std::move(request), responseCb, - &V1::QueryService::Stub::AsyncCommitTransaction, + &Ydb::Query::V1::QueryService::Stub::AsyncCommitTransaction, DbDriverState_, rpcSettings); @@ -223,10 +233,12 @@ class TQueryClient::TImpl: public TClientImplCommon, public } TAsyncBeginTransactionResult BeginTransaction(const TTxSettings& txSettings, - const TBeginTxSettings& settings, const TSession& session) + const TBeginTxSettings& settings, + const TSession& session) { - using namespace Ydb::Query; - auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()); + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeRequest(); request.set_session_id(TStringType{session.GetId()}); SetTxSettings(txSettings, request.mutable_tx_settings()); @@ -254,10 +266,10 @@ class TQueryClient::TImpl: public TClientImplCommon, public } }; - Connections_->Run( + Connections_->Run( std::move(request), responseCb, - &V1::QueryService::Stub::AsyncBeginTransaction, + &Ydb::Query::V1::QueryService::Stub::AsyncBeginTransaction, DbDriverState_, rpcSettings); @@ -349,7 +361,6 @@ class TQueryClient::TImpl: public TClientImplCommon, public NThreading::TPromise promise, const std::string& endpoint, std::shared_ptr client) { - using TStreamProcessorPtr = TSession::TImpl::TStreamProcessorPtr; Ydb::Query::AttachSessionRequest request; const auto sessionId = resp->session_id(); request.set_session_id(sessionId); @@ -366,7 +377,7 @@ class TQueryClient::TImpl: public TClientImplCommon, public Ydb::Query::SessionState> ( std::move(request), - [args] (TPlainStatus status, TStreamProcessorPtr processor) mutable { + [args] (TPlainStatus status, TSession::TImpl::TStreamProcessorPtr processor) mutable { if (processor) { TSession::TImpl::MakeImplAsync(processor, args); } else { @@ -380,8 +391,6 @@ class TQueryClient::TImpl: public TClientImplCommon, public } TAsyncCreateSessionResult CreateAttachedSession(const TRpcRequestSettings& rpcSettings) { - using namespace Ydb::Query; - Ydb::Query::CreateSessionRequest request; auto promise = NThreading::NewPromise(); @@ -404,10 +413,10 @@ class TQueryClient::TImpl: public TClientImplCommon, public } }; - Connections_->Run( + Connections_->Run( std::move(request), extractor, - &V1::QueryService::Stub::AsyncCreateSession, + &Ydb::Query::V1::QueryService::Stub::AsyncCreateSession, DbDriverState_, rpcSettings); @@ -415,14 +424,12 @@ class TQueryClient::TImpl: public TClientImplCommon, public } TAsyncCreateSessionResult GetSession(const TCreateSessionSettings& settings) { - auto rpcSettings = TRpcRequestSettings::Make(settings); - class TQueryClientGetSessionCtx : public NSessionPool::IGetSessionCtx { public: - TQueryClientGetSessionCtx(std::shared_ptr client, const TRpcRequestSettings& settings) + TQueryClientGetSessionCtx(std::shared_ptr client, const TCreateSessionSettings& settings) : Promise(NThreading::NewPromise()) , Client(client) - , RpcSettings(settings) + , RpcSettings(TRpcRequestSettings::Make(settings)) {} TAsyncCreateSessionResult GetFuture() { @@ -477,9 +484,10 @@ class TQueryClient::TImpl: public TClientImplCommon, public const TRpcRequestSettings RpcSettings; }; - auto ctx = std::make_unique(shared_from_this(), rpcSettings); + auto ctx = std::make_unique(shared_from_this(), settings); auto future = ctx->GetFuture(); SessionPool_.GetSession(std::move(ctx)); + return future; } @@ -685,6 +693,14 @@ TSession::TSession(std::shared_ptr client, TSession::TImpl* , SessionImpl_(session, TKqpSessionCommon::GetSmartDeleter(client)) {} +const std::optional& TSession::GetPropagatedDeadline() const { + return SessionImpl_->PropagatedDeadline_; +} + +void TSession::SetPropagatedDeadline(const TDeadline& deadline) { + SessionImpl_->PropagatedDeadline_ = deadline; +} + const std::string& TSession::GetId() const { return SessionImpl_->GetId(); } diff --git a/src/client/query/impl/client_session.cpp b/src/client/query/impl/client_session.cpp index abc6b04a128..c905ad82fcb 100644 --- a/src/client/query/impl/client_session.cpp +++ b/src/client/query/impl/client_session.cpp @@ -105,17 +105,14 @@ TSession::TImpl::TImpl(TStreamProcessorPtr ptr, const std::string& sessionId, co } } -TSession::TImpl::~TImpl() -{ +TSession::TImpl::~TImpl() { if (StreamProcessor_) { StreamProcessor_->Cancel(); } SessionHolder->WaitAndLock(); } -void TSession::TImpl::MakeImplAsync(TStreamProcessorPtr ptr, - std::shared_ptr args) -{ +void TSession::TImpl::MakeImplAsync(TStreamProcessorPtr ptr, std::shared_ptr args) { auto resp = std::make_shared(); ptr->Read(resp.get(), [args, resp, ptr](NYdbGrpc::TGrpcStatus grpcStatus) mutable { if (grpcStatus.GRpcStatusCode != grpc::StatusCode::OK) { @@ -137,9 +134,7 @@ void TSession::TImpl::MakeImplAsync(TStreamProcessorPtr ptr, }); } -void TSession::TImpl::NewSmartShared(TStreamProcessorPtr ptr, - std::shared_ptr args, NYdb::TStatus st) -{ +void TSession::TImpl::NewSmartShared(TStreamProcessorPtr ptr, std::shared_ptr args, NYdb::TStatus st) { args->Promise.SetValue( TCreateSessionResult( std::move(st), diff --git a/src/client/query/impl/client_session.h b/src/client/query/impl/client_session.h index 2a5c680cf1b..d36d75c8a63 100644 --- a/src/client/query/impl/client_session.h +++ b/src/client/query/impl/client_session.h @@ -32,6 +32,7 @@ class TSession::TImpl : public TKqpSessionCommon { using TResponse = Ydb::Query::SessionState; using TStreamProcessorPtr = NYdbGrpc::IStreamRequestReadProcessor::TPtr; + TImpl(TStreamProcessorPtr ptr, const std::string& id, const std::string& endpoint, std::weak_ptr client); ~TImpl(); diff --git a/src/client/query/impl/exec_query.cpp b/src/client/query/impl/exec_query.cpp index f6707fce1cf..2f2f69467f9 100644 --- a/src/client/query/impl/exec_query.cpp +++ b/src/client/query/impl/exec_query.cpp @@ -287,6 +287,7 @@ class TExecQueryInternal { { auto rpcSettings = TRpcRequestSettings::Make(settings); if (session.has_value()) { + rpcSettings.TryUpdateDeadline(session->GetPropagatedDeadline()); rpcSettings.PreferredEndpoint = TEndpointKey(GetNodeIdFromSession(session->GetId())); } diff --git a/src/client/table/impl/table_client.cpp b/src/client/table/impl/table_client.cpp index f07e93ebe70..18c536aff95 100644 --- a/src/client/table/impl/table_client.cpp +++ b/src/client/table/impl/table_client.cpp @@ -286,19 +286,17 @@ void TTableClient::TImpl::StartPeriodicHostScanTask() { } TAsyncCreateSessionResult TTableClient::TImpl::GetSession(const TCreateSessionSettings& settings) { - auto rpcSettings = TRpcRequestSettings::Make(settings); - rpcSettings.Header.push_back({NYdb::YDB_CLIENT_CAPABILITIES, NYdb::YDB_CLIENT_CAPABILITY_SESSION_BALANCER}); - class TTableClientGetSessionCtx : public NSessionPool::IGetSessionCtx { public: TTableClientGetSessionCtx(std::shared_ptr client, - const TCreateSessionSettings& createSessionSettings, - const TRpcRequestSettings& rpcSettings) + const TCreateSessionSettings& createSessionSettings) : Promise(NewPromise()) , Client(client) , CreateSessionSettings(createSessionSettings) - , RpcSettings(rpcSettings) - {} + , RpcSettings(TRpcRequestSettings::Make(createSessionSettings)) + { + RpcSettings.Header.push_back({NYdb::YDB_CLIENT_CAPABILITIES, NYdb::YDB_CLIENT_CAPABILITY_SESSION_BALANCER}); + } TAsyncCreateSessionResult GetFuture() { return Promise.GetFuture(); @@ -353,10 +351,10 @@ TAsyncCreateSessionResult TTableClient::TImpl::GetSession(const TCreateSessionSe NThreading::TPromise Promise; std::shared_ptr Client; const TCreateSessionSettings CreateSessionSettings; - const TRpcRequestSettings RpcSettings; + TRpcRequestSettings RpcSettings; }; - auto ctx = std::make_unique(shared_from_this(), settings, rpcSettings); + auto ctx = std::make_unique(shared_from_this(), settings); auto future = ctx->GetFuture(); SessionPool_.GetSession(std::move(ctx)); return future; @@ -415,6 +413,9 @@ TAsyncCreateSessionResult TTableClient::TImpl::CreateSession(const TCreateSessio } TAsyncKeepAliveResult TTableClient::TImpl::KeepAlive(const TSession::TImpl* session, const TKeepAliveSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session->GetEndpointKey()) + .TryUpdateDeadline(session->PropagatedDeadline_); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session->GetId()}); @@ -449,29 +450,29 @@ TAsyncKeepAliveResult TTableClient::TImpl::KeepAlive(const TSession::TImpl* sess &Ydb::Table::V1::TableService::Stub::AsyncKeepAlive, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings, session->GetEndpointKey()) - ); + rpcSettings + ); return keepAliveResultPromise.GetFuture(); } -TFuture TTableClient::TImpl::CreateTable(Ydb::Table::CreateTableRequest&& request, const TCreateTableSettings& settings) +TFuture TTableClient::TImpl::CreateTable(Ydb::Table::CreateTableRequest&& request, const TRpcRequestSettings& rpcSettings) { return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncCreateTable, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TFuture TTableClient::TImpl::AlterTable(Ydb::Table::AlterTableRequest&& request, const TAlterTableSettings& settings) +TFuture TTableClient::TImpl::AlterTable(Ydb::Table::AlterTableRequest&& request, const TRpcRequestSettings& rpcSettings) { return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncAlterTable, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TAsyncOperation TTableClient::TImpl::AlterTableLong(Ydb::Table::AlterTableRequest&& request, const TAlterTableSettings& settings) +TAsyncOperation TTableClient::TImpl::AlterTableLong(Ydb::Table::AlterTableRequest&& request, const TRpcRequestSettings& rpcSettings) { using Ydb::Table::V1::TableService; using Ydb::Table::AlterTableRequest; @@ -479,53 +480,87 @@ TAsyncOperation TTableClient::TImpl::AlterTableLong(Ydb::Table::AlterTableReques return RunOperation( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncAlterTable, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TFuture TTableClient::TImpl::CopyTable(const std::string& sessionId, const std::string& src, const std::string& dst, - const TCopyTableSettings& settings) +TFuture TTableClient::TImpl::CopyTable(const TSession& session, const std::string& src, const std::string& dst, const TCopyTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{sessionId}); + request.set_session_id(TStringType{session.GetId()}); request.set_source_path(TStringType{src}); request.set_destination_path(TStringType{dst}); return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncCopyTable, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TFuture TTableClient::TImpl::CopyTables(Ydb::Table::CopyTablesRequest&& request, const TCopyTablesSettings& settings) +TFuture TTableClient::TImpl::CopyTables(const TSession& session, const std::vector& copyItems, const TCopyTablesSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + + auto request = MakeOperationRequest(settings); + request.set_session_id(TStringType{session.GetId()}); + + for (const auto& item: copyItems) { + auto add = request.add_tables(); + add->set_source_path(TStringType{item.SourcePath()}); + add->set_destination_path(TStringType{item.DestinationPath()}); + add->set_omit_indexes(item.OmitIndexes()); + } + return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncCopyTables, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TFuture TTableClient::TImpl::RenameTables(Ydb::Table::RenameTablesRequest&& request, const TRenameTablesSettings& settings) +TFuture TTableClient::TImpl::RenameTables(const TSession& session, const std::vector& renameItems, const TRenameTablesSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + + auto request = MakeOperationRequest(settings); + request.set_session_id(TStringType{session.GetId()}); + + for (const auto& item: renameItems) { + auto add = request.add_tables(); + add->set_source_path(TStringType{item.SourcePath()}); + add->set_destination_path(TStringType{item.DestinationPath()}); + add->set_replace_destination(item.ReplaceDestination()); + } + return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncRenameTables, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TFuture TTableClient::TImpl::DropTable(const std::string& sessionId, const std::string& path, const TDropTableSettings& settings) { +TFuture TTableClient::TImpl::DropTable(const TSession& session, const std::string& path, const TDropTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{sessionId}); + request.set_session_id(TStringType{session.GetId()}); request.set_path(TStringType{path}); return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncDropTable, - TRpcRequestSettings::Make(settings)); + rpcSettings); } -TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const std::string& sessionId, const std::string& path, const TDescribeTableSettings& settings) { +TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const TSession& session, const std::string& path, const TDescribeTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{sessionId}); + request.set_session_id(TStringType{session.GetId()}); request.set_path(TStringType{path}); if (settings.WithKeyShardBoundary_) { request.set_include_shard_key_bounds(true); @@ -566,18 +601,23 @@ TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const std::string& &Ydb::Table::V1::TableService::Stub::AsyncDescribeTable, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings)); + rpcSettings); return promise.GetFuture(); } -TAsyncDescribeExternalDataSourceResult TTableClient::TImpl::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) { +TAsyncDescribeExternalDataSourceResult TTableClient::TImpl::DescribeExternalDataSource(const TSession& session, + const std::string& path, const TDescribeExternalDataSourceSettings& settings) +{ + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_path(path); auto promise = NewPromise(); - auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable { + auto extractor = [promise](google::protobuf::Any* any, TPlainStatus status) mutable { Ydb::Table::DescribeExternalDataSourceResult proto; if (any) { any->UnpackTo(&proto); @@ -593,19 +633,24 @@ TAsyncDescribeExternalDataSourceResult TTableClient::TImpl::DescribeExternalData &Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalDataSource, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings) + rpcSettings ); return promise.GetFuture(); } -TAsyncDescribeExternalTableResult TTableClient::TImpl::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) { +TAsyncDescribeExternalTableResult TTableClient::TImpl::DescribeExternalTable(const TSession& session, + const std::string& path, const TDescribeExternalTableSettings& settings) +{ + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_path(path); auto promise = NewPromise(); - auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable { + auto extractor = [promise](google::protobuf::Any* any, TPlainStatus status) mutable { Ydb::Table::DescribeExternalTableResult proto; if (any) { any->UnpackTo(&proto); @@ -621,21 +666,22 @@ TAsyncDescribeExternalTableResult TTableClient::TImpl::DescribeExternalTable(con &Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalTable, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings) + rpcSettings ); return promise.GetFuture(); } -TAsyncDescribeSystemViewResult TTableClient::TImpl::DescribeSystemView(const std::string& path, - const TDescribeSystemViewSettings& settings) -{ +TAsyncDescribeSystemViewResult TTableClient::TImpl::DescribeSystemView(const TSession& session, const std::string& path, const TDescribeSystemViewSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_path(path); auto promise = NewPromise(); - auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable { + auto extractor = [promise](google::protobuf::Any* any, TPlainStatus status) mutable { Ydb::Table::DescribeSystemViewResult proto; if (any) { any->UnpackTo(&proto); @@ -651,7 +697,7 @@ TAsyncDescribeSystemViewResult TTableClient::TImpl::DescribeSystemView(const std &Ydb::Table::V1::TableService::Stub::AsyncDescribeSystemView, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings) + rpcSettings ); return promise.GetFuture(); @@ -660,6 +706,9 @@ TAsyncDescribeSystemViewResult TTableClient::TImpl::DescribeSystemView(const std TAsyncPrepareQueryResult TTableClient::TImpl::PrepareDataQuery(const TSession& session, const std::string& query, const TPrepareDataQuerySettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session.GetId()}); request.set_yql_text(TStringType{query}); @@ -696,28 +745,35 @@ TAsyncPrepareQueryResult TTableClient::TImpl::PrepareDataQuery(const TSession& s &Ydb::Table::V1::TableService::Stub::AsyncPrepareDataQuery, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) - ); + rpcSettings + ); return promise.GetFuture(); } -TAsyncStatus TTableClient::TImpl::ExecuteSchemeQuery(const std::string& sessionId, const std::string& query, +TAsyncStatus TTableClient::TImpl::ExecuteSchemeQuery(const TSession& session, const std::string& query, const TExecSchemeQuerySettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{sessionId}); + request.set_session_id(TStringType{session.GetId()}); request.set_yql_text(TStringType{query}); return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncExecuteSchemeQuery, - TRpcRequestSettings::Make(settings)); + rpcSettings + ); } TAsyncBeginTransactionResult TTableClient::TImpl::BeginTransaction(const TSession& session, const TTxSettings& txSettings, const TBeginTxSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session.GetId()}); SetTxSettings(txSettings, request.mutable_tx_settings()); @@ -744,8 +800,8 @@ TAsyncBeginTransactionResult TTableClient::TImpl::BeginTransaction(const TSessio &Ydb::Table::V1::TableService::Stub::AsyncBeginTransaction, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) - ); + rpcSettings + ); return promise.GetFuture(); } @@ -753,6 +809,9 @@ TAsyncBeginTransactionResult TTableClient::TImpl::BeginTransaction(const TSessio TAsyncCommitTransactionResult TTableClient::TImpl::CommitTransaction(const TSession& session, const std::string& txId, const TCommitTxSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session.GetId()}); request.set_tx_id(TStringType{txId}); @@ -782,8 +841,8 @@ TAsyncCommitTransactionResult TTableClient::TImpl::CommitTransaction(const TSess &Ydb::Table::V1::TableService::Stub::AsyncCommitTransaction, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) - ); + rpcSettings + ); return promise.GetFuture(); } @@ -791,6 +850,9 @@ TAsyncCommitTransactionResult TTableClient::TImpl::CommitTransaction(const TSess TAsyncStatus TTableClient::TImpl::RollbackTransaction(const TSession& session, const std::string& txId, const TRollbackTxSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session.GetId()}); request.set_tx_id(TStringType{txId}); @@ -798,13 +860,16 @@ TAsyncStatus TTableClient::TImpl::RollbackTransaction(const TSession& session, c return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncRollbackTransaction, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) - ); + rpcSettings + ); } TAsyncExplainDataQueryResult TTableClient::TImpl::ExplainDataQuery(const TSession& session, const std::string& query, const TExplainDataQuerySettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{session.GetId()}); request.set_yql_text(TStringType{query}); @@ -835,8 +900,8 @@ TAsyncExplainDataQueryResult TTableClient::TImpl::ExplainDataQuery(const TSessio &Ydb::Table::V1::TableService::Stub::AsyncExplainDataQuery, DbDriverState_, INITIAL_DEFERRED_CALL_DELAY, - TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) - ); + rpcSettings + ); return promise.GetFuture(); } @@ -847,12 +912,15 @@ void TTableClient::TImpl::SetTypedValue(Ydb::TypedValue* protoValue, const TValu } NThreading::TFuture> TTableClient::TImpl::ReadTable( - const std::string& sessionId, + const TSession& session, const std::string& path, const TReadTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings, session.SessionImpl_->GetEndpointKey()) + .TryUpdateDeadline(session.GetPropagatedDeadline()); + auto request = MakeRequest(); - request.set_session_id(TStringType{sessionId}); + request.set_session_id(TStringType{session.GetId()}); request.set_path(TStringType{path}); request.set_ordered(settings.Ordered_); if (settings.RowLimit_) { @@ -910,7 +978,7 @@ NThreading::TFutureGetEndpointKey()) + .TryUpdateDeadline(sessionImpl->PropagatedDeadline_); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{sessionImpl->GetId()}); return RunSimple( std::move(request), &Ydb::Table::V1::TableService::Stub::AsyncDeleteSession, - TRpcRequestSettings::Make(settings, sessionImpl->GetEndpointKey()) - ); + rpcSettings + ); } TAsyncStatus TTableClient::TImpl::CloseInternal(const TKqpSessionCommon* sessionImpl) { diff --git a/src/client/table/impl/table_client.h b/src/client/table/impl/table_client.h index 68a20de3d9c..8fe71287f36 100644 --- a/src/client/table/impl/table_client.h +++ b/src/client/table/impl/table_client.h @@ -60,18 +60,18 @@ class TTableClient::TImpl: public TClientImplCommon, public bool standalone); TAsyncKeepAliveResult KeepAlive(const TSession::TImpl* session, const TKeepAliveSettings& settings); - TFuture CreateTable(Ydb::Table::CreateTableRequest&& request, const TCreateTableSettings& settings); - TFuture AlterTable(Ydb::Table::AlterTableRequest&& request, const TAlterTableSettings& settings); - TAsyncOperation AlterTableLong(Ydb::Table::AlterTableRequest&& request, const TAlterTableSettings& settings); - TFuture CopyTable(const std::string& sessionId, const std::string& src, const std::string& dst, - const TCopyTableSettings& settings); - TFuture CopyTables(Ydb::Table::CopyTablesRequest&& request, const TCopyTablesSettings& settings); - TFuture RenameTables(Ydb::Table::RenameTablesRequest&& request, const TRenameTablesSettings& settings); - TFuture DropTable(const std::string& sessionId, const std::string& path, const TDropTableSettings& settings); - TAsyncDescribeTableResult DescribeTable(const std::string& sessionId, const std::string& path, const TDescribeTableSettings& settings); - TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings); - TAsyncDescribeExternalTableResult DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings); - TAsyncDescribeSystemViewResult DescribeSystemView(const std::string& path, const TDescribeSystemViewSettings& settings); + TFuture CreateTable(Ydb::Table::CreateTableRequest&& request, const TRpcRequestSettings& rpcSettings); + TFuture AlterTable(Ydb::Table::AlterTableRequest&& request, const TRpcRequestSettings& rpcSettings); + TAsyncOperation AlterTableLong(Ydb::Table::AlterTableRequest&& request, const TRpcRequestSettings& rpcSettings); + + TFuture CopyTable(const TSession& session, const std::string& src, const std::string& dst, const TCopyTableSettings& settings); + TFuture CopyTables(const TSession& session, const std::vector& copyItems, const TCopyTablesSettings& settings); + TFuture RenameTables(const TSession& session, const std::vector& renameItems, const TRenameTablesSettings& settings); + TFuture DropTable(const TSession& session, const std::string& path, const TDropTableSettings& settings); + TAsyncDescribeTableResult DescribeTable(const TSession& session, const std::string& path, const TDescribeTableSettings& settings); + TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const TSession& session, const std::string& path, const TDescribeExternalDataSourceSettings& settings); + TAsyncDescribeExternalTableResult DescribeExternalTable(const TSession& session, const std::string& path, const TDescribeExternalTableSettings& settings); + TAsyncDescribeSystemViewResult DescribeSystemView(const TSession& session, const std::string& path, const TDescribeSystemViewSettings& settings); template TAsyncDataQueryResult ExecuteDataQuery(TSession& session, const std::string& query, const TTxControl& txControl, @@ -110,7 +110,7 @@ class TTableClient::TImpl: public TClientImplCommon, public TAsyncPrepareQueryResult PrepareDataQuery(const TSession& session, const std::string& query, const TPrepareDataQuerySettings& settings); - TAsyncStatus ExecuteSchemeQuery(const std::string& sessionId, const std::string& query, + TAsyncStatus ExecuteSchemeQuery(const TSession& session, const std::string& query, const TExecSchemeQuerySettings& settings); TAsyncBeginTransactionResult BeginTransaction(const TSession& session, const TTxSettings& txSettings, @@ -126,7 +126,7 @@ class TTableClient::TImpl: public TClientImplCommon, public static void SetTypedValue(Ydb::TypedValue* protoValue, const TValue& value); NThreading::TFuture> ReadTable( - const std::string& sessionId, + const TSession& session, const std::string& path, const TReadTableSettings& settings); TAsyncReadRowsResult ReadRows(const std::string& path, TValue&& keys, const std::vector& columns, const TReadRowsSettings& settings); diff --git a/src/client/table/table.cpp b/src/client/table/table.cpp index 0731bf8a98d..c67eba0975f 100644 --- a/src/client/table/table.cpp +++ b/src/client/table/table.cpp @@ -1677,6 +1677,9 @@ TSession::TSession(std::shared_ptr client, std::shared_ptr< TFuture TSession::CreateTable(const std::string& path, TTableDescription&& tableDesc, const TCreateTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(GetPropagatedDeadline()); + auto request = MakeOperationRequest(settings); request.set_session_id(TStringType{SessionImpl_->GetId()}); request.set_path(TStringType{path}); @@ -1687,7 +1690,7 @@ TFuture TSession::CreateTable(const std::string& path, TTableDescriptio return InjectSessionStatusInterception( SessionImpl_, - Client_->CreateTable(std::move(request), settings), + Client_->CreateTable(std::move(request), rpcSettings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } @@ -1695,7 +1698,7 @@ TFuture TSession::CreateTable(const std::string& path, TTableDescriptio TFuture TSession::DropTable(const std::string& path, const TDropTableSettings& settings) { return InjectSessionStatusInterception( SessionImpl_, - Client_->DropTable(SessionImpl_->GetId(), path, settings), + Client_->DropTable(*this, path, settings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } @@ -1793,57 +1796,43 @@ static Ydb::Table::AlterTableRequest MakeAlterTableProtoRequest( } TAsyncStatus TSession::AlterTable(const std::string& path, const TAlterTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(GetPropagatedDeadline()); + auto request = MakeAlterTableProtoRequest(path, settings, SessionImpl_->GetId()); return InjectSessionStatusInterception( SessionImpl_, - Client_->AlterTable(std::move(request), settings), + Client_->AlterTable(std::move(request), rpcSettings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } TAsyncOperation TSession::AlterTableLong(const std::string& path, const TAlterTableSettings& settings) { + auto rpcSettings = TRpcRequestSettings::Make(settings) + .TryUpdateDeadline(GetPropagatedDeadline()); + auto request = MakeAlterTableProtoRequest(path, settings, SessionImpl_->GetId()); return InjectSessionStatusInterception( SessionImpl_, - Client_->AlterTableLong(std::move(request), settings), + Client_->AlterTableLong(std::move(request), rpcSettings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } TAsyncStatus TSession::RenameTables(const std::vector& renameItems, const TRenameTablesSettings& settings) { - auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{SessionImpl_->GetId()}); - - for (const auto& item: renameItems) { - auto add = request.add_tables(); - add->set_source_path(TStringType{item.SourcePath()}); - add->set_destination_path(TStringType{item.DestinationPath()}); - add->set_replace_destination(item.ReplaceDestination()); - } - return InjectSessionStatusInterception( SessionImpl_, - Client_->RenameTables(std::move(request), settings), + Client_->RenameTables(*this, renameItems, settings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } TAsyncStatus TSession::CopyTables(const std::vector& copyItems, const TCopyTablesSettings& settings) { - auto request = MakeOperationRequest(settings); - request.set_session_id(TStringType{SessionImpl_->GetId()}); - - for (const auto& item: copyItems) { - auto add = request.add_tables(); - add->set_source_path(TStringType{item.SourcePath()}); - add->set_destination_path(TStringType{item.DestinationPath()}); - add->set_omit_indexes(item.OmitIndexes()); - } - return InjectSessionStatusInterception( SessionImpl_, - Client_->CopyTables(std::move(request), settings), + Client_->CopyTables(*this, copyItems, settings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } @@ -1851,27 +1840,27 @@ TAsyncStatus TSession::CopyTables(const std::vector& copyItems, const TFuture TSession::CopyTable(const std::string& src, const std::string& dst, const TCopyTableSettings& settings) { return InjectSessionStatusInterception( SessionImpl_, - Client_->CopyTable(SessionImpl_->GetId(), src, dst, settings), + Client_->CopyTable(*this, src, dst, settings), false, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } TAsyncDescribeTableResult TSession::DescribeTable(const std::string& path, const TDescribeTableSettings& settings) { - return Client_->DescribeTable(SessionImpl_->GetId(), path, settings); + return Client_->DescribeTable(*this, path, settings); } TAsyncDescribeExternalDataSourceResult TSession::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) { - return Client_->DescribeExternalDataSource(path, settings); + return Client_->DescribeExternalDataSource(*this, path, settings); } TAsyncDescribeExternalTableResult TSession::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) { - return Client_->DescribeExternalTable(path, settings); + return Client_->DescribeExternalTable(*this, path, settings); } TAsyncDescribeSystemViewResult TSession::DescribeSystemView(const std::string& path, const TDescribeSystemViewSettings& settings) { - return Client_->DescribeSystemView(path, settings); + return Client_->DescribeSystemView(*this, path, settings); } TAsyncDataQueryResult TSession::ExecuteDataQuery(const std::string& query, const TTxControl& txControl, @@ -1929,7 +1918,7 @@ TAsyncPrepareQueryResult TSession::PrepareDataQuery(const std::string& query, co TAsyncStatus TSession::ExecuteSchemeQuery(const std::string& query, const TExecSchemeQuerySettings& settings) { return InjectSessionStatusInterception( SessionImpl_, - Client_->ExecuteSchemeQuery(SessionImpl_->GetId(), query, settings), + Client_->ExecuteSchemeQuery(*this, query, settings), true, GetMinTimeToTouch(Client_->Settings_.SessionPoolSettings_)); } @@ -1966,7 +1955,7 @@ TAsyncTablePartIterator TSession::ReadTable(const std::string& path, pair.second, pair.first.Endpoint) : nullptr, std::move(pair.first)) ); }; - Client_->ReadTable(SessionImpl_->GetId(), path, settings).Subscribe(readTableIteratorBuilder); + Client_->ReadTable(*this, path, settings).Subscribe(readTableIteratorBuilder); return InjectSessionStatusInterception( SessionImpl_, promise.GetFuture(), @@ -2006,6 +1995,14 @@ const std::string& TSession::GetId() const { return SessionImpl_->GetId(); } +const std::optional& TSession::GetPropagatedDeadline() const { + return SessionImpl_->PropagatedDeadline_; +} + +void TSession::SetPropagatedDeadline(const TDeadline& deadline) { + SessionImpl_->PropagatedDeadline_ = deadline; +} + //////////////////////////////////////////////////////////////////////////////// TTxControl::TTxControl(const TTransaction& tx) diff --git a/src/client/types/core_facility/core_facility.h b/src/client/types/core_facility/core_facility.h index 6d3a3035a58..98689e810f9 100644 --- a/src/client/types/core_facility/core_facility.h +++ b/src/client/types/core_facility/core_facility.h @@ -3,7 +3,7 @@ #include #include -#include +#include namespace NYdb::inline V3 { using TPeriodicCb = std::function; diff --git a/src/library/grpc/client/grpc_client_low.h b/src/library/grpc/client/grpc_client_low.h index 32fff617aee..37a09993368 100644 --- a/src/library/grpc/client/grpc_client_low.h +++ b/src/library/grpc/client/grpc_client_low.h @@ -4,7 +4,7 @@ #include -#include +#include #include #include diff --git a/src/library/time/time.cpp b/src/library/time/time.cpp index cb430141030..58f3a966179 100644 --- a/src/library/time/time.cpp +++ b/src/library/time/time.cpp @@ -1,4 +1,4 @@ -#include "time.h" +#include namespace NYdb::inline V3 { diff --git a/tests/unit/library/time/time_ut.cpp b/tests/unit/library/time/time_ut.cpp index 5c7890adef3..e6d08f1e8b3 100644 --- a/tests/unit/library/time/time_ut.cpp +++ b/tests/unit/library/time/time_ut.cpp @@ -1,4 +1,4 @@ -#include +#include #include From 7b9884612840b8275fce9264ac69839866846724 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 30 Dec 2025 13:31:01 +0000 Subject: [PATCH 7/9] Update import generation: 32 --- .github/import_generation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/import_generation.txt b/.github/import_generation.txt index f5c89552bd3..bb95160cb6e 100644 --- a/.github/import_generation.txt +++ b/.github/import_generation.txt @@ -1 +1 @@ -32 +33 From be6b67729db32401f34293efa07d362672b2558a Mon Sep 17 00:00:00 2001 From: Bulat Date: Tue, 30 Dec 2025 18:55:33 +0300 Subject: [PATCH 8/9] Update Dockerfile --- tests/slo_workloads/Dockerfile | 143 +++++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 24 deletions(-) diff --git a/tests/slo_workloads/Dockerfile b/tests/slo_workloads/Dockerfile index 088730c33e8..091ce23066d 100644 --- a/tests/slo_workloads/Dockerfile +++ b/tests/slo_workloads/Dockerfile @@ -1,31 +1,126 @@ -FROM ubuntu:22.04 AS build +FROM ubuntu:22.04 -ARG SRC_PATH -ARG BINARY_NAME -ARG REF="unknown" +ARG PRESET=release-test-clang +ARG REF=unknown -RUN apt-get update \ - && apt-get install -y --no-install-recommends python3 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# Install software-properties-common for add-apt-repository +RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test -COPY build/ /build/ -COPY certs/ /certs/ -COPY contrib/ /contrib/ -COPY library/cpp/ /library/cpp/ -COPY tools/ /tools/ -COPY util/ /util/ -COPY ydb/library/yverify_stream/ /ydb/library/yverify_stream/ -COPY ydb/public/api/ /ydb/public/api/ -COPY ydb/public/lib/protobuf/ /ydb/public/lib/protobuf/ -COPY ydb/public/lib/validation/ /ydb/public/lib/validation/ -COPY ydb/public/sdk/cpp/ /ydb/public/sdk/cpp/ +# Install C++ tools and libraries +RUN apt-get -y update && apt-get -y install \ + git gdb wget ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \ + rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \ + libbz2-dev liblz4-dev libdouble-conversion-dev libssl-dev libstdc++-13-dev gcc-13 g++-13 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* -COPY ./ya / +# Install CMake +ENV CMAKE_VERSION=3.27.7 +RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \ + -q -O cmake-install.sh \ + && chmod u+x cmake-install.sh \ + && ./cmake-install.sh --skip-license --prefix=/usr/local \ + && rm cmake-install.sh -RUN ./ya make -r -D REF=${REF} ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH} && cp ydb/public/sdk/cpp/tests/slo_workloads/${SRC_PATH}/${BINARY_NAME} /slo-workload-bin +# Install LLVM +ENV LLVM_VERSION=16 +RUN wget https://apt.llvm.org/llvm.sh && \ + chmod u+x llvm.sh && \ + ./llvm.sh ${LLVM_VERSION} && \ + rm llvm.sh -FROM ubuntu:22.04 +# Update alternatives to use clang-16 by default +RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \ + update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \ + update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000 + +# Update alternatives to use gcc-13 by default +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \ + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000 + +# Install abseil-cpp +ENV ABSEIL_CPP_VERSION=20230802.0 +ENV ABSEIL_CPP_INSTALL_DIR=/root/ydb_deps/absl +RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \ + tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${ABSEIL_CPP_INSTALL_DIR} && \ + rm -rf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz abseil-cpp-${ABSEIL_CPP_VERSION} + +# Install protobuf +ENV PROTOBUF_VERSION=3.21.12 +ENV PROTOBUF_INSTALL_DIR=/root/ydb_deps/protobuf +RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \ + tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${PROTOBUF_INSTALL_DIR} && \ + rm -rf protobuf-${PROTOBUF_VERSION}.tar.gz protobuf-${PROTOBUF_VERSION} + +# Install grpc +ENV GRPC_VERSION=1.54.3 +ENV GRPC_INSTALL_DIR=/root/ydb_deps/grpc +RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \ + tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_PREFIX_PATH="${ABSEIL_CPP_INSTALL_DIR};${PROTOBUF_INSTALL_DIR}" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \ + -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \ + -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \ + -DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \ + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${GRPC_INSTALL_DIR} && \ + rm -rf grpc-${GRPC_VERSION}.tar.gz grpc-${GRPC_VERSION} + +# Install base64 +ENV BASE64_VERSION=0.5.2 +ENV BASE64_INSTALL_DIR=/root/ydb_deps/base64 +RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \ + tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${BASE64_INSTALL_DIR} && \ + rm -rf base64-${BASE64_VERSION}.tar.gz base64-${BASE64_VERSION} + +# Install brotli +ENV BROTLI_VERSION=1.1.0 +ENV BROTLI_INSTALL_DIR=/root/ydb_deps/brotli +RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \ + tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${BROTLI_INSTALL_DIR} && \ + rm -rf brotli-${BROTLI_VERSION}.tar.gz brotli-${BROTLI_VERSION} + +# Install jwt-cpp +ENV JWT_CPP_VERSION=0.7.0 +ENV JWT_CPP_INSTALL_DIR=/root/ydb_deps/jwt-cpp +RUN wget -O jwt-cpp-${JWT_CPP_VERSION}.tar.gz https://github.com/Thalhammer/jwt-cpp/archive/refs/tags/v${JWT_CPP_VERSION}.tar.gz && \ + tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \ + mkdir build && cd build && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --config Release && \ + cmake --install . --config Release --prefix ${JWT_CPP_INSTALL_DIR} && \ + rm -rf jwt-cpp-${JWT_CPP_VERSION}.tar.gz jwt-cpp-${JWT_CPP_VERSION} + +# Install ccache 4.8.1 or above +ENV CCACHE_VERSION=4.8.1 +RUN wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ + && tar -xf ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \ + && cp ccache-${CCACHE_VERSION}-linux-x86_64/ccache /usr/local/bin/ \ + && rm -rf ccache-${CCACHE_VERSION}-linux-x86_64 ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz + +COPY . /ydb-cpp-sdk +WORKDIR /ydb-cpp-sdk +RUN rm -rf build + +RUN cmake -DSLO_BRANCH_REF=${REF} --preset ${PRESET} +RUN cmake --build --preset default --target slo-key-value -COPY --from=build /slo-workload-bin / -ENTRYPOINT ["/slo-workload-bin"] +ENTRYPOINT ["./build/tests/slo_workloads/key_value/slo-key-value"] From 8fc511257ee36dc8e1ae1fd2f7c845cdd9f6ee09 Mon Sep 17 00:00:00 2001 From: Bulat Date: Tue, 30 Dec 2025 18:56:15 +0300 Subject: [PATCH 9/9] Update .dockerignore --- tests/slo_workloads/.dockerignore | 35 +++++++------------------------ 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/tests/slo_workloads/.dockerignore b/tests/slo_workloads/.dockerignore index b0b001ba358..9e958bd1bf9 100644 --- a/tests/slo_workloads/.dockerignore +++ b/tests/slo_workloads/.dockerignore @@ -5,12 +5,17 @@ .gitattributes # IDE and editor files -.vscode -.idea +.idea/ +.vscode/ +.cache/ +.cursor/ +.cursorrules *.swp *.swo -*~ .DS_Store +*.dSYM +.clangd +compile_commands.json # Build artifacts and cache *.o @@ -29,7 +34,6 @@ node_modules/ # Documentation *.md docs/ -*.txt !requirements.txt # CI/CD @@ -37,31 +41,8 @@ docs/ .travis.yml azure-pipelines.yml -# Test files -*_test.cpp -*_test.py -*_ut.cpp -test_* -tests/ -!ydb/public/sdk/cpp/tests/slo_workloads/ - # Large directories not needed for SDK builds ydb/core/ ydb/apps/ ydb/services/ ydb/tools/ - -# Keep only what's needed (specified in Dockerfile COPY commands): -# - build/ -# - certs/ -# - contrib/ -# - library/cpp/ -# - tools/ -# - util/ -# - ydb/library/yverify_stream/ -# - ydb/public/api/ -# - ydb/public/lib/protobuf/ -# - ydb/public/lib/validation/ -# - ydb/public/sdk/cpp/ -# - ya -