mtime.2.0.0, which is now the lower bounds (#392, @patricoferris)index-bench's bench executable private, avoiding executable name collisions in opam-monorepo projects. (#389, @NathanReb)Raw.Header_prefix function, for use by libraries that share the file format used by index.unix. (#378)tezos-base58 instead of tezos-context-hash (#367)Index.find operations. The default LRU capacity is 30_000 entries. (#366)Raw.unsafe_write (#351)log_async invariant violations during an explicit sync operation, rather than failing immediately. (#329)nb-exec has been added (#292)Index.Make now requires an implementation of a monotonic time source. (#321)Index.Make functor now takes a single Platform argument containing all system dependencies (i.e. IO, Clock, Semaphore and Thread). The Platform module holds the necessary types for these modules. (#321, #330)Index.sync when there is a blocking merge in progress: the log_async file was not cached properly and fully reloaded from disk every time. (#310)Index.clear to signal more quickly to read-only instances than something has changed in the file (#308)IO.v to create read-only or read-write instances. (#291)clear removes the files on disks and opens new ones containing only the header. (#288, #307, #317)flush_callback parameter to the creation of a store, to register a callback before a flush. This callback can be temporarily disabled by ~no_callback:() to flush. (#189, #216)Stats.merge_durations to list the duration of the last 10 merges. (#193)is_merging to detect if a merge is running. (#192)IO.Header.{get,set} functions to read and write the file headers atomically (#175, #204, @icristescu, @CraigFe, @samoht)throttle configuration option to select the strategy to use when the cache are full and an async merge is already in progress. The current behavior is the (default) `Block_writes strategy. The new `Overcommit_memory does not block but continue to fill the cache instead. (#209, @samoht)IO.exists obligation for IO implementations, to be used for lazy creation of IO instances. (#233, @CraigFe)Index.close now takes an ~immediately:() argument. When passed, this causes close to terminate any ongoing asynchronous merge operation, rather than waiting for it to finish. (#185, #234)Index.Checks.cli, which provides offline integrity checking of Index stores. (#236)Index.replace now takes a ~overcommit argument to postpone a merge. (#253)Index.merge is now part of the public API. (#253)Index.try_merge is now part of the public API. try_merge' is a no-op if the number of entries in the write-ahead log is smaller than log_size, otherwise it's merge'. (#253 @samoht)sync has to be called by the read-only instance to synchronise with the files on disk. (#175)Index instances is now explicit: Index.Make requires a cache implementation, and Index.v may be passed a cache to be used for instance sharing. The default behaviour is not to share instances. (#188)merge and sync (#203, @samoht, @CraigFe)Index.iter to only iterate once over elements persisted on the disk (#260, @samoht, @icristescu)Index_unix.Syscalls, a module exposing various Unix bindings for interacting with file-systems. (#176)Index_unix.IO file version number is not as expected. (#178)data file exists. (#173)filter, removing bindings depending on a predicate (#165)Index.Make over arbitrary mutex and thread implementations (and remove the obligation for IO to provide this functionality). (#160, #161)merge operation, allowing concurrent read operations to share CPU resources with ongoing merges. (#152)force_merge from Index.S, due to difficulties with guaranteeing sensible semantics to this function under MRSW access patterns. (#147, #150)pwrite with len=0 (#131)log.mem on close (#135)log_async on startup (#136)First stable release.