| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal
Synopsis
- data ChunkInfo = UniformChunkSize !ChunkSize
- simpleChunkInfo :: EpochSize -> ChunkInfo
- singleChunkInfo :: ChunkSize -> ChunkInfo
- chunkInfoSupportsEBBs :: ChunkInfo -> Bool
- newtype ChunkNo = ChunkNo {}
- firstChunkNo :: ChunkNo
- chunkNoToInt :: ChunkNo -> Int
- chunkNoFromInt :: Int -> ChunkNo
- nextChunkNo :: ChunkNo -> ChunkNo
- prevChunkNo :: ChunkNo -> Maybe ChunkNo
- countChunks :: ChunkNo -> ChunkNo -> Word64
- chunksBetween :: ChunkNo -> ChunkNo -> [ChunkNo]
- unsafeEpochNoToChunkNo :: EpochNo -> ChunkNo
- unsafeChunkNoToEpochNo :: ChunkNo -> EpochNo
- data ChunkSize = ChunkSize {}
- getChunkSize :: ChunkInfo -> ChunkNo -> ChunkSize
- data RelativeSlot = RelativeSlot {}
- maxRelativeIndex :: ChunkSize -> Word64
- mkRelativeSlot :: HasCallStack => ChunkInfo -> ChunkNo -> Word64 -> RelativeSlot
- assertRelativeSlotInChunk :: HasCallStack => ChunkNo -> RelativeSlot -> Word64
- compareRelativeSlot :: HasCallStack => RelativeSlot -> RelativeSlot -> Ordering
- data ChunkAssertionFailure
- assertSameChunk :: HasCallStack => ChunkNo -> ChunkNo -> a -> a
- assertWithinBounds :: HasCallStack => Word64 -> ChunkSize -> a -> a
- assertChunkCanContainEBB :: HasCallStack => ChunkNo -> ChunkSize -> a -> a
Documentation
Size of the chunks of the immutable DB
This is the key data structure that drives all layout functions.
TODO: Add support for non-uniform ChunkInfo
https://github.com/input-output-hk/ouroboros-network/issues/1754
Constructors
| UniformChunkSize !ChunkSize | A single, uniform, chunk size If EBBs are present, the chunk size must line up precisely with the epoch size (that is, the number of regular blocks in the chunk must equal the number of regular blocks in an epoch). |
Instances
| Show ChunkInfo Source # | |
| Generic ChunkInfo Source # | |
| NoThunks ChunkInfo Source # | |
| type Rep ChunkInfo Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal type Rep ChunkInfo = D1 ('MetaData "ChunkInfo" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "UniformChunkSize" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ChunkSize))) | |
simpleChunkInfo :: EpochSize -> ChunkInfo Source #
singleChunkInfo :: ChunkSize -> ChunkInfo Source #
ChunkInfo for a single ChunkSize
See also simpleChunkInfo.
Chunk number
Chunk number
Instances
| Eq ChunkNo Source # | |
| Ord ChunkNo Source # | |
| Show ChunkNo Source # | |
| Generic ChunkNo Source # | |
| NoThunks ChunkNo Source # | |
| type Rep ChunkNo Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal type Rep ChunkNo = D1 ('MetaData "ChunkNo" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'True) (C1 ('MetaCons "ChunkNo" 'PrefixI 'True) (S1 ('MetaSel ('Just "unChunkNo") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64))) | |
firstChunkNo :: ChunkNo Source #
First chunk
chunkNoToInt :: ChunkNo -> Int Source #
chunkNoFromInt :: Int -> ChunkNo Source #
See chunkNoToInt for motivation.
nextChunkNo :: ChunkNo -> ChunkNo Source #
countChunks :: ChunkNo -> ChunkNo -> Word64 Source #
Count number of chunks between two indices
countChunks x x == 0 countChunks x (nextChunkNo x) == 1
chunksBetween :: ChunkNo -> ChunkNo -> [ChunkNo] Source #
Enumerate all chunks
chunksBetween x x == [x] chunksBetween x (nextChunkNo x) == [x, nextChunkNo x]
unsafeChunkNoToEpochNo :: ChunkNo -> EpochNo Source #
This should ONLY be used for chunks that contain EBBs.
See unsafeEpochNoToChunkNo and ChunkInfo for details.
Chunk size
Size of a chunk
The total number of slots available in a chunk is equal to numRegularBlocks
if not chunkCanContainEBB, and numRegularBlocks + 1 otherwise.
Constructors
| ChunkSize | |
Fields
| |
Instances
| Show ChunkSize Source # | |
| Generic ChunkSize Source # | |
| NoThunks ChunkSize Source # | |
| type Rep ChunkSize Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal type Rep ChunkSize = D1 ('MetaData "ChunkSize" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "ChunkSize" 'PrefixI 'True) (S1 ('MetaSel ('Just "chunkCanContainEBB") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool) :*: S1 ('MetaSel ('Just "numRegularBlocks") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word64))) | |
Layout
data RelativeSlot Source #
A relative slot within a chunk
Constructors
| RelativeSlot | |
Fields
| |
Instances
maxRelativeIndex :: ChunkSize -> Word64 Source #
Maximum relative index within a chunk
mkRelativeSlot :: HasCallStack => ChunkInfo -> ChunkNo -> Word64 -> RelativeSlot Source #
Smart constructor for RelativeSlot
assertRelativeSlotInChunk :: HasCallStack => ChunkNo -> RelativeSlot -> Word64 Source #
compareRelativeSlot :: HasCallStack => RelativeSlot -> RelativeSlot -> Ordering Source #
RelativeSlot is partially ordered, not totally ordered
It makes no sense to compare RelativeSlots from different chunks. Doing so
will result in an assertion failure.
Assertions
data ChunkAssertionFailure Source #
Instances
| Show ChunkAssertionFailure Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal Methods showsPrec :: Int -> ChunkAssertionFailure -> ShowS # show :: ChunkAssertionFailure -> String # showList :: [ChunkAssertionFailure] -> ShowS # | |
| Exception ChunkAssertionFailure Source # | |
assertSameChunk :: HasCallStack => ChunkNo -> ChunkNo -> a -> a Source #
assertWithinBounds :: HasCallStack => Word64 -> ChunkSize -> a -> a Source #
assertChunkCanContainEBB :: HasCallStack => ChunkNo -> ChunkSize -> a -> a Source #