Skip to content

Commit fbc7f47

Browse files
committed
fix calculation of merge debt
The adjustment of the calculation is necessary to avoid assertion failures for the new assertion.
1 parent 18aae49 commit fbc7f47

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

prototypes/ScheduledMerges.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff 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 =
362363
newMergeDebt :: Debt -> MergeDebt
363364
newMergeDebt 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.
366371
data MergeDebtPaydown =
367372
-- | This remaining merge debt is fully paid off with credits.

0 commit comments

Comments
 (0)