lsm-tree-0.1.0.0: Log-structured merge-trees
Safe HaskellSafe-Inferred
LanguageGHC2021

Database.LSMTree.Internal.Snapshot

Synopsis

Snapshot metadata

newtype SnapshotLabel Source #

Custom, user-supplied text that is included in the metadata.

The main use case for a SnapshotLabel is for the user to supply textual information about the key/value/blob type for the table that corresponds to the snapshot. This information is used to dynamically check that a snapshot is opened at the correct key/value/blob type.

Constructors

SnapshotLabel Text 

data SnapshotMetaData Source #

Constructors

SnapshotMetaData 

Fields

Levels snapshot format

newtype SnapLevels r Source #

Constructors

SnapLevels 

Instances

Instances details
Foldable SnapLevels Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapLevels m -> m #

foldMap :: Monoid m => (a -> m) -> SnapLevels a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapLevels a -> m #

foldr :: (a -> b -> b) -> b -> SnapLevels a -> b #

foldr' :: (a -> b -> b) -> b -> SnapLevels a -> b #

foldl :: (b -> a -> b) -> b -> SnapLevels a -> b #

foldl' :: (b -> a -> b) -> b -> SnapLevels a -> b #

foldr1 :: (a -> a -> a) -> SnapLevels a -> a #

foldl1 :: (a -> a -> a) -> SnapLevels a -> a #

toList :: SnapLevels a -> [a] #

null :: SnapLevels a -> Bool #

length :: SnapLevels a -> Int #

elem :: Eq a => a -> SnapLevels a -> Bool #

maximum :: Ord a => SnapLevels a -> a #

minimum :: Ord a => SnapLevels a -> a #

sum :: Num a => SnapLevels a -> a #

product :: Num a => SnapLevels a -> a #

Traversable SnapLevels Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapLevels a -> f (SnapLevels b) #

sequenceA :: Applicative f => SnapLevels (f a) -> f (SnapLevels a) #

mapM :: Monad m => (a -> m b) -> SnapLevels a -> m (SnapLevels b) #

sequence :: Monad m => SnapLevels (m a) -> m (SnapLevels a) #

Functor SnapLevels Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapLevels a -> SnapLevels b #

(<$) :: a -> SnapLevels b -> SnapLevels a #

NFData r => NFData (SnapLevels r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapLevels r -> () #

Eq r => Eq (SnapLevels r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

(==) :: SnapLevels r -> SnapLevels r -> Bool #

(/=) :: SnapLevels r -> SnapLevels r -> Bool #

DecodeVersioned r => DecodeVersioned (SnapLevels r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapLevels r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapLevel r Source #

Constructors

SnapLevel 

Instances

Instances details
Foldable SnapLevel Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapLevel m -> m #

foldMap :: Monoid m => (a -> m) -> SnapLevel a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapLevel a -> m #

foldr :: (a -> b -> b) -> b -> SnapLevel a -> b #

foldr' :: (a -> b -> b) -> b -> SnapLevel a -> b #

foldl :: (b -> a -> b) -> b -> SnapLevel a -> b #

foldl' :: (b -> a -> b) -> b -> SnapLevel a -> b #

foldr1 :: (a -> a -> a) -> SnapLevel a -> a #

foldl1 :: (a -> a -> a) -> SnapLevel a -> a #

toList :: SnapLevel a -> [a] #

null :: SnapLevel a -> Bool #

length :: SnapLevel a -> Int #

elem :: Eq a => a -> SnapLevel a -> Bool #

maximum :: Ord a => SnapLevel a -> a #

minimum :: Ord a => SnapLevel a -> a #

sum :: Num a => SnapLevel a -> a #

product :: Num a => SnapLevel a -> a #

Traversable SnapLevel Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapLevel a -> f (SnapLevel b) #

sequenceA :: Applicative f => SnapLevel (f a) -> f (SnapLevel a) #

mapM :: Monad m => (a -> m b) -> SnapLevel a -> m (SnapLevel b) #

sequence :: Monad m => SnapLevel (m a) -> m (SnapLevel a) #

Functor SnapLevel Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapLevel a -> SnapLevel b #

(<$) :: a -> SnapLevel b -> SnapLevel a #

NFData r => NFData (SnapLevel r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapLevel r -> () #

Eq r => Eq (SnapLevel r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

(==) :: SnapLevel r -> SnapLevel r -> Bool #

(/=) :: SnapLevel r -> SnapLevel r -> Bool #

DecodeVersioned r => DecodeVersioned (SnapLevel r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapLevel r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapIncomingRun r Source #

Note that for snapshots of incoming runs, we store only the merge debt and nominal credits, not the nominal debt or the merge credits. The rationale is a bit subtle.

The nominal debt does not need to be stored because it can be derived based on the table's write buffer size (which is stored in the snapshot's TableConfig), and on the level number that the merge is at (which also known from the snapshot structure).

The merge credits can be recalculated from the combination of the nominal debt, nominal credits and merge debt.

The merge debt is always the sum of the size of the input runs, so at first glance this seems redundant. However for completed merges we no longer have the input runs, so we must store the merge debt if we are to perfectly round trip the snapshot. This is a nice simple property to have though it is probably not 100% essential. We could weaken the round trip property to allow forgetting the merge debt and credit of completed merges (and set them both to zero).

Constructors

SnapIncomingMergingRun 

Fields

SnapIncomingSingleRun !r 

Instances

Instances details
Foldable SnapIncomingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapIncomingRun m -> m #

foldMap :: Monoid m => (a -> m) -> SnapIncomingRun a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapIncomingRun a -> m #

foldr :: (a -> b -> b) -> b -> SnapIncomingRun a -> b #

foldr' :: (a -> b -> b) -> b -> SnapIncomingRun a -> b #

foldl :: (b -> a -> b) -> b -> SnapIncomingRun a -> b #

foldl' :: (b -> a -> b) -> b -> SnapIncomingRun a -> b #

foldr1 :: (a -> a -> a) -> SnapIncomingRun a -> a #

foldl1 :: (a -> a -> a) -> SnapIncomingRun a -> a #

toList :: SnapIncomingRun a -> [a] #

null :: SnapIncomingRun a -> Bool #

length :: SnapIncomingRun a -> Int #

elem :: Eq a => a -> SnapIncomingRun a -> Bool #

maximum :: Ord a => SnapIncomingRun a -> a #

minimum :: Ord a => SnapIncomingRun a -> a #

sum :: Num a => SnapIncomingRun a -> a #

product :: Num a => SnapIncomingRun a -> a #

Traversable SnapIncomingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapIncomingRun a -> f (SnapIncomingRun b) #

sequenceA :: Applicative f => SnapIncomingRun (f a) -> f (SnapIncomingRun a) #

mapM :: Monad m => (a -> m b) -> SnapIncomingRun a -> m (SnapIncomingRun b) #

sequence :: Monad m => SnapIncomingRun (m a) -> m (SnapIncomingRun a) #

Functor SnapIncomingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapIncomingRun a -> SnapIncomingRun b #

(<$) :: a -> SnapIncomingRun b -> SnapIncomingRun a #

NFData r => NFData (SnapIncomingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapIncomingRun r -> () #

Eq r => Eq (SnapIncomingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

DecodeVersioned r => DecodeVersioned (SnapIncomingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapIncomingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapMergingRun t r Source #

Instances

Instances details
Foldable (SnapMergingRun t) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapMergingRun t m -> m #

foldMap :: Monoid m => (a -> m) -> SnapMergingRun t a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapMergingRun t a -> m #

foldr :: (a -> b -> b) -> b -> SnapMergingRun t a -> b #

foldr' :: (a -> b -> b) -> b -> SnapMergingRun t a -> b #

foldl :: (b -> a -> b) -> b -> SnapMergingRun t a -> b #

foldl' :: (b -> a -> b) -> b -> SnapMergingRun t a -> b #

foldr1 :: (a -> a -> a) -> SnapMergingRun t a -> a #

foldl1 :: (a -> a -> a) -> SnapMergingRun t a -> a #

toList :: SnapMergingRun t a -> [a] #

null :: SnapMergingRun t a -> Bool #

length :: SnapMergingRun t a -> Int #

elem :: Eq a => a -> SnapMergingRun t a -> Bool #

maximum :: Ord a => SnapMergingRun t a -> a #

minimum :: Ord a => SnapMergingRun t a -> a #

sum :: Num a => SnapMergingRun t a -> a #

product :: Num a => SnapMergingRun t a -> a #

Traversable (SnapMergingRun t) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapMergingRun t a -> f (SnapMergingRun t b) #

sequenceA :: Applicative f => SnapMergingRun t (f a) -> f (SnapMergingRun t a) #

mapM :: Monad m => (a -> m b) -> SnapMergingRun t a -> m (SnapMergingRun t b) #

sequence :: Monad m => SnapMergingRun t (m a) -> m (SnapMergingRun t a) #

Functor (SnapMergingRun t) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapMergingRun t a -> SnapMergingRun t b #

(<$) :: a -> SnapMergingRun t b -> SnapMergingRun t a #

(NFData t, NFData r) => NFData (SnapMergingRun t r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapMergingRun t r -> () #

(Eq r, Eq t) => Eq (SnapMergingRun t r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

(DecodeVersioned t, DecodeVersioned r) => DecodeVersioned (SnapMergingRun t r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

(Encode t, Encode r) => Encode (SnapMergingRun t r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

MergeTree snapshot format

newtype SnapMergingTree r Source #

Instances

Instances details
Foldable SnapMergingTree Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapMergingTree m -> m #

foldMap :: Monoid m => (a -> m) -> SnapMergingTree a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapMergingTree a -> m #

foldr :: (a -> b -> b) -> b -> SnapMergingTree a -> b #

foldr' :: (a -> b -> b) -> b -> SnapMergingTree a -> b #

foldl :: (b -> a -> b) -> b -> SnapMergingTree a -> b #

foldl' :: (b -> a -> b) -> b -> SnapMergingTree a -> b #

foldr1 :: (a -> a -> a) -> SnapMergingTree a -> a #

foldl1 :: (a -> a -> a) -> SnapMergingTree a -> a #

toList :: SnapMergingTree a -> [a] #

null :: SnapMergingTree a -> Bool #

length :: SnapMergingTree a -> Int #

elem :: Eq a => a -> SnapMergingTree a -> Bool #

maximum :: Ord a => SnapMergingTree a -> a #

minimum :: Ord a => SnapMergingTree a -> a #

sum :: Num a => SnapMergingTree a -> a #

product :: Num a => SnapMergingTree a -> a #

Traversable SnapMergingTree Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapMergingTree a -> f (SnapMergingTree b) #

sequenceA :: Applicative f => SnapMergingTree (f a) -> f (SnapMergingTree a) #

mapM :: Monad m => (a -> m b) -> SnapMergingTree a -> m (SnapMergingTree b) #

sequence :: Monad m => SnapMergingTree (m a) -> m (SnapMergingTree a) #

Functor SnapMergingTree Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapMergingTree a -> SnapMergingTree b #

(<$) :: a -> SnapMergingTree b -> SnapMergingTree a #

NFData r => NFData (SnapMergingTree r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapMergingTree r -> () #

Eq r => Eq (SnapMergingTree r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

DecodeVersioned r => DecodeVersioned (SnapMergingTree r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapMergingTree r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapMergingTreeState r Source #

Instances

Instances details
Foldable SnapMergingTreeState Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapMergingTreeState m -> m #

foldMap :: Monoid m => (a -> m) -> SnapMergingTreeState a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapMergingTreeState a -> m #

foldr :: (a -> b -> b) -> b -> SnapMergingTreeState a -> b #

foldr' :: (a -> b -> b) -> b -> SnapMergingTreeState a -> b #

foldl :: (b -> a -> b) -> b -> SnapMergingTreeState a -> b #

foldl' :: (b -> a -> b) -> b -> SnapMergingTreeState a -> b #

foldr1 :: (a -> a -> a) -> SnapMergingTreeState a -> a #

foldl1 :: (a -> a -> a) -> SnapMergingTreeState a -> a #

toList :: SnapMergingTreeState a -> [a] #

null :: SnapMergingTreeState a -> Bool #

length :: SnapMergingTreeState a -> Int #

elem :: Eq a => a -> SnapMergingTreeState a -> Bool #

maximum :: Ord a => SnapMergingTreeState a -> a #

minimum :: Ord a => SnapMergingTreeState a -> a #

sum :: Num a => SnapMergingTreeState a -> a #

product :: Num a => SnapMergingTreeState a -> a #

Traversable SnapMergingTreeState Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Functor SnapMergingTreeState Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

NFData r => NFData (SnapMergingTreeState r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapMergingTreeState r -> () #

Eq r => Eq (SnapMergingTreeState r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

DecodeVersioned r => DecodeVersioned (SnapMergingTreeState r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapMergingTreeState r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapPendingMerge r Source #

Instances

Instances details
Foldable SnapPendingMerge Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapPendingMerge m -> m #

foldMap :: Monoid m => (a -> m) -> SnapPendingMerge a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapPendingMerge a -> m #

foldr :: (a -> b -> b) -> b -> SnapPendingMerge a -> b #

foldr' :: (a -> b -> b) -> b -> SnapPendingMerge a -> b #

foldl :: (b -> a -> b) -> b -> SnapPendingMerge a -> b #

foldl' :: (b -> a -> b) -> b -> SnapPendingMerge a -> b #

foldr1 :: (a -> a -> a) -> SnapPendingMerge a -> a #

foldl1 :: (a -> a -> a) -> SnapPendingMerge a -> a #

toList :: SnapPendingMerge a -> [a] #

null :: SnapPendingMerge a -> Bool #

length :: SnapPendingMerge a -> Int #

elem :: Eq a => a -> SnapPendingMerge a -> Bool #

maximum :: Ord a => SnapPendingMerge a -> a #

minimum :: Ord a => SnapPendingMerge a -> a #

sum :: Num a => SnapPendingMerge a -> a #

product :: Num a => SnapPendingMerge a -> a #

Traversable SnapPendingMerge Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

traverse :: Applicative f => (a -> f b) -> SnapPendingMerge a -> f (SnapPendingMerge b) #

sequenceA :: Applicative f => SnapPendingMerge (f a) -> f (SnapPendingMerge a) #

mapM :: Monad m => (a -> m b) -> SnapPendingMerge a -> m (SnapPendingMerge b) #

sequence :: Monad m => SnapPendingMerge (m a) -> m (SnapPendingMerge a) #

Functor SnapPendingMerge Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fmap :: (a -> b) -> SnapPendingMerge a -> SnapPendingMerge b #

(<$) :: a -> SnapPendingMerge b -> SnapPendingMerge a #

NFData r => NFData (SnapPendingMerge r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapPendingMerge r -> () #

Eq r => Eq (SnapPendingMerge r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

DecodeVersioned r => DecodeVersioned (SnapPendingMerge r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapPendingMerge r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

data SnapPreExistingRun r Source #

Instances

Instances details
Foldable SnapPreExistingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

fold :: Monoid m => SnapPreExistingRun m -> m #

foldMap :: Monoid m => (a -> m) -> SnapPreExistingRun a -> m #

foldMap' :: Monoid m => (a -> m) -> SnapPreExistingRun a -> m #

foldr :: (a -> b -> b) -> b -> SnapPreExistingRun a -> b #

foldr' :: (a -> b -> b) -> b -> SnapPreExistingRun a -> b #

foldl :: (b -> a -> b) -> b -> SnapPreExistingRun a -> b #

foldl' :: (b -> a -> b) -> b -> SnapPreExistingRun a -> b #

foldr1 :: (a -> a -> a) -> SnapPreExistingRun a -> a #

foldl1 :: (a -> a -> a) -> SnapPreExistingRun a -> a #

toList :: SnapPreExistingRun a -> [a] #

null :: SnapPreExistingRun a -> Bool #

length :: SnapPreExistingRun a -> Int #

elem :: Eq a => a -> SnapPreExistingRun a -> Bool #

maximum :: Ord a => SnapPreExistingRun a -> a #

minimum :: Ord a => SnapPreExistingRun a -> a #

sum :: Num a => SnapPreExistingRun a -> a #

product :: Num a => SnapPreExistingRun a -> a #

Traversable SnapPreExistingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Functor SnapPreExistingRun Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

NFData r => NFData (SnapPreExistingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

Methods

rnf :: SnapPreExistingRun r -> () #

Eq r => Eq (SnapPreExistingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot

DecodeVersioned r => DecodeVersioned (SnapPreExistingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Encode r => Encode (SnapPreExistingRun r) Source # 
Instance details

Defined in Database.LSMTree.Internal.Snapshot.Codec

Conversion to levels snapshot format

toSnapLevels :: (PrimMonad m, MonadMVar m) => Levels m h -> m (SnapLevels (Ref (Run m h))) Source #

Conversion to merging tree snapshot format

Write buffer

Run

data SnapshotRun Source #

Information needed to open a Run from disk using snapshotRun and openRun.

TODO: one could imagine needing only the RunNumber to identify the files on disk, and the other parameters being stored with the run itself, rather than needing to be supplied.

snapshotRun :: (MonadMask m, PrimMonad m) => HasFS m h -> HasBlockIO m h -> UniqCounter m -> ActionRegistry m -> NamedSnapshotDir -> Ref (Run m h) -> m SnapshotRun Source #

snapshotRun _ _ snapUc _ targetDir run creates hard links for all files associated with the run, and puts the new directory entries in the targetDir directory. The entries are renamed using snapUc.

openRun :: (MonadMask m, MonadSTM m, MonadST m) => HasFS m h -> HasBlockIO m h -> UniqCounter m -> ActionRegistry m -> NamedSnapshotDir -> ActiveDir -> SnapshotRun -> m (Ref (Run m h)) Source #

openRun _ _ uniqCounter _ sourceDir targetDir snaprun takes all run files that are referenced by snaprun, and hard links them from sourceDir into targetDir with new, unique names (using uniqCounter). Each set of (hard linked) files that represents a run is opened and verified, returning Run as a result.

The result must ultimately be released using releaseRef.

Opening snapshot formats

Levels format

fromSnapLevels :: forall m h. (MonadMask m, MonadMVar m, MonadSTM m, MonadST m) => HasFS m h -> HasBlockIO m h -> UniqCounter m -> TableConfig -> ResolveSerialisedValue -> ActionRegistry m -> ActiveDir -> SnapLevels (Ref (Run m h)) -> m (Levels m h) Source #

Duplicates runs and re-creates merging runs.

Merging Tree format

fromSnapMergingTree :: forall m h. (MonadMask m, MonadMVar m, MonadSTM m, MonadST m) => HasFS m h -> HasBlockIO m h -> UniqCounter m -> ResolveSerialisedValue -> ActiveDir -> ActionRegistry m -> SnapMergingTree (Ref (Run m h)) -> m (Ref (MergingTree m h)) Source #

Converts a snapshot of a merging tree of runs to a real merging tree.

Returns a new reference. Input runs remain owned by the caller.

Hard links

hardLinkRunFiles :: (MonadMask m, PrimMonad m) => HasFS m h -> HasBlockIO m h -> ActionRegistry m -> RunFsPaths -> RunFsPaths -> m () Source #

hardLinkRunFiles _ _ _ sourcePaths targetPaths creates a hard link for each sourcePaths path using the corresponding targetPaths path as the name for the new directory entry.