ouroboros-consensus-0.1.0.0: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone
LanguageHaskell2010

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.

Synopsis

Relative slots

data RelativeSlot Source #

A relative slot within a chunk

Instances

Instances details
Eq RelativeSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal

Show RelativeSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal

Generic RelativeSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal

Associated Types

type Rep RelativeSlot :: Type -> Type #

NoThunks RelativeSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal

type Rep RelativeSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal

type Rep RelativeSlot = D1 ('MetaData "RelativeSlot" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "RelativeSlot" 'PrefixI 'True) (S1 ('MetaSel ('Just "relativeSlotChunkNo") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ChunkNo) :*: (S1 ('MetaSel ('Just "relativeSlotChunkSize") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ChunkSize) :*: S1 ('MetaSel ('Just "relativeSlotIndex") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word64))))

maxRelativeSlot :: ChunkInfo -> ChunkNo -> RelativeSlot Source #

The last relative slot within a chunk of the given size

relativeSlotIsEBB :: RelativeSlot -> IsEBB Source #

Is this relative slot reserved for an EBB?

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.

firstBlockOrEBB :: ChunkInfo -> ChunkNo -> RelativeSlot Source #

The first relative slot

NOTE: This refers to an EBB only if the ChunkSize supports it.

data NextRelativeSlot Source #

Constructors

NextRelativeSlot RelativeSlot

There is a next negative slot

NoMoreRelativeSlots

We reached the end of the chunk

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.

Chunks

Slots within a chunk

data ChunkSlot Source #

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

Instances details
Eq ChunkSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

Ord ChunkSlot Source #

We provide a manual Ord instance because RelativeSlot does not (and cannot) define one. By comparing the chunkIndex before the index here, we establish the precondition to compareRelativeSlot.

Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

Show ChunkSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

Generic ChunkSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

Associated Types

type Rep ChunkSlot :: Type -> Type #

NoThunks ChunkSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

type Rep ChunkSlot Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout

type Rep ChunkSlot = D1 ('MetaData "ChunkSlot" "Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Layout" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" '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

chunkSlotForUnknownBlock :: HasCallStack => ChunkInfo -> SlotNo -> (ChunkNo, Maybe ChunkSlot, ChunkSlot) Source #

Chunk slot for an unknown block

This returns two ChunkSlots: one in case the block could be an EBB, and one in case the block is a regular block. In addition, it also returns the ChunkNo that both of these ChunkSlots must necessarily share.

chunkSlotForRegularBlock :: ChunkInfo -> SlotNo -> ChunkSlot Source #

Chunk slot for a regular block (i.e., not an EBB)

chunkSlotForTip :: ChunkInfo -> Tip blk -> ChunkSlot Source #

Chunk slot for Tip

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