| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | GHC2021 | 
Database.LSMTree.Extras.MergingRunData
Description
Utilities for generating MergingRuns. Tests and benchmarks should
 preferably use these utilities instead of (re-)defining their own.
Synopsis
- withMergingRun :: IsMergeType t => HasFS IO h -> HasBlockIO IO h -> RefCtx -> ResolveSerialisedValue -> Salt -> RunParams -> FsPath -> UniqCounter IO -> SerialisedMergingRunData t -> (Ref (MergingRun t IO h) -> IO a) -> IO a
 - unsafeCreateMergingRun :: IsMergeType t => HasFS IO h -> HasBlockIO IO h -> RefCtx -> ResolveSerialisedValue -> Salt -> RunParams -> FsPath -> UniqCounter IO -> SerialisedMergingRunData t -> IO (Ref (MergingRun t IO h))
 - data MergingRunData t k v b
- = CompletedMergeData t (RunData k v b)
 - | OngoingMergeData t [NonEmptyRunData k v b]
 
 - mergingRunDataMergeType :: MergingRunData t k v b -> t
 - mergingRunDataInvariant :: MergingRunData t k v b -> Either String ()
 - mapMergingRunData :: Ord k' => (k -> k') -> (v -> v') -> (b -> b') -> MergingRunData t k v b -> MergingRunData t k' v' b'
 - type SerialisedMergingRunData t = MergingRunData t SerialisedKey SerialisedValue SerialisedBlob
 - serialiseMergingRunData :: (SerialiseKey k, SerialiseValue v, SerialiseValue b) => MergingRunData t k v b -> SerialisedMergingRunData t
 - labelMergingRunData :: Show t => SerialisedMergingRunData t -> Property -> Property
 - genMergingRunData :: Ord k => Gen t -> Gen k -> Gen v -> Gen b -> Gen (MergingRunData t k v b)
 - shrinkMergingRunData :: Ord k => (k -> [k]) -> (v -> [v]) -> (b -> [b]) -> MergingRunData t k v b -> [MergingRunData t k v b]
 
Create merging runs
withMergingRun :: IsMergeType t => HasFS IO h -> HasBlockIO IO h -> RefCtx -> ResolveSerialisedValue -> Salt -> RunParams -> FsPath -> UniqCounter IO -> SerialisedMergingRunData t -> (Ref (MergingRun t IO h) -> IO a) -> IO a Source #
Create a temporary MergingRun using unsafeCreateMergingRun.
unsafeCreateMergingRun :: IsMergeType t => HasFS IO h -> HasBlockIO IO h -> RefCtx -> ResolveSerialisedValue -> Salt -> RunParams -> FsPath -> UniqCounter IO -> SerialisedMergingRunData t -> IO (Ref (MergingRun t IO h)) Source #
Flush serialised merging run data to disk.
This might leak resources if not run with asynchronous exceptions masked.
 Consider using withMergingRun instead.
Use of this function should be paired with a releaseRef.
MergingRunData
data MergingRunData t k v b Source #
A data structure suitable for creating arbitrary MergingRuns.
Note: 'b ~ Void' should rule out blobs.
Currently, ongoing merges are always "fresh", i.e. there is no merge work already performed.
TODO: Generate merge credits and supply them in unsafeCreateMergingRun,
 similarly to how ScheduledMergesTest does it.
Constructors
| CompletedMergeData t (RunData k v b) | |
| OngoingMergeData t [NonEmptyRunData k v b] | at least 2 inputs  | 
Instances
| (Arbitrary t, Ord k, Arbitrary k, Arbitrary v, Arbitrary b) => Arbitrary (MergingRunData t k v b) Source # | |
Defined in Database.LSMTree.Extras.MergingRunData Methods arbitrary :: Gen (MergingRunData t k v b) Source # shrink :: MergingRunData t k v b -> [MergingRunData t k v b] Source #  | |
| (Show k, Show b, Show v, Show t) => Show (MergingRunData t k v b) Source # | |
Defined in Database.LSMTree.Extras.MergingRunData Methods showsPrec :: Int -> MergingRunData t k v b -> ShowS # show :: MergingRunData t k v b -> String # showList :: [MergingRunData t k v b] -> ShowS #  | |
| (Eq k, Eq b, Eq v, Eq t) => Eq (MergingRunData t k v b) Source # | |
Defined in Database.LSMTree.Extras.MergingRunData Methods (==) :: MergingRunData t k v b -> MergingRunData t k v b -> Bool # (/=) :: MergingRunData t k v b -> MergingRunData t k v b -> Bool #  | |
mergingRunDataMergeType :: MergingRunData t k v b -> t Source #
mergingRunDataInvariant :: MergingRunData t k v b -> Either String () Source #
See mergeInvariant in the prototype.
mapMergingRunData :: Ord k' => (k -> k') -> (v -> v') -> (b -> b') -> MergingRunData t k v b -> MergingRunData t k' v' b' Source #
type SerialisedMergingRunData t = MergingRunData t SerialisedKey SerialisedValue SerialisedBlob Source #
serialiseMergingRunData :: (SerialiseKey k, SerialiseValue v, SerialiseValue b) => MergingRunData t k v b -> SerialisedMergingRunData t Source #
QuickCheck
labelMergingRunData :: Show t => SerialisedMergingRunData t -> Property -> Property Source #
genMergingRunData :: Ord k => Gen t -> Gen k -> Gen v -> Gen b -> Gen (MergingRunData t k v b) Source #
shrinkMergingRunData :: Ord k => (k -> [k]) -> (v -> [v]) -> (b -> [b]) -> MergingRunData t k v b -> [MergingRunData t k v b] Source #