55module Database.LSMTree.Internal.MergingRun (
66 -- * Merging run
77 MergingRun
8- , NumRuns (.. )
98 , RunParams (.. )
109 , new
1110 , newCompleted
@@ -14,7 +13,6 @@ module Database.LSMTree.Internal.MergingRun (
1413 , supplyCreditsAbsolute
1514 , expectCompleted
1615 , snapshot
17- , numRuns
1816 , totalMergeDebt
1917 , mergeType
2018
@@ -74,12 +72,11 @@ import System.FS.API (HasFS)
7472import System.FS.BlockIO.API (HasBlockIO )
7573
7674data MergingRun t m h = MergingRun {
77- mergeNumRuns :: ! NumRuns
7875
7976 -- | The total merge debt.
8077 --
8178 -- This corresponds to the sum of the number of entries in the input runs.
82- , mergeDebt :: ! MergeDebt
79+ mergeDebt :: ! MergeDebt
8380
8481 -- See $credittracking
8582
@@ -106,10 +103,6 @@ data MergingRun t m h = MergingRun {
106103instance RefCounted m (MergingRun t m h ) where
107104 getRefCounter = mergeRefCounter
108105
109- newtype NumRuns = NumRuns { unNumRuns :: Int }
110- deriving stock (Show , Eq )
111- deriving newtype NFData
112-
113106data MergingRunState t m h =
114107 CompletedMerge
115108 ! (Ref (Run m h ))
@@ -159,18 +152,15 @@ new hfs hbio resolve runParams ty runPaths inputRuns =
159152 runs <- V. mapM (\ r -> withRollback reg (dupRef r) releaseRef) inputRuns
160153 merge <- fromMaybe (error " newMerge: merges can not be empty" )
161154 <$> Merge. new hfs hbio runParams ty resolve runPaths runs
162- let numInputRuns = NumRuns $ V. length runs
163155 let mergeDebt = numEntriesToMergeDebt (V. foldMap' Run. size runs)
164156 unsafeNew
165- numInputRuns
166157 mergeDebt
167158 (SpentCredits 0 )
168159 MergeMaybeCompleted
169160 (OngoingMerge runs merge)
170161
171162{-# SPECIALISE newCompleted ::
172- NumRuns
173- -> MergeDebt
163+ MergeDebt
174164 -> Ref (Run IO h)
175165 -> IO (Ref (MergingRun t IO h)) #-}
176166-- | Create a merging run that is already in the completed state, returning a
@@ -182,16 +172,13 @@ new hfs hbio resolve runParams ty runPaths inputRuns =
182172-- failing after internal resources have already been created.
183173newCompleted ::
184174 (MonadMVar m , MonadMask m , MonadSTM m , MonadST m )
185- => NumRuns -- ^ Since there are no longer any input runs, we need to be
186- -- told how many there were.
187- -> MergeDebt -- ^ Since there are no longer any input runs, we need to be
175+ => MergeDebt -- ^ Since there are no longer any input runs, we need to be
188176 -- told what the merge debt was.
189177 -> Ref (Run m h )
190178 -> m (Ref (MergingRun t m h ))
191- newCompleted numInputRuns mergeDebt inputRun = do
179+ newCompleted mergeDebt inputRun = do
192180 bracketOnError (dupRef inputRun) releaseRef $ \ run ->
193181 unsafeNew
194- numInputRuns
195182 mergeDebt
196183 (SpentCredits (mergeDebtAsCredits mergeDebt)) -- since it is completed
197184 MergeKnownCompleted
@@ -200,26 +187,24 @@ newCompleted numInputRuns mergeDebt inputRun = do
200187{-# INLINE unsafeNew #-}
201188unsafeNew ::
202189 (MonadMVar m , MonadMask m , MonadSTM m , MonadST m )
203- => NumRuns
204- -> MergeDebt
190+ => MergeDebt
205191 -> SpentCredits
206192 -> MergeKnownCompleted
207193 -> MergingRunState t m h
208194 -> m (Ref (MergingRun t m h ))
209- unsafeNew _ (MergeDebt mergeDebt) _ _ _
195+ unsafeNew (MergeDebt mergeDebt) _ _ _
210196 | SpentCredits mergeDebt > maxBound
211197 = throwIO (ErrorCall " MergingRun.new: run size exceeds maximum of 2^40" )
212198
213- unsafeNew mergeNumRuns mergeDebt (SpentCredits spentCredits)
199+ unsafeNew mergeDebt (SpentCredits spentCredits)
214200 knownCompleted state = do
215201 let ! credits = CreditsPair (SpentCredits spentCredits) (UnspentCredits 0 )
216202 mergeCreditsVar <- CreditsVar <$> newPrimVar credits
217203 mergeKnownCompleted <- newMutVar knownCompleted
218204 mergeState <- newMVar $! state
219205 newRef (finalise mergeState) $ \ mergeRefCounter ->
220206 MergingRun {
221- mergeNumRuns
222- , mergeDebt
207+ mergeDebt
223208 , mergeCreditsVar
224209 , mergeKnownCompleted
225210 , mergeState
@@ -265,26 +250,21 @@ duplicateRuns (DeRef mr) =
265250--
266251{-# SPECIALISE snapshot ::
267252 Ref (MergingRun t IO h)
268- -> IO (NumRuns,
269- MergeDebt,
253+ -> IO (MergeDebt,
270254 MergeCredits,
271255 MergingRunState t IO h) #-}
272256snapshot ::
273257 (PrimMonad m , MonadMVar m )
274258 => Ref (MergingRun t m h )
275- -> m (NumRuns ,
276- MergeDebt ,
259+ -> m (MergeDebt ,
277260 MergeCredits ,
278261 MergingRunState t m h )
279262snapshot (DeRef MergingRun {.. }) = do
280263 state <- readMVar mergeState
281264 (SpentCredits spent,
282265 UnspentCredits unspent) <- atomicReadCredits mergeCreditsVar
283266 let supplied = spent + unspent
284- return (mergeNumRuns, mergeDebt, supplied, state)
285-
286- numRuns :: Ref (MergingRun t m h ) -> NumRuns
287- numRuns (DeRef MergingRun {mergeNumRuns}) = mergeNumRuns
267+ return (mergeDebt, supplied, state)
288268
289269totalMergeDebt :: Ref (MergingRun t m h ) -> MergeDebt
290270totalMergeDebt (DeRef MergingRun {mergeDebt}) = mergeDebt
0 commit comments