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 @@ -285,7 +285,8 @@ newMerge tr level mergepolicy mergelast rs = do
285285 mergeRunsSize = map Map. size rs
286286 }
287287 assert (length rs `elem` [4 , 5 ]) $
288- MergingRun mergepolicy mergelast <$> newSTRef (OngoingMerge debt rs r)
288+ assert (mergeDebtLeft debt >= cost) $
289+ MergingRun mergepolicy mergelast <$> newSTRef (OngoingMerge debt rs r)
289290 where
290291 cost = sum (map Map. size rs)
291292 -- How much we need to discharge before the merge can be guaranteed
@@ -297,7 +298,7 @@ newMerge tr level mergepolicy mergelast rs = do
297298 debt = newMergeDebt $ case mergepolicy of
298299 MergePolicyLevelling -> 4 * tieringRunSize (level- 1 )
299300 + levellingRunSize level
300- MergePolicyTiering -> 4 * tieringRunSize (level- 1 )
301+ MergePolicyTiering -> length rs * tieringRunSize (level- 1 )
301302 -- deliberately lazy:
302303 r = case mergelast of
303304 MergeMidLevel -> (mergek rs)
@@ -362,6 +363,10 @@ data MergeDebt =
362363newMergeDebt :: Debt -> MergeDebt
363364newMergeDebt d = MergeDebt 0 d
364365
366+ mergeDebtLeft :: MergeDebt -> Int
367+ mergeDebtLeft (MergeDebt c d) =
368+ assert (c < d) $ d - c
369+
365370-- | As credits are paid, debt is reduced in batches when sufficient credits have accumulated.
366371data MergeDebtPaydown =
367372 -- | This remaining merge debt is fully paid off with credits.
You can’t perform that action at this time.
0 commit comments