Skip to content

Commit 1c9ae3a

Browse files
committed
feat(extras): add salt
1 parent 8d78948 commit 1c9ae3a

File tree

4 files changed

+36
-23
lines changed

4 files changed

+36
-23
lines changed

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,16 @@ withMergingRun ::
4646
=> HasFS IO h
4747
-> HasBlockIO IO h
4848
-> ResolveSerialisedValue
49+
-> SessionSalt
4950
-> RunBuilder.RunParams
5051
-> FS.FsPath
5152
-> UniqCounter IO
5253
-> SerialisedMergingRunData t
5354
-> (Ref (MergingRun t IO h) -> IO a)
5455
-> IO a
55-
withMergingRun hfs hbio resolve runParams path counter mrd = do
56+
withMergingRun hfs hbio resolve sessionSalt runParams path counter mrd = do
5657
bracket
57-
(unsafeCreateMergingRun hfs hbio resolve runParams path counter mrd)
58+
(unsafeCreateMergingRun hfs hbio resolve sessionSalt runParams path counter mrd)
5859
releaseRef
5960

6061
-- | Flush serialised merging run data to disk.
@@ -68,24 +69,25 @@ unsafeCreateMergingRun ::
6869
=> HasFS IO h
6970
-> HasBlockIO IO h
7071
-> ResolveSerialisedValue
72+
-> SessionSalt
7173
-> RunBuilder.RunParams
7274
-> FS.FsPath
7375
-> UniqCounter IO
7476
-> SerialisedMergingRunData t
7577
-> IO (Ref (MergingRun t IO h))
76-
unsafeCreateMergingRun hfs hbio resolve runParams path counter = \case
78+
unsafeCreateMergingRun hfs hbio resolve sessionSalt runParams path counter = \case
7779
CompletedMergeData _ rd -> do
78-
withRun hfs hbio runParams path counter rd $ \run -> do
80+
withRun hfs hbio sessionSalt runParams path counter rd $ \run -> do
7981
-- slightly hacky, generally it's larger
8082
let totalDebt = MR.numEntriesToMergeDebt (Run.size run)
8183
MR.newCompleted totalDebt run
8284

8385
OngoingMergeData mergeType rds -> do
84-
withRuns hfs hbio runParams path counter (toRunData <$> rds)
86+
withRuns hfs hbio sessionSalt runParams path counter (toRunData <$> rds)
8587
$ \runs -> do
8688
n <- incrUniqCounter counter
8789
let fsPaths = RunFsPaths path (RunNumber (uniqueToInt n))
88-
MR.new hfs hbio resolve runParams mergeType
90+
MR.new hfs hbio resolve sessionSalt runParams mergeType
8991
fsPaths (V.fromList runs)
9092

9193
{-------------------------------------------------------------------------------

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Database.LSMTree.Extras.RunData
2727
import qualified Database.LSMTree.Internal.MergingRun as MR
2828
import Database.LSMTree.Internal.MergingTree (MergingTree)
2929
import qualified Database.LSMTree.Internal.MergingTree as MT
30+
import Database.LSMTree.Internal.Paths (SessionSalt)
3031
import Database.LSMTree.Internal.RunBuilder (RunParams)
3132
import Database.LSMTree.Internal.Serialise
3233
import Database.LSMTree.Internal.UniqCounter
@@ -44,15 +45,16 @@ withMergingTree ::
4445
HasFS IO h
4546
-> HasBlockIO IO h
4647
-> ResolveSerialisedValue
48+
-> SessionSalt
4749
-> RunParams
4850
-> FS.FsPath
4951
-> UniqCounter IO
5052
-> SerialisedMergingTreeData
5153
-> (Ref (MergingTree IO h) -> IO a)
5254
-> IO a
53-
withMergingTree hfs hbio resolve runParams path counter mrd = do
55+
withMergingTree hfs hbio resolve sessionSalt runParams path counter mrd = do
5456
bracket
55-
(unsafeCreateMergingTree hfs hbio resolve runParams path counter mrd)
57+
(unsafeCreateMergingTree hfs hbio resolve sessionSalt runParams path counter mrd)
5658
releaseRef
5759

5860
-- | Flush serialised merging tree data to disk.
@@ -65,19 +67,20 @@ unsafeCreateMergingTree ::
6567
HasFS IO h
6668
-> HasBlockIO IO h
6769
-> ResolveSerialisedValue
70+
-> SessionSalt
6871
-> RunParams
6972
-> FS.FsPath
7073
-> UniqCounter IO
7174
-> SerialisedMergingTreeData
7275
-> IO (Ref (MergingTree IO h))
73-
unsafeCreateMergingTree hfs hbio resolve runParams path counter = go
76+
unsafeCreateMergingTree hfs hbio resolve sessionSalt runParams path counter = go
7477
where
7578
go = \case
7679
CompletedTreeMergeData rd ->
77-
withRun hfs hbio runParams path counter rd $ \run ->
80+
withRun hfs hbio sessionSalt runParams path counter rd $ \run ->
7881
MT.newCompletedMerge run
7982
OngoingTreeMergeData mrd ->
80-
withMergingRun hfs hbio resolve runParams path counter mrd $ \mr ->
83+
withMergingRun hfs hbio resolve sessionSalt runParams path counter mrd $ \mr ->
8184
MT.newOngoingMerge mr
8285
PendingLevelMergeData prds mtd ->
8386
withPreExistingRuns prds $ \prs ->
@@ -100,11 +103,11 @@ unsafeCreateMergingTree hfs hbio resolve runParams path counter = go
100103

101104
withPreExistingRuns [] act = act []
102105
withPreExistingRuns (PreExistingRunData rd : rest) act =
103-
withRun hfs hbio runParams path counter rd $ \r ->
106+
withRun hfs hbio sessionSalt runParams path counter rd $ \r ->
104107
withPreExistingRuns rest $ \prs ->
105108
act (MT.PreExistingRun r : prs)
106109
withPreExistingRuns (PreExistingMergingRunData mrd : rest) act =
107-
withMergingRun hfs hbio resolve runParams path counter mrd $ \mr ->
110+
withMergingRun hfs hbio resolve sessionSalt runParams path counter mrd $ \mr ->
108111
withPreExistingRuns rest $ \prs ->
109112
act (MT.PreExistingMergingRun mr : prs)
110113

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ deriving anyclass instance NoThunks RunNumber
237237
deriving stock instance Generic SessionRoot
238238
deriving anyclass instance NoThunks SessionRoot
239239

240+
deriving stock instance Generic SessionSalt
241+
deriving anyclass instance NoThunks SessionSalt
242+
240243
deriving stock instance Generic RunFsPaths
241244
deriving anyclass instance NoThunks RunFsPaths
242245

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,47 +75,50 @@ import Test.QuickCheck
7575
withRun ::
7676
HasFS IO h
7777
-> HasBlockIO IO h
78+
-> SessionSalt
7879
-> RunParams
7980
-> FS.FsPath
8081
-> UniqCounter IO
8182
-> SerialisedRunData
8283
-> (Ref (Run IO h) -> IO a)
8384
-> IO a
84-
withRun hfs hbio runParams path counter rd = do
85+
withRun hfs hbio sessionSalt runParams path counter rd = do
8586
bracket
86-
(unsafeCreateRun hfs hbio runParams path counter rd)
87+
(unsafeCreateRun hfs hbio sessionSalt runParams path counter rd)
8788
releaseRef
8889

8990
-- | Create a temporary 'Run' using 'unsafeCreateRunAt'.
9091
withRunAt ::
9192
HasFS IO h
9293
-> HasBlockIO IO h
94+
-> SessionSalt
9395
-> RunParams
9496
-> RunFsPaths
9597
-> SerialisedRunData
9698
-> (Ref (Run IO h) -> IO a)
9799
-> IO a
98-
withRunAt hfs hbio runParams path rd = do
100+
withRunAt hfs hbio sessionSalt runParams path rd = do
99101
bracket
100-
(unsafeCreateRunAt hfs hbio runParams path rd)
102+
(unsafeCreateRunAt hfs hbio sessionSalt runParams path rd)
101103
releaseRef
102104

103105
{-# INLINABLE withRuns #-}
104106
-- | Create temporary 'Run's using 'unsafeCreateRun'.
105107
withRuns ::
106108
HasFS IO h
107109
-> HasBlockIO IO h
110+
-> SessionSalt
108111
-> RunParams
109112
-> FS.FsPath
110113
-> UniqCounter IO
111114
-> [SerialisedRunData]
112115
-> ([Ref (Run IO h)] -> IO a)
113116
-> IO a
114-
withRuns hfs hbio runParams path counter = go
117+
withRuns hfs hbio sessionSalt runParams path counter = go
115118
where
116119
go [] act = act []
117120
go (rd:rds) act =
118-
withRun hfs hbio runParams path counter rd $ \r ->
121+
withRun hfs hbio sessionSalt runParams path counter rd $ \r ->
119122
go rds $ \rs ->
120123
act (r:rs)
121124

@@ -124,15 +127,16 @@ withRuns hfs hbio runParams path counter = go
124127
unsafeCreateRun ::
125128
HasFS IO h
126129
-> HasBlockIO IO h
130+
-> SessionSalt
127131
-> RunParams
128132
-> FS.FsPath
129133
-> UniqCounter IO
130134
-> SerialisedRunData
131135
-> IO (Ref (Run IO h))
132-
unsafeCreateRun fs hbio runParams path counter rd = do
136+
unsafeCreateRun fs hbio sessionSalt runParams path counter rd = do
133137
n <- incrUniqCounter counter
134138
let fsPaths = RunFsPaths path (uniqueToRunNumber n)
135-
unsafeCreateRunAt fs hbio runParams fsPaths rd
139+
unsafeCreateRunAt fs hbio sessionSalt runParams fsPaths rd
136140

137141
-- | Flush serialised run data to disk as if it were a write buffer.
138142
--
@@ -143,18 +147,19 @@ unsafeCreateRun fs hbio runParams path counter rd = do
143147
unsafeCreateRunAt ::
144148
HasFS IO h
145149
-> HasBlockIO IO h
150+
-> SessionSalt
146151
-> RunParams
147152
-> RunFsPaths
148153
-> SerialisedRunData
149154
-> IO (Ref (Run IO h))
150-
unsafeCreateRunAt fs hbio runParams fsPaths (RunData m) = do
155+
unsafeCreateRunAt fs hbio sessionSalt runParams fsPaths (RunData m) = do
151156
-- the WBB file path doesn't have to be at a specific place relative to
152157
-- the run we want to create, but fsPaths should already point to a unique
153158
-- location, so we just append something to not conflict with that.
154159
let blobpath = FS.addExtension (runBlobPath fsPaths) ".wb"
155160
bracket (WBB.new fs blobpath) releaseRef $ \wbblobs -> do
156161
wb <- WB.fromMap <$> traverse (traverse (WBB.addBlob fs wbblobs)) m
157-
Run.fromWriteBuffer fs hbio runParams fsPaths wb wbblobs
162+
Run.fromWriteBuffer fs hbio sessionSalt runParams fsPaths wb wbblobs
158163

159164
-- | Create a 'RunFsPaths' using an empty 'FsPath'. The empty path corresponds
160165
-- to the "root" or "mount point" of a 'HasFS' instance.

0 commit comments

Comments
 (0)