ouroboros-consensus-0.1.0.0: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util

Contents

Synopsis

Utilities

data Two a Source #

Useful when you have exactly two values of some type and want to traverse over both of them (which is not possible with a tuple).

Constructors

Two a a 

Instances

Instances details
Functor Two Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util

Methods

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

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

Foldable Two Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util

Methods

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

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

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

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

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

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

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

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

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

toList :: Two a -> [a] #

null :: Two a -> Bool #

length :: Two a -> Int #

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

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

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

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

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

Traversable Two Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util

Methods

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

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

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

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

wrapFsError :: MonadCatch m => m a -> m a Source #

tryImmutableDB :: MonadCatch m => m a -> m (Either ImmutableDBError a) Source #

Execute an action and catch the ImmutableDBError and FsError that can be thrown by it, and wrap the FsError in an ImmutableDBError using the FileSystemError constructor.

This should be used whenever you want to run an action on the ImmutableDB and catch the ImmutableDBError and the FsError (wrapped in the former) it may thrown.

parseDBFile :: String -> Maybe (String, ChunkNo) Source #

Parse the prefix and chunk number from the filename of an index or chunk file.

parseDBFile "00001.chunk"

Just ("chunk", 1) > parseDBFile "00012.primary" Just ("primary", 12)

dbFilesOnDisk :: Set String -> (Set ChunkNo, Set ChunkNo, Set ChunkNo) Source #

Go through all files, making three sets: the set of chunk files, primary index files, and secondary index files, discarding all others.

removeFilesStartingFrom :: (HasCallStack, Monad m) => HasFS m h -> ChunkNo -> m () Source #

Remove all chunk and index starting from the given chunk (included).

runGet :: (HasCallStack, MonadThrow m) => FsPath -> Get a -> ByteString -> m a Source #

Wrapper around runGetOrFail that throws an InvalidFileError when it failed or when there was unconsumed input.

runGetWithUnconsumed :: (HasCallStack, MonadThrow m) => FsPath -> Get a -> ByteString -> m (ByteString, a) Source #

Same as runGet, but allows unconsumed input and returns it.

checkChecksum Source #

Arguments

:: (HasCallStack, HasHeader blk, MonadThrow m) 
=> FsPath 
-> RealPoint blk 
-> CRC

Expected checksum

-> CRC

Actual checksum

-> m () 

Check whether the given checksums match. If not, throw a ChecksumMismatchError.