Skip to content

Commit 7d47047

Browse files
committed
feat: validate checksums in openWriteBuffer
1 parent acab4d9 commit 7d47047

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/Database/LSMTree/Internal/Snapshot.hs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,19 @@ import Data.Text (Text)
4141
import Data.Traversable (for)
4242
import qualified Data.Vector as V
4343
import Database.LSMTree.Internal.Config
44+
import Database.LSMTree.Internal.CRC32C (checkCRC)
45+
import qualified Database.LSMTree.Internal.CRC32C as CRC
4446
import Database.LSMTree.Internal.Entry
4547
import Database.LSMTree.Internal.Lookup (ResolveSerialisedValue)
4648
import Database.LSMTree.Internal.Merge (MergeType (..))
4749
import qualified Database.LSMTree.Internal.Merge as Merge
4850
import Database.LSMTree.Internal.MergeSchedule
4951
import Database.LSMTree.Internal.MergingRun (NumRuns (..))
5052
import qualified Database.LSMTree.Internal.MergingRun as MR
51-
import Database.LSMTree.Internal.Paths (ActiveDir (..), ForKOps (..),
52-
NamedSnapshotDir (..), RunFsPaths (..),
53-
WriteBufferFsPaths (..), pathsForRunFiles,
53+
import Database.LSMTree.Internal.Paths (ActiveDir (..), ForBlob (..),
54+
ForKOps (..), NamedSnapshotDir (..), RunFsPaths (..),
55+
WriteBufferFsPaths (..),
56+
fromChecksumsFileForWriteBufferFiles, pathsForRunFiles,
5457
runChecksumsPath, writeBufferBlobPath,
5558
writeBufferChecksumsPath, writeBufferKOpsPath)
5659
import Database.LSMTree.Internal.Run (Run)
@@ -301,6 +304,12 @@ openWriteBuffer ::
301304
-> WriteBufferFsPaths
302305
-> m (WriteBuffer, Ref (WriteBufferBlobs m h))
303306
openWriteBuffer reg resolve hfs hbio uc activeDir snapWriteBufferPaths = do
307+
-- Check the checksums
308+
(expectedChecksumForKOps, expectedChecksumForBlob) <-
309+
CRC.expectValidFile (writeBufferChecksumsPath snapWriteBufferPaths) . fromChecksumsFileForWriteBufferFiles
310+
=<< CRC.readChecksumsFile hfs (writeBufferChecksumsPath snapWriteBufferPaths)
311+
checkCRC hfs hbio False (unForKOps expectedChecksumForKOps) (writeBufferKOpsPath snapWriteBufferPaths)
312+
checkCRC hfs hbio False (unForBlob expectedChecksumForBlob) (writeBufferBlobPath snapWriteBufferPaths)
304313
-- Copy the write buffer blobs file to the active directory and open it.
305314
activeWriteBufferNumber <- uniqueToInt <$> incrUniqCounter uc
306315
let activeWriteBufferBlobPath =

0 commit comments

Comments
 (0)