@@ -44,7 +44,6 @@ bool TTablesManager::FillMonitoringReport(NTabletFlatExecutor::TTransactionConte
4444}
4545
4646bool TTablesManager::InitFromDB (NIceDb::TNiceDb& db) {
47- THashMap<ui32, TSchemaPreset> schemaPresets;
4847 {
4948 TLoadTimeSignals::TLoadTimer timer = LoadTimeCounters->TableLoadTimeCounters .StartGuard ();
5049 TMemoryProfileGuard g (" TTablesManager/InitFromDB::Tables" );
@@ -73,7 +72,7 @@ bool TTablesManager::InitFromDB(NIceDb::TNiceDb& db) {
7372 }
7473 }
7574
76- bool isFakePresetOnly = true ;
75+ std::optional<TSchemaPreset> preset ;
7776 {
7877 TLoadTimeSignals::TLoadTimer timer = LoadTimeCounters->SchemaPresetLoadTimeCounters .StartGuard ();
7978 TMemoryProfileGuard g (" TTablesManager/InitFromDB::SchemaPresets" );
@@ -83,23 +82,24 @@ bool TTablesManager::InitFromDB(NIceDb::TNiceDb& db) {
8382 return false ;
8483 }
8584
86- while (!rowset.EndOfSet ()) {
87- TSchemaPreset preset;
88- preset.InitFromDB (rowset);
85+ if (!rowset.EndOfSet ()) {
86+ preset->InitFromDB (rowset);
8987
90- if (preset.IsStandaloneTable ()) {
91- Y_VERIFY_S (!preset.GetName (), " Preset name: " + preset.GetName ());
88+ if (preset->IsStandaloneTable ()) {
89+ Y_VERIFY_S (!preset->GetName (), " Preset name: " + preset->GetName ());
90+ AFL_VERIFY (!preset->Id );
9291 } else {
93- Y_VERIFY_S (preset. GetName () == " default" , " Preset name: " + preset. GetName ());
94- isFakePresetOnly = false ;
92+ Y_VERIFY_S (preset-> GetName () == " default" , " Preset name: " + preset-> GetName ());
93+ AFL_VERIFY (preset-> Id ) ;
9594 }
96- AFL_VERIFY (schemaPresets.emplace (preset.GetId (), preset).second );
97- AFL_VERIFY (SchemaPresetsIds.emplace (preset.GetId ()).second );
95+ AFL_VERIFY (SchemaPresetsIds.emplace (preset->GetId ()).second );
9896 if (!rowset.Next ()) {
9997 timer.AddLoadingFail ();
10098 return false ;
10199 }
102100 }
101+
102+ AFL_VERIFY (rowset.EndOfSet ())(" reson" , " multiple_presets_not_supported" );
103103 }
104104
105105 {
@@ -122,7 +122,8 @@ bool TTablesManager::InitFromDB(NIceDb::TNiceDb& db) {
122122 NKikimrTxColumnShard::TTableVersionInfo versionInfo;
123123 Y_ABORT_UNLESS (versionInfo.ParseFromString (rowset.GetValue <Schema::TableVersionInfo::InfoProto>()));
124124 AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " load_table_version" )(" path_id" , pathId)(" snapshot" , version);
125- Y_ABORT_UNLESS (schemaPresets.contains (versionInfo.GetSchemaPresetId ()));
125+ AFL_VERIFY (preset);
126+ AFL_VERIFY (preset->Id == versionInfo.GetSchemaPresetId ())(" preset" , preset->Id )(" table" , versionInfo.GetSchemaPresetId ());
126127
127128 if (!table.IsDropped ()) {
128129 auto & ttlSettings = versionInfo.GetTtlSettings ();
@@ -152,6 +153,7 @@ bool TTablesManager::InitFromDB(NIceDb::TNiceDb& db) {
152153 {
153154 TLoadTimeSignals::TLoadTimer timer = LoadTimeCounters->SchemaPresetVersionsLoadTimeCounters .StartGuard ();
154155 TMemoryProfileGuard g (" TTablesManager/InitFromDB::PresetVersions" );
156+
155157 auto rowset = db.Table <Schema::SchemaPresetVersionInfo>().Select ();
156158 if (!rowset.IsReady ()) {
157159 timer.AddLoadingFail ();
@@ -160,46 +162,37 @@ bool TTablesManager::InitFromDB(NIceDb::TNiceDb& db) {
160162
161163 while (!rowset.EndOfSet ()) {
162164 const ui32 id = rowset.GetValue <Schema::SchemaPresetVersionInfo::Id>();
163- Y_ABORT_UNLESS (schemaPresets. contains (id) );
164- auto & preset = schemaPresets[id] ;
165+ AFL_VERIFY (preset );
166+ AFL_VERIFY ( preset-> Id == id)( " preset " , preset-> Id )( " schema " , id) ;
165167 NOlap::TSnapshot version (
166168 rowset.GetValue <Schema::SchemaPresetVersionInfo::SinceStep>(), rowset.GetValue <Schema::SchemaPresetVersionInfo::SinceTxId>());
167169
168170 TSchemaPreset::TSchemaPresetVersionInfo info;
169171 Y_ABORT_UNLESS (info.ParseFromString (rowset.GetValue <Schema::SchemaPresetVersionInfo::InfoProto>()));
170172 AFL_DEBUG (NKikimrServices::TX_COLUMNSHARD)(" event" , " load_preset" )(" preset_id" , id)(" snapshot" , version)(
171173 " version" , info.HasSchema () ? info.GetSchema ().GetVersion () : -1 );
172- preset.AddVersion (version, info);
173174 if (!rowset.Next ()) {
174175 timer.AddLoadingFail ();
175176 return false ;
176177 }
177- }
178- }
179178
180- TMemoryProfileGuard g (" TTablesManager/InitFromDB::Other" );
181- for (auto & [id, preset] : schemaPresets) {
182- if (isFakePresetOnly) {
183- Y_ABORT_UNLESS (id == 0 );
184- } else {
185- Y_ABORT_UNLESS (id > 0 );
186- }
187- for (auto it = preset.MutableVersionsById ().begin (); it != preset.MutableVersionsById ().end ();) {
188- const auto version = it->first ;
189- const auto & schemaInfo = it->second ;
190- AFL_VERIFY (schemaInfo.HasSchema ());
179+ AFL_VERIFY (info.HasSchema ());
191180 AFL_INFO (NKikimrServices::TX_COLUMNSHARD)(" event" , " index_schema" )(" preset_id" , id)(" snapshot" , version)(
192- " version" , schemaInfo .GetSchema ().GetVersion ());
193- NOlap::IColumnEngine::TSchemaInitializationData schemaInitializationData (schemaInfo );
181+ " version" , info .GetSchema ().GetVersion ());
182+ NOlap::IColumnEngine::TSchemaInitializationData schemaInitializationData (info );
194183 if (!PrimaryIndex) {
195184 PrimaryIndex = std::make_unique<NOlap::TColumnEngineForLogs>(TabletId, DataAccessorsManager, StoragesManager,
196- preset.GetMinVersionForId (schemaInfo.GetSchema ().GetVersion ()), schemaInitializationData);
185+ version, schemaInitializationData);
186+ } else if (PrimaryIndex->GetVersionedIndex ().IsEmpty () ||
187+ info.GetSchema ().GetVersion () > PrimaryIndex->GetVersionedIndex ().GetLastSchema ()->GetVersion ()) {
188+ PrimaryIndex->RegisterSchemaVersion (version, schemaInitializationData);
197189 } else {
198- PrimaryIndex->RegisterSchemaVersion (preset. GetMinVersionForId (schemaInfo. GetSchema (). GetVersion ()) , schemaInitializationData);
190+ PrimaryIndex->RegisterOldSchemaVersion (version , schemaInitializationData);
199191 }
200- it = preset.MutableVersionsById ().erase (it);
201192 }
202193 }
194+
195+ TMemoryProfileGuard g (" TTablesManager/InitFromDB::Other" );
203196 for (auto && i : Tables) {
204197 PrimaryIndex->RegisterTable (i.first );
205198 }
0 commit comments