Module Internal.Index

An abstraction on top of the index library that exposes an API that better fits the brassaia-pack use case.

type t
type key = hash
type value = Optint.Int63.t * int * Brassaia_pack.Pack_value.Kind.t
include Brassaia_index.Index.S with type value := value and type t := t and type key := key
type cache

The type for caches of index instances.

val empty_cache : unit -> cache

Construct a new empty cache of index instances.

val v : ?flush_callback:(unit -> unit) -> ?cache:cache -> ?fresh:bool -> ?readonly:bool -> ?throttle:[ `Overcommit_memory | `Block_writes ] -> ?lru_size:int -> log_size:int -> string -> t

The constructor for indexes.

  • parameter flush_callback

    A function to be called before any new bindings are persisted to disk (including both automatic flushing and explicit calls to flush or close).

    This can be used to ensure certain pre-conditions are met before bindings are persisted to disk. (For instance, if the index bindings are pointers into another data-structure d, it may be necessary to flush d first to avoid creating dangling pointers.)

  • parameter cache

    used for instance sharing.

  • parameter fresh

    whether an existing index should be overwritten.

  • parameter read_only

    whether read-only mode is enabled for this index.

  • parameter throttle

    the strategy to use when the cache are full and and async in already in progress. Block_writes (the default) blocks any new writes until the merge is completed. Overcommit_memory does not block but continues to fill the (already full) cache.

  • parameter log_size

    the maximum number of bindings in the `log` IO.

  • parameter lru_size

    the maximum number of recently-read index bindings kept in memory. Defaults to 30_000.

val clear : t -> unit

clear t clears t so that there are no more bindings in it.

val replace : ?overcommit:bool -> t -> key -> value -> unit

replace t k v binds k to v in t, replacing any existing binding of k.

If overcommit is true, the operation does not triger a merge, even if the caches are full. By default overcommit is false.

val sync : t -> unit

sync t syncs a read-only index with the files on disk. Raises RW_not_allowed if called by a read-write index.

val is_merging : t -> bool

is_merging t returns true if t is running a merge. Raises RO_not_allowed if called by a read-only index.

module Checks : sig ... end

Offline fsck-like utility for checking the integrity of Index stores built using this module.

module Io = Io.Unix
val init_exn : ?flush_callback:(unit -> unit) -> ?fresh:bool -> ?readonly:bool -> ?throttle:[ `Block_writes | `Overcommit_memory ] -> ?lru_size:int -> log_size:int -> string -> t
type create_error := [
  1. | `Index_failure of string
  2. | `Io_misc of Io.misc_error
]
type write_error := [
  1. | `Index_failure of string
  2. | `Io_misc of Io.misc_error
  3. | `Ro_not_allowed
]
val init : ?flush_callback:(unit -> unit) -> ?fresh:bool -> ?readonly:bool -> ?throttle:[ `Block_writes | `Overcommit_memory ] -> ?lru_size:int -> log_size:int -> string -> (t, [> create_error ]) Stdlib.result
val reload : t -> (unit, [> write_error ]) Stdlib.result
val close : t -> (unit, [> write_error ]) Stdlib.result
val close_exn : t -> unit
val flush : t -> with_fsync:bool -> (unit, [> write_error ]) Stdlib.result
val find : t -> key -> value option
val add : ?overcommit:bool -> t -> key -> value -> unit
val merge : t -> unit
val mem : t -> key -> bool
val iter : (key -> value -> unit) -> t -> unit
val filter : t -> ((key * value) -> bool) -> unit
val try_merge : t -> unit
module Key : Brassaia_index.Index.Key.S with type t = key