diff options
author | kungurtsev <[email protected]> | 2025-06-16 16:01:41 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2025-06-16 16:01:41 +0200 |
commit | c7a5bf18b022f040f6f4bc5f3976c97d0e71af67 (patch) | |
tree | ed7c504c9b0ac1ade158cb1e7e4febaf91403616 | |
parent | fab27480ee92d8e505f80abb489e651d228f181e (diff) |
Fix ScanSettings filling for build index requests (#19657)
-rw-r--r-- | ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp | 37 | ||||
-rw-r--r-- | ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp | 10 |
2 files changed, 28 insertions, 19 deletions
diff --git a/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp b/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp index ec04f134b0c..b969f3f4ff0 100644 --- a/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp +++ b/ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp @@ -512,30 +512,35 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil private: TMap<TTabletId, THolder<IEventBase>> ToTabletSend; - template <bool WithSnapshot = true, typename Record> - TTabletId CommonFillRecord(Record& record, TShardIdx shardIdx, TIndexBuildInfo& buildInfo) { + template <bool WithSnapshot = true, typename TRequest> + TTabletId CommonFillScanRequest(TRequest& request, TShardIdx shardIdx, TIndexBuildInfo& buildInfo) { TTabletId shardId = Self->ShardInfos.at(shardIdx).TabletID; - record.SetTabletId(ui64(shardId)); + request.SetTabletId(ui64(shardId)); + if constexpr (WithSnapshot) { if (buildInfo.SnapshotTxId) { Y_ENSURE(buildInfo.SnapshotStep); - record.SetSnapshotTxId(ui64(buildInfo.SnapshotTxId)); - record.SetSnapshotStep(ui64(buildInfo.SnapshotStep)); + request.SetSnapshotTxId(ui64(buildInfo.SnapshotTxId)); + request.SetSnapshotStep(ui64(buildInfo.SnapshotStep)); } } auto& shardStatus = buildInfo.Shards.at(shardIdx); - if constexpr (requires { record.MutableKeyRange(); }) { + if constexpr (requires { request.MutableKeyRange(); }) { if (shardStatus.LastKeyAck) { TSerializedTableRange range = TSerializedTableRange(shardStatus.LastKeyAck, "", false, false); - range.Serialize(*record.MutableKeyRange()); + range.Serialize(*request.MutableKeyRange()); } else if (buildInfo.KMeans.Parent == 0) { - shardStatus.Range.Serialize(*record.MutableKeyRange()); + shardStatus.Range.Serialize(*request.MutableKeyRange()); } } - record.SetSeqNoGeneration(Self->Generation()); - record.SetSeqNoRound(++shardStatus.SeqNoRound); + if constexpr (requires { request.MutableScanSettings(); }) { + request.MutableScanSettings()->CopyFrom(buildInfo.ScanSettings); + } + + request.SetSeqNoGeneration(Self->Generation()); + request.SetSeqNoRound(++shardStatus.SeqNoRound); return shardId; } @@ -562,7 +567,7 @@ private: ev->Record.AddColumns(buildInfo.IndexColumns.back()); - auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo); + auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo); ev->Record.SetSeed(ui64(shardId)); LOG_N("TTxBuildProgress: TEvSampleKRequest: " << ev->Record.ShortDebugString()); @@ -602,7 +607,7 @@ private: buildInfo.DataColumns.begin(), buildInfo.DataColumns.end() }; - auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo); + auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo); LOG_N("TTxBuildProgress: TEvReshuffleKMeansRequest: " << ToShortDebugString(ev->Record)); ToTabletSend.emplace(shardId, std::move(ev)); @@ -650,7 +655,7 @@ private: buildInfo.DataColumns.begin(), buildInfo.DataColumns.end() }; - auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo); + auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo); ev->Record.SetSeed(ui64(shardId)); LOG_N("TTxBuildProgress: TEvLocalKMeansRequest: " << ev->Record.ShortDebugString()); @@ -695,7 +700,7 @@ private: ev->Record.AddSourcePrimaryKeyColumns(tableInfo.Columns.at(keyPos).Name); } - auto shardId = CommonFillRecord<false>(ev->Record, shardIdx, buildInfo); + auto shardId = CommonFillScanRequest<false>(ev->Record, shardIdx, buildInfo); ev->Record.SetSeed(ui64(shardId)); LOG_N("TTxBuildProgress: TEvPrefixKMeansRequest: " << ev->Record.ShortDebugString()); @@ -744,9 +749,7 @@ private: ev->Record.SetTargetName(buildInfo.TargetName); - ev->Record.MutableScanSettings()->CopyFrom(buildInfo.ScanSettings); - - auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo); + auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo); LOG_N("TTxBuildProgress: TEvBuildIndexCreateRequest: " << ev->Record.ShortDebugString()); diff --git a/ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp b/ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp index ef38844ef98..f6fe3e333f5 100644 --- a/ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp @@ -38,8 +38,14 @@ Y_UNIT_TEST_SUITE(VectorIndexBuildTestReboots) { WriteVectorTableRows(runtime, TTestTxConfig::SchemeShard, ++t.TxId, "/MyRoot/dir/Table", true, 4, 350, 400); } - AsyncBuildVectorIndex(runtime, ++t.TxId, TTestTxConfig::SchemeShard, "/MyRoot", "/MyRoot/dir/Table", "index1", "embedding", {"value"}); - ui64 buildIndexId = t.TxId; + ui64 buildIndexId = ++t.TxId; + auto sender = runtime.AllocateEdgeActor(); + auto request = CreateBuildIndexRequest(buildIndexId, "/MyRoot", "/MyRoot/dir/Table", TBuildIndexConfig{ + "index1", NKikimrSchemeOp::EIndexTypeGlobalVectorKmeansTree, {"embedding"}, {"value"} + }); + // with too many scan events, the test works infinite time + request->Record.MutableSettings()->MutableScanSettings()->Clear(); + ForwardToTablet(runtime, TTestTxConfig::SchemeShard, sender, request); { auto descr = TestGetBuildIndex(runtime, TTestTxConfig::SchemeShard, "/MyRoot", buildIndexId); |