Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data ChunkInfo = UniformChunkSize !ChunkSize
- data ChunkNo
- data ChunkSize = ChunkSize {}
- data RelativeSlot
- data NextRelativeSlot
- data ChunkSlot = UnsafeChunkSlot {}
- pattern ChunkSlot ∷ ChunkNo → RelativeSlot → ChunkSlot
- chunkInfoSupportsEBBs ∷ ChunkInfo → Bool
- chunksBetween ∷ ChunkNo → ChunkNo → [ChunkNo]
- compareRelativeSlot ∷ HasCallStack ⇒ RelativeSlot → RelativeSlot → Ordering
- countChunks ∷ ChunkNo → ChunkNo → Word64
- firstChunkNo ∷ ChunkNo
- getChunkSize ∷ ChunkInfo → ChunkNo → ChunkSize
- mkRelativeSlot ∷ HasCallStack ⇒ ChunkInfo → ChunkNo → Word64 → RelativeSlot
- nextChunkNo ∷ ChunkNo → ChunkNo
- prevChunkNo ∷ ChunkNo → Maybe ChunkNo
- simpleChunkInfo ∷ EpochSize → ChunkInfo
- singleChunkInfo ∷ ChunkSize → ChunkInfo
- firstBlockOrEBB ∷ ChunkInfo → ChunkNo → RelativeSlot
- maxRelativeSlot ∷ ChunkInfo → ChunkNo → RelativeSlot
- nextRelativeSlot ∷ HasCallStack ⇒ RelativeSlot → NextRelativeSlot
- nthBlockOrEBB ∷ (HasCallStack, Integral a) ⇒ ChunkInfo → ChunkNo → a → RelativeSlot
- relativeSlotIsEBB ∷ RelativeSlot → IsEBB
- unsafeNextRelativeSlot ∷ HasCallStack ⇒ RelativeSlot → RelativeSlot
- chunkIndexOfSlot ∷ ChunkInfo → SlotNo → ChunkNo
- chunkSlotForBlockOrEBB ∷ ChunkInfo → BlockOrEBB → ChunkSlot
- chunkSlotForBoundaryBlock ∷ HasCallStack ⇒ ChunkInfo → EpochNo → ChunkSlot
- chunkSlotForRegularBlock ∷ ChunkInfo → SlotNo → ChunkSlot
- chunkSlotForRelativeSlot ∷ ChunkNo → RelativeSlot → ChunkSlot
- chunkSlotForTip ∷ ChunkInfo → Tip blk → ChunkSlot
- chunkSlotForUnknownBlock ∷ HasCallStack ⇒ ChunkInfo → SlotNo → (ChunkNo, Maybe ChunkSlot, ChunkSlot)
- chunkSlotToBlockOrEBB ∷ ChunkInfo → ChunkSlot → BlockOrEBB
- chunkSlotToSlot ∷ ChunkInfo → ChunkSlot → SlotNo
- slotMightBeEBB ∷ ChunkInfo → SlotNo → Maybe EpochNo
- slotNoOfBlockOrEBB ∷ ChunkInfo → BlockOrEBB → SlotNo
- slotNoOfEBB ∷ HasCallStack ⇒ ChunkInfo → EpochNo → SlotNo
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/IntersectMBO/ouroboros-network/issues/1754
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
Generic ChunkInfo Source # | |
Show 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.21.0.0-inplace" 'False) (C1 ('MetaCons "UniformChunkSize" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ChunkSize))) |
Chunk number
Size of a chunk
The total number of slots available in a chunk is equal to numRegularBlocks
if not
chunkCanContainEBB
, and numRegularBlocks
+ 1
otherwise.
ChunkSize | |
|
Instances
Generic ChunkSize Source # | |
Show 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.21.0.0-inplace" 'False) (C1 ('MetaCons "ChunkSize" 'PrefixI 'True) (S1 ('MetaSel ('Just "chunkCanContainEBB") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool) :*: S1 ('MetaSel ('Just "numRegularBlocks") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word64))) |
data RelativeSlot Source #
A relative slot within a chunk
Instances
data NextRelativeSlot Source #
Result of nextRelativeSlot
NextRelativeSlot RelativeSlot | There is a next negative slot |
NoMoreRelativeSlots | We reached the end of the chunk |
Uniquely identify a block within the immutable DB
Constructor marked as Unsafe
; construction should normally happen inside
this module only (though see the ChunkSlot
pattern synonym).
Instances
Generic ChunkSlot Source # | |
Show ChunkSlot Source # | |
Eq ChunkSlot Source # | |
Ord ChunkSlot Source # | We provide a manual |
NoThunks ChunkSlot Source # | |
type Rep ChunkSlot Source # | |
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout type Rep ChunkSlot = D1 ('MetaData "ChunkSlot" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout" "ouroboros-consensus-0.21.0.0-inplace" 'False) (C1 ('MetaCons "UnsafeChunkSlot" 'PrefixI 'True) (S1 ('MetaSel ('Just "chunkIndex") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ChunkNo) :*: S1 ('MetaSel ('Just "chunkRelative") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 RelativeSlot))) |
chunksBetween ∷ ChunkNo → ChunkNo → [ChunkNo] Source #
Enumerate all chunks
chunksBetween x x == [x] chunksBetween x (nextChunkNo x) == [x, nextChunkNo x]
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.
countChunks ∷ ChunkNo → ChunkNo → Word64 Source #
Count number of chunks between two indices
countChunks x x == 0 countChunks x (nextChunkNo x) == 1
firstChunkNo ∷ ChunkNo Source #
First chunk
mkRelativeSlot ∷ HasCallStack ⇒ ChunkInfo → ChunkNo → Word64 → RelativeSlot Source #
Smart constructor for RelativeSlot
nextChunkNo ∷ ChunkNo → ChunkNo Source #
singleChunkInfo ∷ ChunkSize → ChunkInfo Source #
ChunkInfo
for a single ChunkSize
See also simpleChunkInfo
.
firstBlockOrEBB ∷ ChunkInfo → ChunkNo → RelativeSlot Source #
The first relative slot
NOTE: This refers to an EBB only if the ChunkSize
supports it.
maxRelativeSlot ∷ ChunkInfo → ChunkNo → RelativeSlot Source #
The last relative slot within a chunk of the given size
nextRelativeSlot ∷ HasCallStack ⇒ RelativeSlot → NextRelativeSlot Source #
Next relative slot
nthBlockOrEBB ∷ (HasCallStack, Integral a) ⇒ ChunkInfo → ChunkNo → a → RelativeSlot Source #
The n
'th relative slot for an arbitrary block
NOTE: Offset 0
refers to an EBB only if the ChunkSize
supports it.
relativeSlotIsEBB ∷ RelativeSlot → IsEBB Source #
Is this relative slot reserved for an EBB?
unsafeNextRelativeSlot ∷ HasCallStack ⇒ RelativeSlot → RelativeSlot Source #
Variation on nextRelativeSlot
where the caller knows that there must
be a next slot
Throws an assertion failure (if assertions are enabled) if there is no next slot.
chunkSlotForBlockOrEBB ∷ ChunkInfo → BlockOrEBB → ChunkSlot Source #
Chunk slot for BlockOrEBB
chunkSlotForBoundaryBlock ∷ HasCallStack ⇒ ChunkInfo → EpochNo → ChunkSlot Source #
Chunk slot for EBB
chunkSlotForRegularBlock ∷ ChunkInfo → SlotNo → ChunkSlot Source #
Chunk slot for a regular block (i.e., not an EBB)
chunkSlotForUnknownBlock ∷ HasCallStack ⇒ ChunkInfo → SlotNo → (ChunkNo, Maybe ChunkSlot, ChunkSlot) Source #
chunkSlotToSlot ∷ ChunkInfo → ChunkSlot → SlotNo Source #
From relative to absolute slot
This can be used for EBBs and regular blocks, since they don't share a relative slot.
slotNoOfEBB ∷ HasCallStack ⇒ ChunkInfo → EpochNo → SlotNo Source #