Skip to content

Commit 199466d

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 4773733 commit 199466d

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
@@ -466,20 +466,24 @@ bufferToRun = id
466466
supplyCredits :: Credit -> Levels s -> ST s ()
467467
supplyCredits n ls =
468468
sequence_
469-
[ supplyMergeCredits (n * creditsForMerge mr) mr | Level mr _rs <- ls ]
469+
[ supplyMergeCredits (ceiling (fromIntegral n * creditsForMerge mr)) mr
470+
| Level mr _rs <- ls
471+
]
470472

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

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

484488
type Event = EventAt EventDetail
485489
data EventAt e = EventAt {

0 commit comments

Comments
 (0)