File tree Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Original file line number Diff line number Diff line change @@ -287,7 +287,8 @@ newMerge tr level mergepolicy mergelast rs = do
287287 mergeRunsSize = map Map. size rs
288288 }
289289 assert (length rs `elem` [4 , 5 ]) $
290- MergingRun mergepolicy mergelast <$> newSTRef (OngoingMerge debt rs r)
290+ assert (mergeDebtLeft debt >= cost) $
291+ MergingRun mergepolicy mergelast <$> newSTRef (OngoingMerge debt rs r)
291292 where
292293 cost = sum (map Map. size rs)
293294 -- How much we need to discharge before the merge can be guaranteed
@@ -299,7 +300,7 @@ newMerge tr level mergepolicy mergelast rs = do
299300 debt = newMergeDebt $ case mergepolicy of
300301 MergePolicyLevelling -> 4 * tieringRunSize (level- 1 )
301302 + levellingRunSize level
302- MergePolicyTiering -> 4 * tieringRunSize (level- 1 )
303+ MergePolicyTiering -> length rs * tieringRunSize (level- 1 )
303304 -- deliberately lazy:
304305 r = case mergelast of
305306 MergeMidLevel -> (mergek rs)
@@ -364,6 +365,10 @@ data MergeDebt =
364365newMergeDebt :: Debt -> MergeDebt
365366newMergeDebt d = MergeDebt 0 d
366367
368+ mergeDebtLeft :: MergeDebt -> Int
369+ mergeDebtLeft (MergeDebt c d) =
370+ assert (c < d) $ d - c
371+
367372-- | As credits are paid, debt is reduced in batches when sufficient credits have accumulated.
368373data MergeDebtPaydown =
369374 -- | This remaining merge debt is fully paid off with credits.
You can’t perform that action at this time.
0 commit comments