@@ -541,7 +541,9 @@ def pretty_print(self) -> None:
541
541
def total_size (self ) -> Tuple [int , int ]:
542
542
return self ._total_size_helper ()
543
543
544
- def _evict_leaf_node (self , x : TreeNode ) -> Tuple [int , int , TreeNode , TreeNode ]:
544
+ def _evict_leaf_node (
545
+ self , x : TreeNode , is_evict_mamba : bool
546
+ ) -> Tuple [int , int , TreeNode , TreeNode ]:
545
547
assert (
546
548
x .full_lock_ref == 0
547
549
), f"leaf node with full lock must also have mamba lock, { x .id = } { x .full_lock_ref = } "
@@ -552,7 +554,10 @@ def _evict_leaf_node(self, x: TreeNode) -> Tuple[int, int, TreeNode, TreeNode]:
552
554
mamba_num_evicted = len (x .mamba_value )
553
555
554
556
# 2. get the next node, update the lru lists
555
- x_next = self .mamba_lru_list .get_prev_no_lock (x )
557
+ if is_evict_mamba :
558
+ x_next = self .mamba_lru_list .get_prev_no_lock (x )
559
+ else :
560
+ x_next = self .full_lru_list .get_prev_leaf_no_lock (x )
556
561
self .full_lru_list .remove_node (x )
557
562
self .mamba_lru_list .remove_node (x )
558
563
@@ -588,7 +593,7 @@ def evict_mamba(self, mamba_num: int) -> None:
588
593
# 3. tombstone the node
589
594
self ._tombstone_internal_node (x )
590
595
else :
591
- _ , mamba_evicted_delta , _ , x_next = self ._evict_leaf_node (x )
596
+ _ , mamba_evicted_delta , _ , x_next = self ._evict_leaf_node (x , True )
592
597
mamba_num_evicted += mamba_evicted_delta
593
598
594
599
x = x_next
@@ -605,7 +610,7 @@ def evict(self, full_num_tokens: int) -> None:
605
610
assert (
606
611
x != self .root_node
607
612
), f"root node should not exist in full lru list, { x .id = } "
608
- full_num_evicted_delta , _ , x , x_next = self ._evict_leaf_node (x )
613
+ full_num_evicted_delta , _ , x , x_next = self ._evict_leaf_node (x , False )
609
614
full_num_evicted += full_num_evicted_delta
610
615
611
616
# if parent has no more children, it is a leaf. It is possible that this node is lru, so
0 commit comments