Skip to content

Commit 5203408

Browse files
committed
Use more consistent reference handling for newIncomingMergingRun
It should duplicate its input reference for consistency, since it retains it.
1 parent 53aa7e3 commit 5203408

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/Database/LSMTree/Internal/MergeSchedule.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -420,14 +420,14 @@ newIncomingSingleRun r = Single <$> dupRef r
420420

421421
{-# INLINE newIncomingMergingRun #-}
422422
newIncomingMergingRun ::
423-
PrimMonad m
423+
(PrimMonad m, MonadThrow m)
424424
=> MergePolicyForLevel
425425
-> NominalDebt
426426
-> Ref (MergingRun MR.LevelMergeType m h)
427427
-> m (IncomingRun m h)
428428
newIncomingMergingRun mergePolicy nominalDebt mr = do
429429
nominalCreditsVar <- newPrimVar (NominalCredits 0)
430-
return (Merging mergePolicy nominalDebt nominalCreditsVar mr)
430+
Merging mergePolicy nominalDebt nominalCreditsVar <$> dupRef mr
431431

432432
{-# SPECIALISE supplyCreditsIncomingRun ::
433433
TableConfig
@@ -1029,12 +1029,12 @@ newIncomingRunAtLevel tr hfs hbio
10291029
TraceNewMerge (V.map Run.size rs) (runNumber runPaths)
10301030
runParams mergePolicy mergeType
10311031

1032-
mr <- MR.new hfs hbio resolve runParams mergeType runPaths rs
1033-
1034-
assert (MR.totalMergeDebt mr <= maxMergeDebt conf mergePolicy ln) $ pure ()
1035-
1036-
let nominalDebt = nominalDebtForLevel conf ln
1037-
newIncomingMergingRun mergePolicy nominalDebt mr
1032+
bracket
1033+
(MR.new hfs hbio resolve runParams mergeType runPaths rs)
1034+
releaseRef $ \mr ->
1035+
assert (MR.totalMergeDebt mr <= maxMergeDebt conf mergePolicy ln) $
1036+
let nominalDebt = nominalDebtForLevel conf ln in
1037+
newIncomingMergingRun mergePolicy nominalDebt mr
10381038

10391039
mergingRunParamsForLevel ::
10401040
ActiveDir

src/Database/LSMTree/Internal/Snapshot.hs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ import Control.Concurrent.Class.MonadSTM (MonadSTM)
3939
import Control.DeepSeq (NFData (..))
4040
import Control.Monad (void)
4141
import Control.Monad.Class.MonadST (MonadST)
42-
import Control.Monad.Class.MonadThrow (MonadMask, bracketOnError)
42+
import Control.Monad.Class.MonadThrow (MonadMask, bracket,
43+
bracketOnError)
4344
import Control.Monad.Primitive (PrimMonad)
4445
import Control.RefCount
4546
import Data.Foldable (sequenceA_)
@@ -652,14 +653,17 @@ fromSnapLevels hfs hbio uc conf resolve reg dir (SnapLevels levels) =
652653
newIncomingSingleRun run
653654

654655
fromSnapIncomingRun ln (SnapMergingRun mergePolicy nominalDebt
655-
nominalCredits smrs) = do
656-
mr <- fromSnapMergingRunState hfs hbio uc resolve dir smrs
657-
ir <- newIncomingMergingRun mergePolicy nominalDebt mr
658-
-- This will set the correct nominal credits, but it will not do any more
659-
-- merging work because fromSnapMergingRunState already supplies all the
660-
-- merging credits already.
661-
supplyCreditsIncomingRun conf ln ir nominalCredits
662-
return ir
656+
nominalCredits smrs) =
657+
bracket
658+
(fromSnapMergingRunState hfs hbio uc resolve dir smrs)
659+
releaseRef $ \mr -> do
660+
661+
ir <- newIncomingMergingRun mergePolicy nominalDebt mr
662+
-- This will set the correct nominal credits, but it will not do any
663+
-- more merging work because fromSnapMergingRunState already supplies
664+
-- all the merging credits already.
665+
supplyCreditsIncomingRun conf ln ir nominalCredits
666+
return ir
663667

664668
{-# SPECIALISE fromSnapMergingRunState ::
665669
MR.IsMergeType t

0 commit comments

Comments
 (0)