Skip to content

Commit c380649

Browse files
committed
prototype: supply 1.25 credits for tiering merges
This is necessary to accomodate 5-way merges due to holding back runs that are too small.
1 parent fbc7f47 commit c380649

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

prototypes/ScheduledMerges.hs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -464,20 +464,24 @@ bufferToRun = id
464464
supplyCredits :: Credit -> Levels s -> ST s ()
465465
supplyCredits n ls =
466466
sequence_
467-
[ supplyMergeCredits (n * creditsForMerge mr) mr | Level mr _rs <- ls ]
467+
[ supplyMergeCredits (ceiling (fromIntegral n * creditsForMerge mr)) mr
468+
| Level mr _rs <- ls
469+
]
468470

469471
-- | The general case (and thus worst case) of how many merge credits we need
470472
-- for a level. This is based on the merging policy at the level.
471473
--
472-
creditsForMerge :: MergingRun s -> Credit
474+
creditsForMerge :: MergingRun s -> Float
473475
creditsForMerge SingleRun{} = 0
474476

475-
-- A levelling merge is 5x the cost of a tiering merge.
476-
-- That's because for levelling one of the runs as an input to the merge
477-
-- is the one levelling run which is (up to) 4x bigger than the others put
478-
-- together, so it's 1 + 4.
479-
creditsForMerge (MergingRun MergePolicyLevelling _ _) = 5
480-
creditsForMerge (MergingRun MergePolicyTiering _ _) = 1
477+
-- A levelling merge has 1 input run and one resident run, which is (up to) 4x
478+
-- bigger than the others.
479+
-- It needs to be completed before another run comes in.
480+
creditsForMerge (MergingRun MergePolicyLevelling _ _) = (1 + 4) / 1
481+
482+
-- A tiering merge has 5 runs at most (once could be held back to merged again)
483+
-- and must be completed before the level is full (once 4 more runs come in).
484+
creditsForMerge (MergingRun MergePolicyTiering _ _) = 5 / 4
481485

482486
type Event = EventAt EventDetail
483487
data EventAt e = EventAt {

0 commit comments

Comments
 (0)