summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkungurtsev <[email protected]>2025-06-16 16:01:41 +0200
committerGitHub <[email protected]>2025-06-16 16:01:41 +0200
commitc7a5bf18b022f040f6f4bc5f3976c97d0e71af67 (patch)
treeed7c504c9b0ac1ade158cb1e7e4febaf91403616
parentfab27480ee92d8e505f80abb489e651d228f181e (diff)
Fix ScanSettings filling for build index requests (#19657)
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp37
-rw-r--r--ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp10
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);