Skip to content

Commit 9c94a0d

Browse files
authored
Merge pull request #635 from IntersectMBO/dcoutts/NumRuns-remove-unused
Remove unused NumRuns from MergingRun
2 parents 1b88df2 + 0893b08 commit 9c94a0d

File tree

32 files changed

+40
-88
lines changed

32 files changed

+40
-88
lines changed

src-extras/Database/LSMTree/Extras/MergingRunData.hs

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ unsafeCreateMergingRun ::
7575
-> SerialisedMergingRunData t
7676
-> IO (Ref (MergingRun t IO h))
7777
unsafeCreateMergingRun hfs hbio resolve indexType path counter = \case
78-
CompletedMergeData _ numRuns rd -> do
78+
CompletedMergeData _ rd -> do
7979
withRun hfs hbio indexType path counter rd $ \run -> do
8080
-- slightly hacky, generally it's larger
8181
let totalDebt = MR.numEntriesToMergeDebt (Run.size run)
82-
MR.newCompleted numRuns totalDebt run
82+
MR.newCompleted totalDebt run
8383

8484
OngoingMergeData mergeType rds -> do
8585
withRuns hfs hbio indexType path counter (toRunData <$> rds)
@@ -103,21 +103,19 @@ unsafeCreateMergingRun hfs hbio resolve indexType path counter = \case
103103
-- TODO: Generate merge credits and supply them in 'unsafeCreateMergingRun',
104104
-- similarly to how @ScheduledMergesTest@ does it.
105105
data MergingRunData t k v b =
106-
CompletedMergeData t MR.NumRuns (RunData k v b)
106+
CompletedMergeData t (RunData k v b)
107107
| OngoingMergeData t [NonEmptyRunData k v b] -- ^ at least 2 inputs
108108
deriving stock (Show, Eq)
109109

110110
mergingRunDataMergeType :: MergingRunData t k v b -> t
111111
mergingRunDataMergeType = \case
112-
CompletedMergeData mt _ _ -> mt
113-
OngoingMergeData mt _ -> mt
112+
CompletedMergeData mt _ -> mt
113+
OngoingMergeData mt _ -> mt
114114

115115
-- | See @mergeInvariant@ in the prototype.
116116
mergingRunDataInvariant :: MergingRunData t k v b -> Either String ()
117117
mergingRunDataInvariant = \case
118-
CompletedMergeData _ (MR.NumRuns n) _ ->
119-
assertI "completed merges are non-trivial (at least two inputs)" $
120-
n >= 2
118+
CompletedMergeData _ _ -> Right ()
121119
OngoingMergeData _ rds -> do
122120
assertI "ongoing merges are non-trivial (at least two inputs)" $
123121
length rds >= 2
@@ -130,8 +128,8 @@ mapMergingRunData ::
130128
=> (k -> k') -> (v -> v') -> (b -> b')
131129
-> MergingRunData t k v b -> MergingRunData t k' v' b'
132130
mapMergingRunData f g h = \case
133-
CompletedMergeData t n r ->
134-
CompletedMergeData t n $ mapRunData f g h r
131+
CompletedMergeData t r ->
132+
CompletedMergeData t $ mapRunData f g h r
135133
OngoingMergeData t rs ->
136134
OngoingMergeData t $ map (mapNonEmptyRunData f g h) rs
137135

@@ -150,7 +148,7 @@ serialiseMergingRunData =
150148

151149
labelMergingRunData ::
152150
Show t => SerialisedMergingRunData t -> Property -> Property
153-
labelMergingRunData (CompletedMergeData mt _ rd) =
151+
labelMergingRunData (CompletedMergeData mt rd) =
154152
tabulate "merging run state" ["CompletedMerge"]
155153
. tabulate "merge type" [show mt]
156154
. labelRunData rd
@@ -176,9 +174,8 @@ genMergingRunData genMergeType genKey genVal genBlob =
176174
QC.oneof
177175
[ do
178176
mt <- genMergeType
179-
numRuns <- MR.NumRuns <$> QC.chooseInt (2, 8)
180177
rd <- genRunData genKey genVal genBlob
181-
pure (CompletedMergeData mt numRuns rd)
178+
pure (CompletedMergeData mt rd)
182179
, do
183180
s <- QC.getSize
184181
mt <- genMergeType
@@ -202,13 +199,9 @@ shrinkMergingRunData ::
202199
-> MergingRunData t k v b
203200
-> [MergingRunData t k v b]
204201
shrinkMergingRunData shrinkKey shrinkVal shrinkBlob = \case
205-
CompletedMergeData mt numRuns rd ->
206-
[ CompletedMergeData mt numRuns' rd'
207-
| (numRuns', rd') <-
208-
liftShrink2
209-
(fmap MR.NumRuns . filter (>= 2) . shrink . MR.unNumRuns)
210-
(shrinkRunData shrinkKey shrinkVal shrinkBlob)
211-
(numRuns, rd)
202+
CompletedMergeData mt rd ->
203+
[ CompletedMergeData mt rd'
204+
| rd' <- shrinkRunData shrinkKey shrinkVal shrinkBlob rd
212205
]
213206
OngoingMergeData mt rds ->
214207
[ OngoingMergeData mt rds'

src-extras/Database/LSMTree/Extras/NoThunks.hs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,6 @@ deriving anyclass instance ( Typeable m, Typeable (PrimState m), Typeable h
361361
, NoThunks t
362362
) => NoThunks (MergingRunState t m h)
363363

364-
deriving stock instance Generic NumRuns
365-
deriving anyclass instance NoThunks NumRuns
366-
367364
deriving stock instance Generic MergeDebt
368365
deriving anyclass instance NoThunks MergeDebt
369366

src/Database/LSMTree/Internal/MergingRun.hs

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
module 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)
7472
import System.FS.BlockIO.API (HasBlockIO)
7573

7674
data 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 {
106103
instance 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-
113106
data 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.
183173
newCompleted ::
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 #-}
201188
unsafeNew ::
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) #-}
272256
snapshot ::
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)
279262
snapshot (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

289269
totalMergeDebt :: Ref (MergingRun t m h) -> MergeDebt
290270
totalMergeDebt (DeRef MergingRun {mergeDebt}) = mergeDebt

src/Database/LSMTree/Internal/Snapshot.hs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ import Database.LSMTree.Internal.IncomingRun
5454
import Database.LSMTree.Internal.Lookup (ResolveSerialisedValue)
5555
import qualified Database.LSMTree.Internal.Merge as Merge
5656
import Database.LSMTree.Internal.MergeSchedule
57-
import Database.LSMTree.Internal.MergingRun (NumRuns (..))
5857
import qualified Database.LSMTree.Internal.MergingRun as MR
5958
import qualified Database.LSMTree.Internal.MergingTree as MT
6059
import Database.LSMTree.Internal.Paths (ActiveDir (..), ForBlob (..),
@@ -193,12 +192,12 @@ newtype SuppliedCredits = SuppliedCredits { getSuppliedCredits :: Int }
193192
deriving newtype NFData
194193

195194
data SnapMergingRun t r =
196-
SnapCompletedMerge !NumRuns !MergeDebt !r
195+
SnapCompletedMerge !MergeDebt !r
197196
| SnapOngoingMerge !RunParams !MergeCredits !(V.Vector r) !t
198197
deriving stock (Eq, Functor, Foldable, Traversable)
199198

200199
instance (NFData t, NFData r) => NFData (SnapMergingRun t r) where
201-
rnf (SnapCompletedMerge a b c) = rnf a `seq` rnf b `seq` rnf c
200+
rnf (SnapCompletedMerge a b) = rnf a `seq` rnf b
202201
rnf (SnapOngoingMerge a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
203202

204203
{-------------------------------------------------------------------------------
@@ -429,10 +428,10 @@ toSnapMergingRun ::
429428
toSnapMergingRun !mr = do
430429
-- TODO: MR.snapshot needs to return duplicated run references, and we
431430
-- need to arrange to release them when the snapshotting is done.
432-
(numRuns, mergeDebt, mergeCredits, state) <- MR.snapshot mr
431+
( mergeDebt, mergeCredits, state) <- MR.snapshot mr
433432
case state of
434433
MR.CompletedMerge r ->
435-
pure $! SnapCompletedMerge numRuns mergeDebt r
434+
pure $! SnapCompletedMerge mergeDebt r
436435

437436
MR.OngoingMerge rs m ->
438437
pure $! SnapOngoingMerge runParams mergeCredits rs mergeType
@@ -715,9 +714,8 @@ fromSnapMergingRun ::
715714
-> ActiveDir
716715
-> SnapMergingRun t (Ref (Run m h))
717716
-> m (Ref (MR.MergingRun t m h))
718-
fromSnapMergingRun _hfs _hbio _uc _resolve _dir
719-
(SnapCompletedMerge numRuns mergeDebt r) =
720-
MR.newCompleted numRuns mergeDebt r
717+
fromSnapMergingRun _ _ _ _ _ (SnapCompletedMerge mergeDebt r) =
718+
MR.newCompleted mergeDebt r
721719

722720
fromSnapMergingRun hfs hbio uc resolve dir
723721
(SnapOngoingMerge runParams mergeCredits rs mergeType) = do

src/Database/LSMTree/Internal/Snapshot/Codec.hs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import Database.LSMTree.Internal.CRC32C
3232
import qualified Database.LSMTree.Internal.CRC32C as FS
3333
import Database.LSMTree.Internal.Entry
3434
import Database.LSMTree.Internal.MergeSchedule
35-
import Database.LSMTree.Internal.MergingRun (NumRuns (..))
3635
import qualified Database.LSMTree.Internal.MergingRun as MR
3736
import Database.LSMTree.Internal.RunBuilder (IndexType (..),
3837
RunBloomFilterAlloc (..), RunDataCaching (..),
@@ -572,14 +571,6 @@ instance DecodeVersioned r => DecodeVersioned (SnapIncomingRun r) where
572571
(2, 1) -> SnapIncomingSingleRun <$> decodeVersioned v
573572
_ -> fail ("[SnapIncomingRun] Unexpected combination of list length and tag: " <> show (n, tag))
574573

575-
-- NumRuns
576-
577-
instance Encode NumRuns where
578-
encode (NumRuns x) = encodeInt x
579-
580-
instance DecodeVersioned NumRuns where
581-
decodeVersioned V0 = NumRuns <$> decodeInt
582-
583574
-- MergePolicyForLevel
584575

585576
instance Encode MergePolicyForLevel where
@@ -597,10 +588,9 @@ instance DecodeVersioned MergePolicyForLevel where
597588
-- SnapMergingRun
598589

599590
instance (Encode t, Encode r) => Encode (SnapMergingRun t r) where
600-
encode (SnapCompletedMerge nr md r) =
601-
encodeListLen 4
591+
encode (SnapCompletedMerge md r) =
592+
encodeListLen 3
602593
<> encodeWord 0
603-
<> encode nr
604594
<> encode md
605595
<> encode r
606596
encode (SnapOngoingMerge rp mc rs mt) =
@@ -616,8 +606,7 @@ instance (DecodeVersioned t, DecodeVersioned r) => DecodeVersioned (SnapMergingR
616606
n <- decodeListLen
617607
tag <- decodeWord
618608
case (n, tag) of
619-
(4, 0) -> SnapCompletedMerge <$> decodeVersioned v
620-
<*> decodeVersioned v
609+
(3, 0) -> SnapCompletedMerge <$> decodeVersioned v
621610
<*> decodeVersioned v
622611
(5, 1) -> SnapOngoingMerge <$> decodeVersioned v <*> decodeVersioned v
623612
<*> decodeVersioned v <*> decodeVersioned v

test/Test/Database/LSMTree/Internal/MergingTree.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ modelFoldMergingTree = goMergingTree
179179

180180
goMergingRun :: IsMergeType t => SerialisedMergingRunData t -> Map SerialisedKey SerialisedEntry
181181
goMergingRun = \case
182-
CompletedMergeData _ _ r -> unRunData r
182+
CompletedMergeData _ r -> unRunData r
183183
OngoingMergeData mt rs -> modelMerge mt (map (unRunData . toRunData) rs)
184184

185185
modelMerge :: (Ord k, IsMergeType t) => t -> [Map k SerialisedEntry] -> Map k SerialisedEntry

test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ testAll test = [
172172
, test (Proxy @(V.Vector SnapshotRun))
173173
, test (Proxy @RunNumber)
174174
, test (Proxy @(SnapIncomingRun SnapshotRun))
175-
, test (Proxy @NumRuns)
176175
, test (Proxy @MergePolicyForLevel)
177176
, test (Proxy @RunDataCaching)
178177
, test (Proxy @RunBloomFilterAlloc)
@@ -320,21 +319,19 @@ instance Arbitrary r => Arbitrary (SnapIncomingRun r) where
320319
| (a', b', c', d') <- shrink (a, b, c, d) ]
321320
shrink (SnapIncomingSingleRun a) = SnapIncomingSingleRun <$> shrink a
322321

323-
deriving newtype instance Arbitrary NumRuns
324-
325322
instance Arbitrary MergePolicyForLevel where
326323
arbitrary = elements [LevelTiering, LevelLevelling]
327324
shrink _ = []
328325

329326
instance (Arbitrary t, Arbitrary r) => Arbitrary (SnapMergingRun t r) where
330327
arbitrary = oneof [
331-
SnapCompletedMerge <$> arbitrary <*> arbitrary <*> arbitrary
328+
SnapCompletedMerge <$> arbitrary <*> arbitrary
332329
, SnapOngoingMerge <$> arbitrary <*> arbitrary
333330
<*> arbitraryShortVector <*> arbitrary
334331
]
335-
shrink (SnapCompletedMerge a b c) =
336-
[ SnapCompletedMerge a' b' c'
337-
| (a', b', c') <- shrink (a, b, c) ]
332+
shrink (SnapCompletedMerge a b) =
333+
[ SnapCompletedMerge a' b'
334+
| (a', b') <- shrink (a, b) ]
338335
shrink (SnapOngoingMerge a b c d) =
339336
[ SnapOngoingMerge a' b' c' d'
340337
| (a', b', c', d') <- shrink (a, b, c, d) ]

test/Test/Database/LSMTree/Internal/Snapshot/Codec/Golden.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import Database.LSMTree.Internal.Config (FencePointerIndex (..),
1818
import Database.LSMTree.Internal.MergeSchedule
1919
(MergePolicyForLevel (..), NominalCredits (..),
2020
NominalDebt (..))
21-
import Database.LSMTree.Internal.MergingRun (NumRuns (..))
2221
import qualified Database.LSMTree.Internal.MergingRun as MR
2322
import Database.LSMTree.Internal.RunBuilder (IndexType (..),
2423
RunBloomFilterAlloc (..), RunDataCaching (..))
@@ -255,9 +254,8 @@ enumerateSnapMergingRun ::
255254
-> [(ComponentAnnotation, SnapMergingRun t SnapshotRun)]
256255
enumerateSnapMergingRun mTypes =
257256
[ (fuseAnnotations ["C0", blank, blank],
258-
SnapCompletedMerge numRuns mergeDebt enumerateOpenRunInfo)
259-
| numRuns <- NumRuns <$> [ magicNumber1 ]
260-
, mergeDebt <- (MR.MergeDebt. MR.MergeCredits) <$> [ magicNumber2 ]
257+
SnapCompletedMerge mergeDebt enumerateOpenRunInfo)
258+
| mergeDebt <- (MR.MergeDebt. MR.MergeCredits) <$> [ magicNumber2 ]
261259
]
262260
++ [ (fuseAnnotations ["C1", a, b],
263261
SnapOngoingMerge runParams mergeCredits runVec mType)

0 commit comments

Comments
 (0)