@@ -435,7 +435,7 @@ s16 BTreeGeneric::mergeLeftIntoRight(ExclusivePageGuard<BTreeNode>& parent,
435
435
}
436
436
return 2 ;
437
437
}
438
- // -------------------------------------------------------------------------------------
438
+
439
439
// returns true if it has exclusively locked anything
440
440
441
441
BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge (
@@ -445,18 +445,18 @@ BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge(
445
445
if (c_guard->fillFactorAfterCompaction () >= 0.9 ) {
446
446
return XMergeReturnCode::NOTHING;
447
447
}
448
- // -------------------------------------------------------------------------------------
448
+
449
449
const u8 MAX_MERGE_PAGES = FLAGS_xmerge_k;
450
450
s16 pos = parent_handler.mPosInParent ;
451
451
u8 pages_count = 1 ;
452
452
s16 max_right;
453
453
ARRAY_ON_STACK (guards, HybridPageGuard<BTreeNode>, MAX_MERGE_PAGES);
454
454
ARRAY_ON_STACK (fully_merged, bool , MAX_MERGE_PAGES);
455
- // -------------------------------------------------------------------------------------
455
+
456
456
guards[0 ] = std::move (c_guard);
457
457
fully_merged[0 ] = false ;
458
458
double total_fill_factor = guards[0 ]->fillFactorAfterCompaction ();
459
- // -------------------------------------------------------------------------------------
459
+
460
460
// Handle upper swip instead of avoiding p_guard->mNumSeps -1 swip
461
461
if (isMetaNode (p_guard) || !guards[0 ]->mIsLeaf ) {
462
462
c_guard = std::move (guards[0 ]);
@@ -469,7 +469,7 @@ BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge(
469
469
c_guard = std::move (guards[0 ]);
470
470
return XMergeReturnCode::NOTHING;
471
471
}
472
- // -------------------------------------------------------------------------------------
472
+
473
473
guards[max_right - pos] =
474
474
HybridPageGuard<BTreeNode>(p_guard, p_guard->getChild (max_right));
475
475
fully_merged[max_right - pos] = false ;
@@ -485,10 +485,10 @@ BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge(
485
485
c_guard = std::move (guards[0 ]);
486
486
return XMergeReturnCode::NOTHING;
487
487
}
488
- // -------------------------------------------------------------------------------------
488
+
489
489
ExclusivePageGuard<BTreeNode> p_x_guard = std::move (p_guard);
490
490
p_x_guard.incrementGSN ();
491
- // -------------------------------------------------------------------------------------
491
+
492
492
XMergeReturnCode ret_code = XMergeReturnCode::PARTIAL_MERGE;
493
493
s16 left_hand, right_hand, ret;
494
494
while (true ) {
@@ -501,9 +501,9 @@ BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge(
501
501
}
502
502
if (right_hand == pos)
503
503
break ;
504
- // -------------------------------------------------------------------------------------
504
+
505
505
left_hand = right_hand - 1 ;
506
- // -------------------------------------------------------------------------------------
506
+
507
507
{
508
508
ExclusivePageGuard<BTreeNode> right_x_guard (
509
509
std::move (guards[right_hand - pos]));
@@ -528,7 +528,6 @@ BTreeGeneric::XMergeReturnCode BTreeGeneric::XMerge(
528
528
ENSURE (false );
529
529
}
530
530
}
531
- // -------------------------------------------------------------------------------------
532
531
}
533
532
if (c_guard.guard .state == GUARD_STATE::MOVED)
534
533
c_guard = std::move (guards[0 ]);
@@ -552,15 +551,15 @@ s64 BTreeGeneric::iterateAllPagesRec(HybridPageGuard<BTreeNode>& node_guard,
552
551
c_guard.JumpIfModifiedByOthers ();
553
552
res += iterateAllPagesRec (c_guard, inner, leaf);
554
553
}
555
- // -------------------------------------------------------------------------------------
554
+
556
555
Swip<BTreeNode>& c_swip = node_guard->mRightMostChildSwip ;
557
556
auto c_guard = HybridPageGuard (node_guard, c_swip);
558
557
c_guard.JumpIfModifiedByOthers ();
559
558
res += iterateAllPagesRec (c_guard, inner, leaf);
560
- // -------------------------------------------------------------------------------------
559
+
561
560
return res;
562
561
}
563
- // -------------------------------------------------------------------------------------
562
+
564
563
s64 BTreeGeneric::iterateAllPages (BTreeNodeCallback inner,
565
564
BTreeNodeCallback leaf) {
566
565
while (true ) {
@@ -574,36 +573,36 @@ s64 BTreeGeneric::iterateAllPages(BTreeNodeCallback inner,
574
573
}
575
574
}
576
575
}
577
- // -------------------------------------------------------------------------------------
576
+
578
577
u64 BTreeGeneric::getHeight () {
579
578
return mHeight .load ();
580
579
}
581
- // -------------------------------------------------------------------------------------
580
+
582
581
u64 BTreeGeneric::countEntries () {
583
582
return iterateAllPages ([](BTreeNode&) { return 0 ; },
584
583
[](BTreeNode& node) { return node.mNumSeps ; });
585
584
}
586
- // -------------------------------------------------------------------------------------
585
+
587
586
u64 BTreeGeneric::countPages () {
588
587
return iterateAllPages ([](BTreeNode&) { return 1 ; },
589
588
[](BTreeNode&) { return 1 ; });
590
589
}
591
- // -------------------------------------------------------------------------------------
590
+
592
591
u64 BTreeGeneric::countInner () {
593
592
return iterateAllPages ([](BTreeNode&) { return 1 ; },
594
593
[](BTreeNode&) { return 0 ; });
595
594
}
596
- // -------------------------------------------------------------------------------------
595
+
597
596
double BTreeGeneric::averageSpaceUsage () {
598
597
ENSURE (false ); // TODO
599
598
}
600
- // -------------------------------------------------------------------------------------
599
+
601
600
u32 BTreeGeneric::bytesFree () {
602
601
return iterateAllPages (
603
602
[](BTreeNode& inner) { return inner.freeSpaceAfterCompaction (); },
604
603
[](BTreeNode& leaf) { return leaf.freeSpaceAfterCompaction (); });
605
604
}
606
- // -------------------------------------------------------------------------------------
605
+
607
606
void BTreeGeneric::printInfos (uint64_t totalSize) {
608
607
HybridPageGuard<BTreeNode> p_guard (mMetaNodeSwip );
609
608
HybridPageGuard r_guard (p_guard, p_guard->mRightMostChildSwip );
@@ -613,5 +612,5 @@ void BTreeGeneric::printInfos(uint64_t totalSize) {
613
612
<< " height:" << mHeight << " rootCnt:" << r_guard->mNumSeps
614
613
<< " bytesFree:" << bytesFree () << endl;
615
614
}
616
- // -------------------------------------------------------------------------------------
615
+
617
616
} // namespace leanstore::storage::btree
0 commit comments