@@ -370,7 +370,7 @@ THolder<TEvSchemeShard::TEvModifySchemeTransaction> CreateBuildPropose(
370
370
static constexpr std::string_view LogPrefix = " Create build table boundaries for " ;
371
371
LOG_D (buildInfo.Id << " table " << suffix
372
372
<< " , count: " << count << " , parts: " << parts << " , step: " << step
373
- << " , kmeans: " << buildInfo.KMeansTreeToDebugStr ());
373
+ << " , " << buildInfo.DebugString ());
374
374
if (parts > 1 ) {
375
375
const auto from = buildInfo.KMeans .ChildBegin ;
376
376
for (auto i = from + step, e = from + count; i < e; i += step) {
@@ -699,7 +699,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
699
699
ToTabletSend.emplace_back (shardId, ui64 (BuildId), std::move (ev));
700
700
}
701
701
702
- void SendBuildIndexRequest (TShardIdx shardIdx, TIndexBuildInfo& buildInfo) {
702
+ void SendBuildSecondaryIndexRequest (TShardIdx shardIdx, TIndexBuildInfo& buildInfo) {
703
703
auto ev = MakeHolder<TEvDataShard::TEvBuildIndexCreateRequest>();
704
704
ev->Record .SetBuildIndexId (ui64 (BuildId));
705
705
@@ -808,12 +808,20 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
808
808
}
809
809
}
810
810
811
- bool FillTable (TIndexBuildInfo& buildInfo) {
811
+ bool FillSecondaryIndex (TIndexBuildInfo& buildInfo) {
812
+ LOG_D (" FillSecondaryIndex Start" );
813
+
812
814
if (buildInfo.DoneShards .empty () && buildInfo.ToUploadShards .empty () && buildInfo.InProgressShards .empty ()) {
813
815
AddAllShards (buildInfo);
814
816
}
815
- return SendToShards (buildInfo, [&](TShardIdx shardIdx) { SendBuildIndexRequest (shardIdx, buildInfo); }) &&
817
+ auto done = SendToShards (buildInfo, [&](TShardIdx shardIdx) { SendBuildSecondaryIndexRequest (shardIdx, buildInfo); }) &&
816
818
buildInfo.DoneShards .size () == buildInfo.Shards .size ();
819
+
820
+ if (done) {
821
+ LOG_D (" FillSecondaryIndex Done" );
822
+ }
823
+
824
+ return done;
817
825
}
818
826
819
827
bool FillPrefixKMeans (TIndexBuildInfo& buildInfo) {
@@ -824,6 +832,14 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
824
832
buildInfo.DoneShards .size () == buildInfo.Shards .size ();
825
833
}
826
834
835
+ bool FillLocalKMeans (TIndexBuildInfo& buildInfo) {
836
+ if (buildInfo.DoneShards .empty () && buildInfo.ToUploadShards .empty () && buildInfo.InProgressShards .empty ()) {
837
+ AddAllShards (buildInfo);
838
+ }
839
+ return SendToShards (buildInfo, [&](TShardIdx shardIdx) { SendKMeansLocalRequest (shardIdx, buildInfo); }) &&
840
+ buildInfo.DoneShards .size () == buildInfo.Shards .size ();
841
+ }
842
+
827
843
bool InitSingleKMeans (TIndexBuildInfo& buildInfo) {
828
844
if (!buildInfo.DoneShards .empty () || !buildInfo.InProgressShards .empty () || !buildInfo.ToUploadShards .empty ()) {
829
845
return false ;
@@ -935,102 +951,112 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
935
951
);
936
952
}
937
953
938
- bool FillVectorIndex (TTransactionContext& txc, TIndexBuildInfo& buildInfo) {
939
- if (buildInfo.IsBuildPrefixedVectorIndex () && buildInfo.KMeans .Level == 1 ) {
940
- LOG_D (" FillIndex::Prefixed::Level1::Start " << buildInfo.KMeansTreeToDebugStr ());
941
- if (!FillTable (buildInfo)) {
954
+ bool FillPrefixedVectorIndex (TTransactionContext& txc, TIndexBuildInfo& buildInfo) {
955
+ LOG_D (" FillPrefixedVectorIndex Start " << buildInfo.DebugString ());
956
+
957
+ if (buildInfo.KMeans .Level == 1 ) {
958
+ if (!FillSecondaryIndex (buildInfo)) {
942
959
return false ;
943
960
}
944
- const ui64 doneShards = buildInfo.DoneShards . size ( );
961
+ LOG_D ( " FillPrefixedVectorIndex DoneLevel " << buildInfo.DebugString () );
945
962
963
+ const ui64 doneShards = buildInfo.DoneShards .size ();
946
964
ClearDoneShards (txc, buildInfo);
947
965
// it's approximate but upper bound, so it's ok
948
966
buildInfo.KMeans .TableSize = std::max<ui64>(1 , buildInfo.Processed .GetUploadRows ());
949
967
buildInfo.KMeans .PrefixIndexDone (doneShards);
968
+ LOG_D (" FillPrefixedVectorIndex PrefixIndexDone " << buildInfo.DebugString ());
969
+
950
970
PersistKMeansState (txc, buildInfo);
951
971
NIceDb::TNiceDb db{txc.DB };
952
972
Self->PersistBuildIndexUploadReset (db, buildInfo);
953
- LOG_D (" FillIndex::Prefixed::Level1::Done " << buildInfo.KMeansTreeToDebugStr ());
954
973
ChangeState (BuildId, TIndexBuildInfo::EState::CreateBuild);
955
974
Progress (BuildId);
956
975
return false ;
957
- }
958
-
959
- if (buildInfo. IsBuildPrefixedVectorIndex () && buildInfo. KMeans . Level == 2 ) {
960
- LOG_D ( " FillIndex::Prefixed::Level2::Start " << buildInfo. KMeansTreeToDebugStr () );
961
- if (!FillPrefixKMeans (buildInfo) ) {
976
+ } else {
977
+ bool filled = buildInfo. KMeans . Level == 2
978
+ ? FillPrefixKMeans (buildInfo)
979
+ : FillLocalKMeans (buildInfo );
980
+ if (!filled ) {
962
981
return false ;
963
982
}
983
+ LOG_D (" FillPrefixedVectorIndex DoneLevel " << buildInfo.DebugString ());
964
984
965
985
ClearDoneShards (txc, buildInfo);
966
986
Y_ASSERT (buildInfo.KMeans .State == TIndexBuildInfo::TKMeans::MultiLocal);
967
987
const bool needsAnotherLevel = buildInfo.KMeans .NextLevel ();
968
988
buildInfo.KMeans .State = TIndexBuildInfo::TKMeans::MultiLocal;
969
- buildInfo.KMeans .Parent = buildInfo.KMeans .ParentEnd ();
989
+ if (buildInfo.KMeans .Level == 2 ) {
990
+ buildInfo.KMeans .Parent = buildInfo.KMeans .ParentEnd ();
991
+ }
992
+ LOG_D (" FillPrefixedVectorIndex NextLevel " << buildInfo.DebugString ());
993
+
970
994
PersistKMeansState (txc, buildInfo);
971
995
NIceDb::TNiceDb db{txc.DB };
972
996
Self->PersistBuildIndexUploadReset (db, buildInfo);
973
- LOG_D (" FillIndex::Prefixed::Level2::Done " << buildInfo.KMeansTreeToDebugStr ());
974
997
if (!needsAnotherLevel) {
998
+ LOG_D (" FillPrefixedVectorIndex Done " << buildInfo.DebugString ());
975
999
return true ;
976
1000
}
977
1001
ChangeState (BuildId, TIndexBuildInfo::EState::DropBuild);
978
1002
Progress (BuildId);
979
1003
return false ;
980
1004
}
1005
+ }
1006
+
1007
+ bool FillVectorIndex (TTransactionContext& txc, TIndexBuildInfo& buildInfo) {
1008
+ LOG_D (" FillVectorIndex Start " << buildInfo.DebugString ());
981
1009
982
1010
if (buildInfo.Sample .State == TIndexBuildInfo::TSample::EState::Upload) {
983
1011
return false ;
984
1012
}
985
1013
if (InitSingleKMeans (buildInfo)) {
986
- LOG_D (" FillIndex:: SingleKMeans::Start " << buildInfo.KMeansTreeToDebugStr ());
1014
+ LOG_D (" FillVectorIndex SingleKMeans " << buildInfo.DebugString ());
987
1015
}
988
1016
if (!SendVectorIndex (buildInfo)) {
989
1017
return false ;
990
1018
}
991
1019
992
- LOG_D (" FillIndex::SendVectorIndex::Done " << buildInfo.KMeansTreeToDebugStr ());
993
1020
if (!buildInfo.Sample .Rows .empty ()) {
994
1021
if (buildInfo.Sample .State == TIndexBuildInfo::TSample::EState::Collect) {
995
- LOG_D (" FillIndex::SendSample::Start " << buildInfo.KMeansTreeToDebugStr ());
1022
+ LOG_D (" FillVectorIndex SendUploadSampleKRequest " << buildInfo.DebugString ());
996
1023
SendUploadSampleKRequest (buildInfo);
997
1024
return false ;
998
1025
}
999
- LOG_D (" FillIndex::SendSample::Done " << buildInfo.KMeansTreeToDebugStr ());
1000
1026
}
1001
1027
1002
- LOG_D (" FillIndex::ClearDoneShards " << buildInfo.KMeansTreeToDebugStr ());
1028
+ LOG_D (" FillVectorIndex DoneLevel " << buildInfo.DebugString ());
1003
1029
ClearDoneShards (txc, buildInfo);
1004
1030
1005
1031
if (!buildInfo.Sample .Rows .empty ()) {
1006
1032
if (buildInfo.KMeans .NextState ()) {
1007
- LOG_D (" FillIndex:: NextState::Start " << buildInfo.KMeansTreeToDebugStr ());
1033
+ LOG_D (" FillVectorIndex NextState " << buildInfo.DebugString ());
1008
1034
PersistKMeansState (txc, buildInfo);
1009
1035
Progress (BuildId);
1010
1036
return false ;
1011
1037
}
1012
1038
buildInfo.Sample .Clear ();
1013
1039
NIceDb::TNiceDb db{txc.DB };
1014
1040
Self->PersistBuildIndexSampleForget (db, buildInfo);
1015
- LOG_D (" FillIndex::NextState::Done " << buildInfo.KMeansTreeToDebugStr ());
1041
+ LOG_D (" FillVectorIndex DoneState " << buildInfo.DebugString ());
1016
1042
}
1017
1043
1018
1044
if (buildInfo.KMeans .NextParent ()) {
1019
- LOG_D (" FillIndex:: NextParent::Start " << buildInfo.KMeansTreeToDebugStr ());
1045
+ LOG_D (" FillVectorIndex NextParent " << buildInfo.DebugString ());
1020
1046
PersistKMeansState (txc, buildInfo);
1021
1047
Progress (BuildId);
1022
1048
return false ;
1023
1049
}
1024
1050
1025
1051
if (InitMultiKMeans (buildInfo)) {
1026
- LOG_D (" FillIndex:: MultiKMeans::Start " << buildInfo.KMeansTreeToDebugStr ());
1052
+ LOG_D (" FillVectorIndex MultiKMeans " << buildInfo.DebugString ());
1027
1053
PersistKMeansState (txc, buildInfo);
1028
1054
Progress (BuildId);
1029
1055
return false ;
1030
1056
}
1031
1057
1032
1058
if (buildInfo.KMeans .NextLevel ()) {
1033
- LOG_D (" FillIndex:: NextLevel::Start " << buildInfo.KMeansTreeToDebugStr ());
1059
+ LOG_D (" FillVectorIndex NextLevel " << buildInfo.DebugString ());
1034
1060
PersistKMeansState (txc, buildInfo);
1035
1061
NIceDb::TNiceDb db{txc.DB };
1036
1062
Self->PersistBuildIndexUploadReset (db, buildInfo);
@@ -1040,7 +1066,7 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
1040
1066
Progress (BuildId);
1041
1067
return false ;
1042
1068
}
1043
- LOG_D (" FillIndex:: Done " << buildInfo.KMeansTreeToDebugStr ());
1069
+ LOG_D (" FillVectorIndex Done " << buildInfo.DebugString ());
1044
1070
return true ;
1045
1071
}
1046
1072
@@ -1058,15 +1084,20 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
1058
1084
Y_ABORT_UNLESS (buildInfo.SnapshotStep );
1059
1085
}
1060
1086
if (buildInfo.Shards .empty ()) {
1061
- LOG_D (" FillIndex::InitiateShards " << buildInfo.KMeansTreeToDebugStr ());
1062
1087
NIceDb::TNiceDb db (txc.DB );
1063
1088
InitiateShards (db, buildInfo);
1064
1089
}
1065
- if (buildInfo.IsBuildVectorIndex ()) {
1066
- return FillVectorIndex (txc, buildInfo);
1067
- } else {
1068
- Y_ASSERT (buildInfo.IsBuildSecondaryIndex () || buildInfo.IsBuildColumns ());
1069
- return FillTable (buildInfo);
1090
+ switch (buildInfo.BuildKind ) {
1091
+ case TIndexBuildInfo::EBuildKind::BuildSecondaryIndex:
1092
+ case TIndexBuildInfo::EBuildKind::BuildColumns:
1093
+ return FillSecondaryIndex (buildInfo);
1094
+ case TIndexBuildInfo::EBuildKind::BuildVectorIndex:
1095
+ return FillVectorIndex (txc, buildInfo);
1096
+ case TIndexBuildInfo::EBuildKind::BuildPrefixedVectorIndex:
1097
+ return FillPrefixedVectorIndex (txc, buildInfo);
1098
+ default :
1099
+ Y_ASSERT (false );
1100
+ return true ;
1070
1101
}
1071
1102
}
1072
1103
@@ -1303,6 +1334,8 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
1303
1334
}
1304
1335
1305
1336
void InitiateShards (NIceDb::TNiceDb& db, TIndexBuildInfo& buildInfo) {
1337
+ LOG_D (" InitiateShards " << buildInfo.DebugString ());
1338
+
1306
1339
Y_ASSERT (buildInfo.Shards .empty ());
1307
1340
Y_ASSERT (buildInfo.ToUploadShards .empty ());
1308
1341
Y_ASSERT (buildInfo.InProgressShards .empty ());
@@ -1318,15 +1351,16 @@ struct TSchemeShard::TIndexBuilder::TTxProgress: public TSchemeShard::TIndexBuil
1318
1351
auto tableColumns = NTableIndex::ExtractInfo (table); // skip dropped columns
1319
1352
TSerializedTableRange shardRange = InfiniteRange (tableColumns.Keys .size ());
1320
1353
static constexpr std::string_view LogPrefix = " " ;
1321
- LOG_D (" infinite range " << buildInfo.KMeans .RangeToDebugStr (shardRange, buildInfo.IsBuildPrefixedVectorIndex () ? 2 : 1 ));
1322
1354
1323
1355
buildInfo.Cluster2Shards .clear ();
1324
1356
for (const auto & x: table->GetPartitions ()) {
1325
1357
Y_ABORT_UNLESS (Self->ShardInfos .contains (x.ShardIdx ));
1326
1358
TSerializedCellVec bound{x.EndOfRange };
1327
1359
shardRange.To = bound;
1328
- LOG_D (" shard " << x.ShardIdx << " range " << buildInfo.KMeans .RangeToDebugStr (shardRange, buildInfo.IsBuildPrefixedVectorIndex () ? 2 : 1 ));
1329
- buildInfo.AddParent (shardRange, x.ShardIdx );
1360
+ if (buildInfo.BuildKind == TIndexBuildInfo::EBuildKind::BuildVectorIndex) {
1361
+ LOG_D (" shard " << x.ShardIdx << " range " << buildInfo.KMeans .RangeToDebugStr (shardRange));
1362
+ buildInfo.AddParent (shardRange, x.ShardIdx );
1363
+ }
1330
1364
auto [it, emplaced] = buildInfo.Shards .emplace (x.ShardIdx , TIndexBuildInfo::TShardStatus{std::move (shardRange), " " , buildInfo.Shards .size ()});
1331
1365
Y_ASSERT (emplaced);
1332
1366
shardRange.From = std::move (bound);
0 commit comments