Skip to content

Commit 4773733

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 1bb5aac commit 4773733

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
@@ -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 =
364365
newMergeDebt :: Debt -> MergeDebt
365366
newMergeDebt 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.
368373
data MergeDebtPaydown =
369374
-- | This remaining merge debt is fully paid off with credits.

0 commit comments

Comments
 (0)