ouroboros-consensus-0.18.0.0: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Consensus.Storage.ImmutableDB.Impl.Index.Cache

Synopsis

Environment

data CacheConfig Source #

Constructors

CacheConfig 

Fields

data CacheEnv m blk h Source #

Environment used by functions operating on the cached index.

checkInvariants Source #

Arguments

Word32

Maximum number of past chunks to cache

→ Cached blk 
Maybe String 

newEnv Source #

Arguments

∷ (HasCallStack, ConvertRawHash blk, IOLike m, StandardHash blk, Typeable blk) 
HasFS m h 
ResourceRegistry m 
Tracer m TraceCacheEvent 
CacheConfig 
ChunkInfo 
ChunkNo

Current chunk

→ m (CacheEnv m blk h) 

Creates a new CacheEnv and launches a background thread that expires unused past chunks (expireUnusedChunks).

PRECONDITION: $sel:pastChunksToCache:CacheConfig (in CacheConfig) > 0

Background thread

expireUnusedChunks ∷ (HasCallStack, IOLike m) ⇒ CacheEnv m blk h → m Void Source #

Intended to run as a background thread.

Will expire past chunks that haven't been used for $sel:expireUnusedAfter:CacheConfig from the cache.

Operations

closeIOLike m ⇒ CacheEnv m blk h → m () Source #

Stops the background expiration thread.

This operation is idempotent.

restart Source #

Arguments

∷ (ConvertRawHash blk, IOLike m, StandardHash blk, Typeable blk) 
CacheEnv m blk h 
ChunkNo

The new current chunk

→ m () 

Restarts the background expiration thread, drops all previously cached information, loads the given chunk.

PRECONDITION: the background thread expiring unused past chunks must have been terminated.

On the primary index

appendOffsets ∷ (HasCallStack, Foldable f, IOLike m) ⇒ CacheEnv m blk h → Handle h → f SecondaryOffset → m () Source #

openPrimaryIndex ∷ (HasCallStack, ConvertRawHash blk, IOLike m, StandardHash blk, Typeable blk) ⇒ CacheEnv m blk h → ChunkNoAllowExisting → m (Handle h) Source #

This is called when a new chunk is started, which means we need to update Cached to reflect this.

On the secondary index

appendEntry ∷ ∀ m blk h. (HasCallStack, ConvertRawHash blk, IOLike m) ⇒ CacheEnv m blk h → ChunkNoHandle h → Entry blk → m Word64 Source #

readAllEntries ∷ ∀ m blk h. (HasCallStack, ConvertRawHash blk, IOLike m, StandardHash blk, Typeable blk) ⇒ CacheEnv m blk h → SecondaryOffsetChunkNo → (Entry blk → Bool) → Word64IsEBB → m [WithBlockSize (Entry blk)] Source #

readEntries ∷ ∀ m blk h t. (HasCallStack, ConvertRawHash blk, IOLike m, StandardHash blk, Typeable blk, Traversable t) ⇒ CacheEnv m blk h → ChunkNo → t (IsEBB, SecondaryOffset) → m (t (Entry blk, BlockSize)) Source #