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

Ouroboros.Consensus.Storage.VolatileDB.Impl.State

Synopsis

Tracing

data TraceEvent blk Source #

Instances

Instances details
StandardHash blk => Eq (TraceEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Methods

(==) :: TraceEvent blk -> TraceEvent blk -> Bool #

(/=) :: TraceEvent blk -> TraceEvent blk -> Bool #

StandardHash blk => Show (TraceEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Methods

showsPrec :: Int -> TraceEvent blk -> ShowS #

show :: TraceEvent blk -> String #

showList :: [TraceEvent blk] -> ShowS #

Generic (TraceEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Associated Types

type Rep (TraceEvent blk) :: Type -> Type #

Methods

from :: TraceEvent blk -> Rep (TraceEvent blk) x #

to :: Rep (TraceEvent blk) x -> TraceEvent blk #

type Rep (TraceEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

type Rep (TraceEvent blk) = D1 ('MetaData "TraceEvent" "Ouroboros.Consensus.Storage.VolatileDB.Impl.Types" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) ((C1 ('MetaCons "DBAlreadyClosed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "DBAlreadyOpen" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BlockAlreadyHere" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (HeaderHash blk))))) :+: (C1 ('MetaCons "TruncateCurrentFile" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FsPath)) :+: (C1 ('MetaCons "Truncate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ParseError blk)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FsPath) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 BlockOffset))) :+: C1 ('MetaCons "InvalidFileNames" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [FsPath])))))

State types

type FileId = Int Source #

The FileId is the unique identifier of each file found in the db. For example, the file blocks-42.dat has FileId 42.

type ReverseIndex blk = Map (HeaderHash blk) (InternalBlockInfo blk) Source #

We map the header hash of each block to the InternalBlockInfo.

type SuccessorsIndex blk = Map (ChainHash blk) (Set (HeaderHash blk)) Source #

For each block, we store the set of all blocks which have this block as a predecessor (set of successors).

newtype BlockSize Source #

Constructors

BlockSize 

Fields

Instances

Instances details
Eq BlockSize Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Show BlockSize Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Generic BlockSize Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Associated Types

type Rep BlockSize :: Type -> Type #

NoThunks BlockSize Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

type Rep BlockSize Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

type Rep BlockSize = D1 ('MetaData "BlockSize" "Ouroboros.Consensus.Storage.VolatileDB.Impl.Types" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'True) (C1 ('MetaCons "BlockSize" 'PrefixI 'True) (S1 ('MetaSel ('Just "unBlockSize") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word32)))

newtype BlockOffset Source #

The offset at which a block is stored in a file.

Constructors

BlockOffset 

Instances

Instances details
Eq BlockOffset Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Show BlockOffset Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Generic BlockOffset Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

Associated Types

type Rep BlockOffset :: Type -> Type #

NoThunks BlockOffset Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

type Rep BlockOffset Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.Types

type Rep BlockOffset = D1 ('MetaData "BlockOffset" "Ouroboros.Consensus.Storage.VolatileDB.Impl.Types" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'True) (C1 ('MetaCons "BlockOffset" 'PrefixI 'True) (S1 ('MetaSel ('Just "unBlockOffset") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word64)))

data VolatileDBEnv m blk Source #

Constructors

forall h.Eq h => VolatileDBEnv 

Fields

data InternalState blk h Source #

Constructors

DbClosed 
DbOpen !(OpenState blk h) 

Instances

Instances details
Generic (InternalState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

Associated Types

type Rep (InternalState blk h) :: Type -> Type #

Methods

from :: InternalState blk h -> Rep (InternalState blk h) x #

to :: Rep (InternalState blk h) x -> InternalState blk h #

(StandardHash blk, Typeable blk) => NoThunks (InternalState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

type Rep (InternalState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

type Rep (InternalState blk h) = D1 ('MetaData "InternalState" "Ouroboros.Consensus.Storage.VolatileDB.Impl.State" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "DbClosed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DbOpen" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (OpenState blk h))))

data OpenState blk h Source #

Internal state when the database is open.

Constructors

OpenState 

Fields

Instances

Instances details
Generic (OpenState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

Associated Types

type Rep (OpenState blk h) :: Type -> Type #

Methods

from :: OpenState blk h -> Rep (OpenState blk h) x #

to :: Rep (OpenState blk h) x -> OpenState blk h #

(StandardHash blk, Typeable blk) => NoThunks (OpenState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

type Rep (OpenState blk h) Source # 
Instance details

Defined in Ouroboros.Consensus.Storage.VolatileDB.Impl.State

type Rep (OpenState blk h) = D1 ('MetaData "OpenState" "Ouroboros.Consensus.Storage.VolatileDB.Impl.State" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "OpenState" 'PrefixI 'True) (((S1 ('MetaSel ('Just "currentWriteHandle") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Handle h)) :*: S1 ('MetaSel ('Just "currentWritePath") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 FsPath)) :*: (S1 ('MetaSel ('Just "currentWriteId") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 FileId) :*: S1 ('MetaSel ('Just "currentWriteOffset") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word64))) :*: ((S1 ('MetaSel ('Just "currentMap") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Index blk)) :*: S1 ('MetaSel ('Just "currentRevMap") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (ReverseIndex blk))) :*: (S1 ('MetaSel ('Just "currentSuccMap") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (SuccessorsIndex blk)) :*: S1 ('MetaSel ('Just "currentMaxSlotNo") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 MaxSlotNo)))))

State helpers

type ModifyOpenState m blk h = StateT (OpenState blk h) (WithTempRegistry (OpenState blk h) m) Source #

Shorthand

appendOpenState :: forall blk m a. IOLike m => VolatileDBEnv m blk -> (forall h. Eq h => HasFS m h -> ModifyOpenState m blk h a) -> m a Source #

Append to the open state. Reads can happen concurrently with this operation.

NOTE: This is safe in terms of throwing FsErrors.

writeOpenState :: forall blk m a. IOLike m => VolatileDBEnv m blk -> (forall h. Eq h => HasFS m h -> ModifyOpenState m blk h a) -> m a Source #

Write to the open state. No reads or appends can concurrently with this operation.

NOTE: This is safe in terms of throwing FsErrors.

withOpenState :: forall blk m r. IOLike m => VolatileDBEnv m blk -> (forall h. HasFS m h -> OpenState blk h -> m r) -> m r Source #

Perform an action that accesses the internal state of an open database.

In case the database is closed, a ClosedDBError is thrown.

In case an UnexpectedFailure is thrown while the action is being run, the database is closed to prevent further appending to a database in a potentially inconsistent state. All other exceptions will leave the database open.

closeOpenHandles :: HasFS m h -> OpenState blk h -> m () Source #

Close the handles in the OpenState.

Idempotent, as closing a handle is idempotent.

NOTE: does not wrap FsErrors and must be called within wrapFsError or tryVolatileDB.