| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout
Description
Layout of individual chunks on disk
This module is not re-exported from the public Chunks API, since it's only relevant internally in the immutable DB. This module makes the layout decisions.
Synopsis
- data NextRelativeSlot
- 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
- data RelativeSlot
- chunkIndexOfSlot ∷ ChunkInfo → SlotNo → ChunkNo
- data ChunkSlot = UnsafeChunkSlot {}
- pattern ChunkSlot ∷ ChunkNo → RelativeSlot → ChunkSlot
- 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
Relative slots
data NextRelativeSlot Source #
Result of nextRelativeSlot
Constructors
| NextRelativeSlot RelativeSlot | There is a next negative slot |
| NoMoreRelativeSlots | We reached the end of the chunk |
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.
Opaque
data RelativeSlot Source #
A relative slot within a chunk
Instances
Chunks
Slots within a 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).
Constructors
| UnsafeChunkSlot | |
Fields | |
Instances
| Generic ChunkSlot Source # | |||||
Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout Associated Types
| |||||
| 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.28.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))) | |||||
Translation to ChunkSlot
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 #
Translation from ChunkSlot
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.
Support for EBBs
slotNoOfEBB ∷ HasCallStack ⇒ ChunkInfo → EpochNo → SlotNo Source #