Skip to content

Commit 47f4292

Browse files
committed
Fix ScanSettings filling for build index requests (#19657)
1 parent 05ccc0b commit 47f4292

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

ydb/core/tx/schemeshard/schemeshard_build_index__progress.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -512,30 +512,35 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
512512
private:
513513
TMap<TTabletId, THolder<IEventBase>> ToTabletSend;
514514

515-
template <bool WithSnapshot = true, typename Record>
516-
TTabletId CommonFillRecord(Record& record, TShardIdx shardIdx, TIndexBuildInfo& buildInfo) {
515+
template <bool WithSnapshot = true, typename TRequest>
516+
TTabletId CommonFillScanRequest(TRequest& request, TShardIdx shardIdx, TIndexBuildInfo& buildInfo) {
517517
TTabletId shardId = Self->ShardInfos.at(shardIdx).TabletID;
518-
record.SetTabletId(ui64(shardId));
518+
request.SetTabletId(ui64(shardId));
519+
519520
if constexpr (WithSnapshot) {
520521
if (buildInfo.SnapshotTxId) {
521522
Y_ENSURE(buildInfo.SnapshotStep);
522-
record.SetSnapshotTxId(ui64(buildInfo.SnapshotTxId));
523-
record.SetSnapshotStep(ui64(buildInfo.SnapshotStep));
523+
request.SetSnapshotTxId(ui64(buildInfo.SnapshotTxId));
524+
request.SetSnapshotStep(ui64(buildInfo.SnapshotStep));
524525
}
525526
}
526527

527528
auto& shardStatus = buildInfo.Shards.at(shardIdx);
528-
if constexpr (requires { record.MutableKeyRange(); }) {
529+
if constexpr (requires { request.MutableKeyRange(); }) {
529530
if (shardStatus.LastKeyAck) {
530531
TSerializedTableRange range = TSerializedTableRange(shardStatus.LastKeyAck, "", false, false);
531-
range.Serialize(*record.MutableKeyRange());
532+
range.Serialize(*request.MutableKeyRange());
532533
} else if (buildInfo.KMeans.Parent == 0) {
533-
shardStatus.Range.Serialize(*record.MutableKeyRange());
534+
shardStatus.Range.Serialize(*request.MutableKeyRange());
534535
}
535536
}
536537

537-
record.SetSeqNoGeneration(Self->Generation());
538-
record.SetSeqNoRound(++shardStatus.SeqNoRound);
538+
if constexpr (requires { request.MutableScanSettings(); }) {
539+
request.MutableScanSettings()->CopyFrom(buildInfo.ScanSettings);
540+
}
541+
542+
request.SetSeqNoGeneration(Self->Generation());
543+
request.SetSeqNoRound(++shardStatus.SeqNoRound);
539544
return shardId;
540545
}
541546

@@ -562,7 +567,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
562567

563568
ev->Record.AddColumns(buildInfo.IndexColumns.back());
564569

565-
auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo);
570+
auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo);
566571
ev->Record.SetSeed(ui64(shardId));
567572
LOG_N("TTxBuildProgress: TEvSampleKRequest: " << ev->Record.ShortDebugString());
568573

@@ -602,7 +607,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
602607
buildInfo.DataColumns.begin(), buildInfo.DataColumns.end()
603608
};
604609

605-
auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo);
610+
auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo);
606611
LOG_N("TTxBuildProgress: TEvReshuffleKMeansRequest: " << ToShortDebugString(ev->Record));
607612

608613
ToTabletSend.emplace(shardId, std::move(ev));
@@ -650,7 +655,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
650655
buildInfo.DataColumns.begin(), buildInfo.DataColumns.end()
651656
};
652657

653-
auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo);
658+
auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo);
654659
ev->Record.SetSeed(ui64(shardId));
655660
LOG_N("TTxBuildProgress: TEvLocalKMeansRequest: " << ev->Record.ShortDebugString());
656661

@@ -695,7 +700,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
695700
ev->Record.AddSourcePrimaryKeyColumns(tableInfo.Columns.at(keyPos).Name);
696701
}
697702

698-
auto shardId = CommonFillRecord<false>(ev->Record, shardIdx, buildInfo);
703+
auto shardId = CommonFillScanRequest<false>(ev->Record, shardIdx, buildInfo);
699704
ev->Record.SetSeed(ui64(shardId));
700705
LOG_N("TTxBuildProgress: TEvPrefixKMeansRequest: " << ev->Record.ShortDebugString());
701706

@@ -744,9 +749,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
744749

745750
ev->Record.SetTargetName(buildInfo.TargetName);
746751

747-
ev->Record.MutableScanSettings()->CopyFrom(buildInfo.ScanSettings);
748-
749-
auto shardId = CommonFillRecord(ev->Record, shardIdx, buildInfo);
752+
auto shardId = CommonFillScanRequest(ev->Record, shardIdx, buildInfo);
750753

751754
LOG_N("TTxBuildProgress: TEvBuildIndexCreateRequest: " << ev->Record.ShortDebugString());
752755

ydb/core/tx/schemeshard/ut_vector_index_build_reboots/ut_vector_index_build_reboots.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,14 @@ Y_UNIT_TEST_SUITE(VectorIndexBuildTestReboots) {
3838
WriteVectorTableRows(runtime, TTestTxConfig::SchemeShard, ++t.TxId, "/MyRoot/dir/Table", true, 4, 350, 400);
3939
}
4040

41-
AsyncBuildVectorIndex(runtime, ++t.TxId, TTestTxConfig::SchemeShard, "/MyRoot", "/MyRoot/dir/Table", "index1", "embedding", {"value"});
42-
ui64 buildIndexId = t.TxId;
41+
ui64 buildIndexId = ++t.TxId;
42+
auto sender = runtime.AllocateEdgeActor();
43+
auto request = CreateBuildIndexRequest(buildIndexId, "/MyRoot", "/MyRoot/dir/Table", TBuildIndexConfig{
44+
"index1", NKikimrSchemeOp::EIndexTypeGlobalVectorKmeansTree, {"embedding"}, {"value"}
45+
});
46+
// with too many scan events, the test works infinite time
47+
request->Record.MutableSettings()->MutableScanSettings()->Clear();
48+
ForwardToTablet(runtime, TTestTxConfig::SchemeShard, sender, request);
4349

4450
{
4551
auto descr = TestGetBuildIndex(runtime, TTestTxConfig::SchemeShard, "/MyRoot", buildIndexId);

0 commit comments

Comments
 (0)