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
287
287
mergeRunsSize = map Map. size rs
288
288
}
289
289
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)
291
292
where
292
293
cost = sum (map Map. size rs)
293
294
-- How much we need to discharge before the merge can be guaranteed
@@ -299,7 +300,7 @@ newMerge tr level mergepolicy mergelast rs = do
299
300
debt = newMergeDebt $ case mergepolicy of
300
301
MergePolicyLevelling -> 4 * tieringRunSize (level- 1 )
301
302
+ levellingRunSize level
302
- MergePolicyTiering -> 4 * tieringRunSize (level- 1 )
303
+ MergePolicyTiering -> length rs * tieringRunSize (level- 1 )
303
304
-- deliberately lazy:
304
305
r = case mergelast of
305
306
MergeMidLevel -> (mergek rs)
@@ -364,6 +365,10 @@ data MergeDebt =
364
365
newMergeDebt :: Debt -> MergeDebt
365
366
newMergeDebt d = MergeDebt 0 d
366
367
368
+ mergeDebtLeft :: MergeDebt -> Int
369
+ mergeDebtLeft (MergeDebt c d) =
370
+ assert (c < d) $ d - c
371
+
367
372
-- | As credits are paid, debt is reduced in batches when sufficient credits have accumulated.
368
373
data MergeDebtPaydown =
369
374
-- | This remaining merge debt is fully paid off with credits.
You can’t perform that action at this time.
0 commit comments