@@ -3,6 +3,8 @@ module Database.LSMTree.Internal.Config (
33 -- * Table configuration
44 , TableConfig (.. )
55 , defaultTableConfig
6+ , RunLevelNo (.. )
7+ , runParamsForLevel
68 -- * Table configuration override
79 , TableConfigOverride
810 , applyOverride
@@ -34,16 +36,16 @@ import Control.DeepSeq (NFData (..))
3436import Data.Maybe (fromMaybe )
3537import Data.Monoid (Last (.. ))
3638import Data.Word (Word64 )
37- import Database.LSMTree.Internal.Assertions (assert )
3839import Database.LSMTree.Internal.Entry (NumEntries (.. ))
3940import Database.LSMTree.Internal.Index (IndexType )
4041import qualified Database.LSMTree.Internal.Index as Index
4142 (IndexType (Compact , Ordinary ))
4243import Database.LSMTree.Internal.Run (RunDataCaching (.. ))
4344import Database.LSMTree.Internal.RunAcc (RunBloomFilterAlloc (.. ))
45+ import Database.LSMTree.Internal.RunBuilder (RunParams (.. ))
4446
4547newtype LevelNo = LevelNo Int
46- deriving stock (Show , Eq )
48+ deriving stock (Show , Eq , Ord )
4749 deriving newtype (Enum , NFData )
4850
4951{- ------------------------------------------------------------------------------
@@ -95,6 +97,16 @@ defaultTableConfig =
9597 , confMergeSchedule = defaultMergeSchedule
9698 }
9799
100+ data RunLevelNo = RegularLevel LevelNo | UnionLevel
101+
102+ runParamsForLevel :: TableConfig -> RunLevelNo -> RunParams
103+ runParamsForLevel conf@ TableConfig {.. } levelNo =
104+ RunParams
105+ { runParamCaching = diskCachePolicyForLevel confDiskCachePolicy levelNo
106+ , runParamAlloc = bloomFilterAllocForLevel conf levelNo
107+ , runParamIndex = indexTypeForRun confFencePointerIndex
108+ }
109+
98110{- ------------------------------------------------------------------------------
99111 Table configuration override
100112-------------------------------------------------------------------------------}
@@ -227,9 +239,8 @@ instance NFData BloomFilterAlloc where
227239defaultBloomFilterAlloc :: BloomFilterAlloc
228240defaultBloomFilterAlloc = AllocFixed 10
229241
230- bloomFilterAllocForLevel :: TableConfig -> LevelNo -> RunBloomFilterAlloc
231- bloomFilterAllocForLevel conf (LevelNo l) =
232- assert (l > 0 ) $
242+ bloomFilterAllocForLevel :: TableConfig -> RunLevelNo -> RunBloomFilterAlloc
243+ bloomFilterAllocForLevel conf _levelNo =
233244 case confBloomFilterAlloc conf of
234245 AllocFixed n -> RunAllocFixed n
235246 AllocRequestFPR fpr -> RunAllocRequestFPR fpr
@@ -326,15 +337,16 @@ instance NFData DiskCachePolicy where
326337-- | Interpret the 'DiskCachePolicy' for a level: should we cache data in runs
327338-- at this level.
328339--
329- diskCachePolicyForLevel :: DiskCachePolicy -> LevelNo -> RunDataCaching
330- diskCachePolicyForLevel policy ( LevelNo ln) =
340+ diskCachePolicyForLevel :: DiskCachePolicy -> RunLevelNo -> RunDataCaching
341+ diskCachePolicyForLevel policy levelNo =
331342 case policy of
332- DiskCacheAll -> CacheRunData
333- DiskCacheNone -> NoCacheRunData
334- DiskCacheLevelsAtOrBelow n
335- | ln <= n -> CacheRunData
336- | otherwise -> NoCacheRunData
337-
343+ DiskCacheAll -> CacheRunData
344+ DiskCacheNone -> NoCacheRunData
345+ DiskCacheLevelsAtOrBelow n ->
346+ case levelNo of
347+ RegularLevel l | l <= LevelNo n -> CacheRunData
348+ | otherwise -> NoCacheRunData
349+ UnionLevel -> NoCacheRunData
338350
339351{- ------------------------------------------------------------------------------
340352 Merge schedule
0 commit comments