66#include " flat_fwd_page.h"
77#include " flat_table_part.h"
88#include " flat_part_slice.h"
9+ #include < ydb/library/yverify_stream/yverify_stream.h>
910
1011namespace NKikimr {
1112namespace NTable {
@@ -281,6 +282,7 @@ namespace NFwd {
281282 TDeque<TPageEx> Pages;
282283 ui32 PagesBeginOffset = 0 , PagesPendingOffset = 0 ;
283284 TDeque<TNodeState> Queue;
285+ TPageId BeginPageId = Max<TPageId>(), EndPageId = 0 ;
284286 };
285287
286288 public:
@@ -302,6 +304,8 @@ namespace NFwd {
302304 auto & meta = Part->IndexPages .GetBTree (groupId);
303305 Levels.resize (meta.LevelCount + 1 );
304306 Levels[0 ].Queue .push_back ({meta.GetPageId (), meta.GetDataSize ()});
307+ Levels[0 ].BeginPageId = meta.GetPageId ();
308+ Levels[0 ].EndPageId = meta.GetPageId () + 1 ;
305309 if (meta.LevelCount ) {
306310 IndexPageLocator.Add (meta.GetPageId (), GroupId, 0 );
307311 }
@@ -325,6 +329,9 @@ namespace NFwd {
325329 return {page, false , true };
326330 }
327331
332+ Y_VERIFY_S (level.BeginPageId <= pageId && pageId < level.EndPageId , " Requested page " << pageId << " is out of loaded slice "
333+ << BeginRowId << " " << EndRowId << " " << level.BeginPageId << " " << level.EndPageId << " with index " << Part->IndexPages .GetBTree (GroupId).ToString ());
334+
328335 DropPagesBefore (level, pageId);
329336 ShrinkPages (level);
330337
@@ -436,8 +443,13 @@ namespace NFwd {
436443 if (child.GetRowCount () <= BeginRowId) {
437444 continue ;
438445 }
439- Y_ABORT_UNLESS (!Levels[levelId + 1 ].Queue || Levels[levelId + 1 ].Queue .back ().PageId < child.GetPageId ());
440- Levels[levelId + 1 ].Queue .push_back ({child.GetPageId (), child.GetDataSize ()});
446+ auto & nextLevel = Levels[levelId + 1 ];
447+ Y_ABORT_UNLESS (!nextLevel.Queue || nextLevel.Queue .back ().PageId < child.GetPageId ());
448+ nextLevel.Queue .push_back ({child.GetPageId (), child.GetDataSize ()});
449+ if (nextLevel.BeginPageId == Max<TPageId>()) {
450+ nextLevel.BeginPageId = child.GetPageId ();
451+ }
452+ nextLevel.EndPageId = child.GetPageId () + 1 ;
441453 if (child.GetRowCount () >= EndRowId) {
442454 break ;
443455 }
0 commit comments