Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util
Contents
Synopsis
- data Two a = Two a a
- checkChecksum :: ( HasCallStack , HasHeader blk, MonadThrow m) => FsPath -> RealPoint blk -> CRC -> CRC -> m ()
- dbFilesOnDisk :: Set String -> ( Set ChunkNo , Set ChunkNo , Set ChunkNo )
- fsPathChunkFile :: ChunkNo -> FsPath
- fsPathPrimaryIndexFile :: ChunkNo -> FsPath
- fsPathSecondaryIndexFile :: ChunkNo -> FsPath
- parseDBFile :: String -> Maybe ( String , ChunkNo )
- removeFilesStartingFrom :: ( HasCallStack , Monad m) => HasFS m h -> ChunkNo -> m ()
- renderFile :: Text -> ChunkNo -> FsPath
- runGet :: forall blk a m. ( HasCallStack , MonadThrow m, StandardHash blk, Typeable blk) => Proxy blk -> FsPath -> Get a -> ByteString -> m a
- runGetWithUnconsumed :: forall blk a m. ( HasCallStack , MonadThrow m, StandardHash blk, Typeable blk) => Proxy blk -> FsPath -> Get a -> ByteString -> m ( ByteString , a)
- tryImmutableDB :: forall m blk a. ( MonadCatch m, StandardHash blk, Typeable blk) => Proxy blk -> m a -> m ( Either ( ImmutableDBError blk) a)
- wrapFsError :: forall blk m a. ( MonadCatch m, StandardHash blk, Typeable blk) => Proxy blk -> m a -> m a
Utilities
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
Functor Two Source # | |
Foldable Two Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Impl.Util Methods fold :: Monoid m => Two m -> m Source # foldMap :: Monoid m => (a -> m) -> Two a -> m Source # foldMap' :: Monoid m => (a -> m) -> Two a -> m Source # foldr :: (a -> b -> b) -> b -> Two a -> b Source # foldr' :: (a -> b -> b) -> b -> Two a -> b Source # foldl :: (b -> a -> b) -> b -> Two a -> b Source # foldl' :: (b -> a -> b) -> b -> Two a -> b Source # foldr1 :: (a -> a -> a) -> Two a -> a Source # foldl1 :: (a -> a -> a) -> Two a -> a Source # toList :: Two a -> [a] Source # null :: Two a -> Bool Source # length :: Two a -> Int Source # elem :: Eq a => a -> Two a -> Bool Source # maximum :: Ord a => Two a -> a Source # minimum :: Ord a => Two a -> a Source # |
|
Traversable Two 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
.
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.
fsPathChunkFile :: ChunkNo -> FsPath Source #
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)
removeFilesStartingFrom :: ( HasCallStack , Monad m) => HasFS m h -> ChunkNo -> m () Source #
Remove all chunk and index starting from the given chunk (included).
renderFile :: Text -> ChunkNo -> FsPath Source #
Opposite of
parseDBFile
.
runGet :: forall blk a m. ( HasCallStack , MonadThrow m, StandardHash blk, Typeable blk) => Proxy blk -> FsPath -> Get a -> ByteString -> m a Source #
Wrapper around
runGetOrFail
that throws an
InvalidFileError
when
it failed or when there was unconsumed input.
runGetWithUnconsumed :: forall blk a m. ( HasCallStack , MonadThrow m, StandardHash blk, Typeable blk) => Proxy blk -> FsPath -> Get a -> ByteString -> m ( ByteString , a) Source #
Same as
runGet
, but allows unconsumed input and returns it.
tryImmutableDB :: forall m blk a. ( MonadCatch m, StandardHash blk, Typeable blk) => Proxy blk -> m a -> m ( Either ( ImmutableDBError blk) 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.
wrapFsError :: forall blk m a. ( MonadCatch m, StandardHash blk, Typeable blk) => Proxy blk -> m a -> m a Source #
Rewrap
FsError
in a
ImmutableDBError
.