diff --git a/src/lib_storage/raw_store.ml b/src/lib_storage/raw_store.ml index 5f17fa4c4..6df7410e2 100644 --- a/src/lib_storage/raw_store.ml +++ b/src/lib_storage/raw_store.ml @@ -66,7 +66,19 @@ let (>>=?) v f = let init ?mapsize path = if not (Sys.file_exists path) then Unix.mkdir path 0o755 ; - match Lmdb.opendir ?mapsize ~flags:[NoTLS; NoMetaSync] path 0o644 with + let sync_flag = + match Sys.getenv_opt "TEZOS_STORE_SYNC" with + | None -> [] + | Some s -> + match String.lowercase_ascii s with + | "nosync" -> [ Lmdb.NoSync ] + | "nometasync" -> [ Lmdb.NoMetaSync ] + | _ -> + Printf.eprintf "Unrecognized TEZOS_SYNC option : %s\n\ + allowed: nosync nometasync" s; + [] + in + match Lmdb.opendir ?mapsize ~flags:(sync_flag @ [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 21abebb5b..9bf0f1452 100644 --- a/vendors/irmin-lmdb/irmin_lmdb.ml +++ b/vendors/irmin-lmdb/irmin_lmdb.ml @@ -677,7 +677,19 @@ module Make 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 = if readonly then [ Lmdb.RdOnly ] else [] in - let flags = Lmdb.NoRdAhead :: Lmdb.NoTLS :: flags in + let sync_flag = + match Sys.getenv_opt "TEZOS_CONTEXT_SYNC" with + | None -> [] + | Some s -> + match String.lowercase_ascii s with + | "nosync" -> [ Lmdb.NoSync ] + | "nometasync" -> [ Lmdb.NoMetaSync ] + | _ -> + Printf.eprintf "Unrecognized TEZOS_SYNC option : %s\n\ + allowed: nosync nometasync" s; + [] + in + let flags = sync_flag @ 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)