@@ -203,10 +203,13 @@ invariant = go 1
203203 expectedMergingRunLengths ln mr mrs ls =
204204 case mergePolicyForLevel ln ls of
205205 MergePolicyLevelling ->
206+ assert (mergeLastForLevel ls == MergeLastLevel ) $
206207 case (mr, mrs) of
207208 -- A single incoming run (which thus didn't need merging) must be
208209 -- of the expected size range already
209- (SingleRun r, CompletedMerge {}) ->
210+ (SingleRun r, m) -> do
211+ assertST $ case m of CompletedMerge {} -> True
212+ OngoingMerge {} -> False
210213 assertST $ levellingRunSizeToLevel r == ln
211214
212215 -- A completed merge for levelling can be of almost any size at all!
@@ -222,15 +225,20 @@ invariant = go 1
222225 -- same reasons as above. Although if this is the first merge for
223226 -- a new level, it'll have only 4 runs.
224227 (_, OngoingMerge _ rs _) -> do
225- assertST $ length rs == 4 || length rs == 5
226- assertST $ all (\ r -> tieringRunSizeToLevel r `elem` [ln- 1 , ln]) (take 4 rs)
227- assertST $ all (\ r -> levellingRunSizeToLevel r <= ln+ 1 ) (drop 4 rs)
228+ let incoming = take 4 rs
229+ let resident = drop 4 rs
230+ assertST $ length incoming == 4
231+ assertST $ length resident <= 1
232+ assertST $ all (\ r -> tieringRunSizeToLevel r `elem` [ln- 1 , ln]) incoming
233+ assertST $ all (\ r -> levellingRunSizeToLevel r <= ln+ 1 ) resident
228234
229235 MergePolicyTiering ->
230236 case (mr, mrs, mergeLastForLevel ls) of
231237 -- A single incoming run (which thus didn't need merging) must be
232238 -- of the expected size already
233- (SingleRun r, CompletedMerge {}, _) ->
239+ (SingleRun r, m, _) -> do
240+ assertST $ case m of CompletedMerge {} -> True
241+ OngoingMerge {} -> False
234242 assertST $ tieringRunSizeToLevel r == ln
235243
236244 -- A completed last level run can be of almost any smaller size due
@@ -278,7 +286,7 @@ newMerge tr level mergepolicy mergelast rs = do
278286 mergeCost = cost,
279287 mergeRunsSize = map Map. size rs
280288 }
281- assert (let l = length rs in l >= 2 && l <= 5 ) $
289+ assert (length rs `elem` [ 4 , 5 ] ) $
282290 MergingRun mergepolicy mergelast <$> newSTRef (OngoingMerge debt rs r)
283291 where
284292 cost = sum (map Map. size rs)
0 commit comments