@@ -24,6 +24,7 @@ module Database.LSMTree.Internal.Snapshot (
2424
2525import Control.Concurrent.Class.MonadMVar.Strict
2626import Control.Concurrent.Class.MonadSTM (MonadSTM )
27+ import Control.DeepSeq (NFData (.. ))
2728import Control.Monad (when )
2829import Control.Monad.Class.MonadST (MonadST )
2930import Control.Monad.Class.MonadThrow (MonadMask )
@@ -66,11 +67,17 @@ import System.FS.BlockIO.API (HasBlockIO)
6667-- is opened at the correct key\/value\/blob type.
6768newtype SnapshotLabel = SnapshotLabel Text
6869 deriving stock (Show , Eq )
70+ deriving newtype NFData
6971
7072-- TODO: revisit if we need three table types.
7173data SnapshotTableType = SnapNormalTable | SnapMonoidalTable | SnapFullTable
7274 deriving stock (Show , Eq )
7375
76+ instance NFData SnapshotTableType where
77+ rnf SnapNormalTable = ()
78+ rnf SnapMonoidalTable = ()
79+ rnf SnapFullTable = ()
80+
7481data SnapshotMetaData = SnapshotMetaData {
7582 -- | See 'SnapshotLabel'.
7683 --
@@ -94,40 +101,58 @@ data SnapshotMetaData = SnapshotMetaData {
94101 }
95102 deriving stock (Show , Eq )
96103
104+ instance NFData SnapshotMetaData where
105+ rnf (SnapshotMetaData a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
106+
97107{- ------------------------------------------------------------------------------
98108 Levels snapshot format
99109-------------------------------------------------------------------------------}
100110
101111newtype SnapLevels r = SnapLevels { getSnapLevels :: V. Vector (SnapLevel r ) }
102112 deriving stock (Show , Eq , Functor , Foldable , Traversable )
113+ deriving newtype NFData
103114
104115data SnapLevel r = SnapLevel {
105116 snapIncoming :: ! (SnapIncomingRun r )
106117 , snapResidentRuns :: ! (V. Vector r )
107118 }
108119 deriving stock (Show , Eq , Functor , Foldable , Traversable )
109120
121+ instance NFData r => NFData (SnapLevel r ) where
122+ rnf (SnapLevel a b) = rnf a `seq` rnf b
123+
110124data SnapIncomingRun r =
111125 SnapMergingRun ! MergePolicyForLevel ! NumRuns ! NumEntries ! UnspentCredits ! MergeKnownCompleted ! (SnapMergingRunState r )
112126 | SnapSingleRun ! r
113127 deriving stock (Show , Eq , Functor , Foldable , Traversable )
114128
129+ instance NFData r => NFData (SnapIncomingRun r ) where
130+ rnf (SnapMergingRun a b c d e f) =
131+ rnf a `seq` rnf b `seq` rnf c `seq` rnf d `seq` rnf e `seq` rnf f
132+ rnf (SnapSingleRun a) = rnf a
133+
115134-- | The total number of unspent credits. This total is used in combination with
116135-- 'SpentCredits' on snapshot load to restore merging work that was lost when
117136-- the snapshot was created.
118137newtype UnspentCredits = UnspentCredits { getUnspentCredits :: Int }
119138 deriving stock (Show , Eq , Read )
139+ deriving newtype NFData
120140
121141data SnapMergingRunState r =
122142 SnapCompletedMerge ! r
123143 | SnapOngoingMerge ! (V. Vector r ) ! SpentCredits ! Merge. Level
124144 deriving stock (Show , Eq , Functor , Foldable , Traversable )
125145
146+ instance NFData r => NFData (SnapMergingRunState r ) where
147+ rnf (SnapCompletedMerge a) = rnf a
148+ rnf (SnapOngoingMerge a b c) = rnf a `seq` rnf b `seq` rnf c
149+
126150-- | The total number of spent credits. This total is used in combination with
127151-- 'UnspentCedits' on snapshot load to restore merging work that was lost when
128152-- the snapshot was created.
129153newtype SpentCredits = SpentCredits { getSpentCredits :: Int }
130154 deriving stock (Show , Eq , Read )
155+ deriving newtype NFData
131156
132157{- ------------------------------------------------------------------------------
133158 Conversion to levels snapshot format
0 commit comments