@@ -18,7 +18,7 @@ module Database.LSMTree.Internal.MergeSchedule (
18
18
, MergingRun (.. )
19
19
, NumRuns (.. )
20
20
, MergingRunState (.. )
21
- , NumStepsDone (.. )
21
+ , TotalCredits (.. )
22
22
-- * Flushes and scheduled merges
23
23
, updatesWithInterleavedFlushes
24
24
, flushWriteBuffer
@@ -278,9 +278,13 @@ newtype NumRuns = NumRuns { unNumRuns :: Int }
278
278
279
279
data MergingRunState m h =
280
280
CompletedMerge ! (Run m h )
281
- | OngoingMerge ! (V. Vector (Run m h )) ! (PrimVar (PrimState m ) Int {- NumStepsDone -} ) !(Merge m h )
281
+ | OngoingMerge
282
+ ! (V. Vector (Run m h ))
283
+ ! (PrimVar (PrimState m ) Int ) -- ^ 'TotalCredits'
284
+ ! (Merge m h )
282
285
283
- newtype NumStepsDone = NumStepsDone { unNumStepsDone :: Int }
286
+ -- | The total number of accumulated credits.
287
+ newtype TotalCredits = TotalCredits { unTotalCredits :: Int }
284
288
deriving stock (Show , Eq )
285
289
286
290
{-# SPECIALISE addReferenceLevels :: TempRegistry IO -> Levels IO h -> IO () #-}
@@ -906,11 +910,11 @@ supplyMergeCredits _ SingleRun{} = pure ()
906
910
supplyMergeCredits (ScaledCredits c) (MergingRun _ _ var) = do
907
911
mergeIsDone <- withMVar var $ \ case
908
912
CompletedMerge {} -> pure False
909
- (OngoingMerge _rs pvar m) -> do
913
+ (OngoingMerge _rs totalCreditsVar m) -> do
910
914
-- n >= c
911
915
(n, stepResult) <- Merge. steps m c
912
- x <- readPrimVar pvar
913
- writePrimVar pvar $! n + x
916
+ prev <- readPrimVar totalCreditsVar
917
+ writePrimVar totalCreditsVar $! prev + c
914
918
pure $ stepResult == MergeComplete
915
919
when mergeIsDone $
916
920
modifyMVarMasked_ var $ \ case
0 commit comments