Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
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).
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))) |
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 #