marconi-core-1.2.0.0: Modular indexing for rewindable ledger
Safe HaskellSafe-Inferred
LanguageHaskell2010

Marconi.Core.Indexer.MixedIndexer

Description

An indexer that uses an indexer for recent events (usually in-memory) and another one for older events (usually on-disk).

This indexer maintains a queue of flush points. Once we received enough blocks (keepInMemory + flushEvery events), we dequeue the oldest flush point and send all the in memory events that are older or equal to this flush point on disk.

The implementation considers that all the immutable events are sent to disk.

See Marconi.Core for documentation.

Synopsis

Documentation

class Flushable m event indexer where #

Define a way to flush old events out of a container

Associated Types

type Container (indexer :: Type -> Type) :: Type -> Type #

The events container used when you flush event

Methods

memorySize :: indexer event -> m Word #

flushMemory #

Arguments

:: Point event

Last point to flush

-> indexer event 
-> m (Container indexer (Timed (Point event) event), indexer event) 

Clear the memory and return its content

Instances

Instances details
(Applicative m, Ord (Point event)) => Flushable m event ListIndexer # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Associated Types

type Container ListIndexer :: Type -> Type #

Methods

memorySize :: ListIndexer event -> m Word #

flushMemory :: Point event -> ListIndexer event -> m (Container ListIndexer (Timed (Point event) event), ListIndexer event) #

data MixedIndexer store mem event #

An indexer that keepAtLeast _configKeepInMemory events in memory and put the older one on disk by group of _configFlushSize events. The query interface for this indexer will always go through the database first and then prune results present in memory.

mem the indexer that handles old events, when we need to remove stuff from memory store the indexer that handle the most recent events

Instances

Instances details
(AppendResult m event query ListIndexer, Queryable m event query store) => Queryable m event query (MixedIndexer store ListIndexer) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

query :: Point event -> query -> MixedIndexer store ListIndexer event -> m (Result query) #

queryLatest :: query -> MixedIndexer store ListIndexer event -> m (Result query) #

(Ord (Point event), Flushable m event mem, Traversable (Container mem), IsIndex m event store, IsIndex m event mem, IsSync m event mem) => IsIndex m event (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

index :: Timed (Point event) (Maybe event) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

rollback :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

setLastStablePoint :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

(IsSync event m mem, Monad event) => IsSync event m (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

lastStablePoint :: MixedIndexer store mem m -> event (Point m) #

lastSyncPoint :: MixedIndexer store mem m -> event (Point m) #

(Functor m, Prunable m event store) => Prunable m event (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Transformer.WithPruning

Methods

prune :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) #

pruningPoint :: MixedIndexer store mem event -> m (Maybe (Point event)) #

(Closeable m store, Closeable m mem, Monad m) => Closeable m (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

close :: MixedIndexer store mem event -> m () #

HasMixedConfig (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

flushEvery :: Lens' (MixedIndexer store mem event) Word #

keepInMemory :: Lens' (MixedIndexer store mem event) Word #

mkMixedIndexer #

Arguments

:: Word

how many events are kept in memory after a flush

-> Word

flush size

-> store event 
-> mem event 
-> MixedIndexer store mem event 

A smart constructor for a MixedIndexer that sets only the relevant parameters

standardMixedIndexer #

Arguments

:: (IsSync m event store, HasGenesis (Point event), Ord (Point event), Monad m) 
=> Word

how many events are kept in memory after a flush

-> Word

flush size

-> store event 
-> m (MixedIndexer store ListIndexer event) 

Create a mixed indexer that initialised it's last stable point point from the inDatabase indexer

inMemory :: Lens' (MixedIndexer store mem event) (mem event) #

access to the in memory part of the indexer

inDatabase :: Lens' (MixedIndexer store mem event) (store event) #

access to the on disk part of the indexer

class HasMixedConfig indexer where #

Provide access to the mixed indexer configuration, an indexer transformer has to implement it if you want to access the configuration option of the mixed indexer below the transformer

Methods

flushEvery :: Lens' (indexer event) Word #

keepInMemory :: Lens' (indexer event) Word #

Instances

Instances details
(IndexerTrans t, HasMixedConfig indexer) => HasMixedConfig (t indexer) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

flushEvery :: Lens' (t indexer event) Word #

keepInMemory :: Lens' (t indexer event) Word #

HasMixedConfig (MixedIndexer store mem) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

flushEvery :: Lens' (MixedIndexer store mem event) Word #

keepInMemory :: Lens' (MixedIndexer store mem event) Word #

(IndexerMapTrans t, HasMixedConfig indexer) => HasMixedConfig (t indexer output) # 
Instance details

Defined in Marconi.Core.Indexer.MixedIndexer

Methods

flushEvery :: Lens' (t indexer output event) Word #

keepInMemory :: Lens' (t indexer output event) Word #

flushEveryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word #

Ease the implementation of flushEvery for an indexer transformer

keepInMemoryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word #

Ease the implementation of keepInMemory for an indexer transformer