From 09bf4e4819d1e0aee90bd206eac266b4e3e74050 Mon Sep 17 00:00:00 2001 From: Pierre Chambart Date: Mon, 17 Sep 2018 18:09:50 +0200 Subject: [PATCH] Store and Context: open the database with the nometasync flag This mode maintains the coherency of the database in case of crash, but can drop the last commits. This is not a problem for us since every data is recoverable. --- src/lib_storage/raw_store.ml | 2 +- vendors/irmin-lmdb/irmin_lmdb.ml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib_storage/raw_store.ml b/src/lib_storage/raw_store.ml index 2848ade29..5f17fa4c4 100644 --- a/src/lib_storage/raw_store.ml +++ b/src/lib_storage/raw_store.ml @@ -66,7 +66,7 @@ let (>>=?) v f = let init ?mapsize path = if not (Sys.file_exists path) then Unix.mkdir path 0o755 ; - match Lmdb.opendir ?mapsize ~flags:[NoTLS] path 0o644 with + match Lmdb.opendir ?mapsize ~flags:[NoTLS; NoMetaSync] path 0o644 with | Ok dir -> return { dir ; parent = Lwt.new_key () } | Error err -> failwith "%a" Lmdb.pp_error err diff --git a/vendors/irmin-lmdb/irmin_lmdb.ml b/vendors/irmin-lmdb/irmin_lmdb.ml index 39a8357db..d69fdbe0a 100644 --- a/vendors/irmin-lmdb/irmin_lmdb.ml +++ b/vendors/irmin-lmdb/irmin_lmdb.ml @@ -641,7 +641,8 @@ module Make let { root ; mapsize ; readonly } = config conf in let root = match root with None -> "irmin.ldb" | Some root -> root in if not (Sys.file_exists root) then Unix.mkdir root 0o755 ; - let flags = Lmdb.NoRdAhead :: Lmdb.NoTLS :: if readonly then [ Lmdb.RdOnly ] else [] in + let flags = if readonly then [ Lmdb.RdOnly ] else [] in + let flags = Lmdb.NoMetaSync :: Lmdb.NoRdAhead :: Lmdb.NoTLS :: flags in let file_flags = if readonly then 0o444 else 0o644 in match Lmdb.opendir ~mapsize ~flags root file_flags with | Error err -> Lwt.fail_with (Lmdb.string_of_error err)