indexedlog: extract empty mmap logic to a function

Summary:
This starts a series of changes to make indexedlog work in "in-memory-only"
mode. It is useful in 2 cases:

- buffering blackbox writes (short term)
- reused in Mononoke which does not want side-effect on disk (longer term)

Reviewed By: sfilipco

Differential Revision: D16044042

fbshipit-source-id: bdf35a9565e39e65c9ba4ddb949aa86412b4d496
This commit is contained in:
Jun Wu 2019-07-18 15:04:30 -07:00 committed by Facebook Github Bot
parent 2ec82860a2
commit 82b6c96907

View File

@ -42,7 +42,7 @@ pub fn mmap_readonly(file: &File, len: Option<u64>) -> io::Result<(Mmap, u64)> {
};
let mmap = unsafe {
if len == 0 {
MmapOptions::new().len(1).map_anon()?.make_read_only()?
mmap_empty()?
} else {
MmapOptions::new().len(len as usize).map(&file)?
}
@ -50,6 +50,11 @@ pub fn mmap_readonly(file: &File, len: Option<u64>) -> io::Result<(Mmap, u64)> {
Ok((mmap, len))
}
/// Return a [`Mmap`] that is expected to be empty.
pub fn mmap_empty() -> io::Result<Mmap> {
Ok(MmapOptions::new().len(1).map_anon()?.make_read_only()?)
}
/// Open a path. Usually for locking purpose.
///
/// The path is assumed to be a directory. But this function does not do extra