From 31d18dca1c9c18acc120c8cfb7a191510f1bd2d3 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Fri, 21 Aug 2020 21:37:05 +0900 Subject: [PATCH] Removing dependency to atomicwrites (#866) --- CHANGELOG.md | 4 ++++ Cargo.toml | 7 +++---- src/directory/mmap_directory.rs | 9 ++++++--- src/indexer/mod.rs | 3 ++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95fa190a7..422de26d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +Tantivy 0.14.0 +========================= +- Remove dependency to atomicwrites #833 .Implemented by @pmasurel upon suggestion and research from @asafigan). + Tantivy 0.13.0 ====================== Tantivy 0.13 introduce a change in the index format that will require diff --git a/Cargo.toml b/Cargo.toml index 394a2b71e..d324513e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tantivy" -version = "0.13.0" +version = "0.14.0-dev" authors = ["Paul Masurel "] license = "MIT" categories = ["database-implementations", "data-structures"] @@ -22,8 +22,7 @@ tantivy-fst = "0.3" memmap = {version = "0.7", optional=true} lz4 = {version="1.20", optional=true} snap = "1" -atomicwrites = {version="0.2.2", optional=true} -tempfile = "3.0" +tempfile = {version="3.0", optional=true} log = "0.4" serde = {version="1.0", features=["derive"]} serde_json = "1.0" @@ -75,7 +74,7 @@ overflow-checks = true [features] default = ["mmap"] -mmap = ["atomicwrites", "fs2", "memmap", "notify"] +mmap = ["fs2", "tempfile", "memmap", "notify"] lz4-compression = ["lz4"] failpoints = ["fail/failpoints"] unstable = [] # useful for benches. diff --git a/src/directory/mmap_directory.rs b/src/directory/mmap_directory.rs index 173e394e5..1e37e6478 100644 --- a/src/directory/mmap_directory.rs +++ b/src/directory/mmap_directory.rs @@ -34,6 +34,7 @@ use std::sync::Mutex; use std::sync::RwLock; use std::sync::Weak; use std::thread; +use tempfile; use tempfile::TempDir; /// Create a default io error given a string. @@ -487,11 +488,13 @@ impl Directory for MmapDirectory { } } - fn atomic_write(&mut self, path: &Path, data: &[u8]) -> io::Result<()> { + fn atomic_write(&mut self, path: &Path, content: &[u8]) -> io::Result<()> { debug!("Atomic Write {:?}", path); + let mut tempfile = tempfile::NamedTempFile::new()?; + tempfile.write_all(content)?; + tempfile.flush()?; let full_path = self.resolve_path(path); - let meta_file = atomicwrites::AtomicFile::new(full_path, atomicwrites::AllowOverwrite); - meta_file.write(|f| f.write_all(data))?; + tempfile.into_temp_path().persist(full_path)?; Ok(()) } diff --git a/src/indexer/mod.rs b/src/indexer/mod.rs index fc7be1e27..d09305399 100644 --- a/src/indexer/mod.rs +++ b/src/indexer/mod.rs @@ -29,8 +29,9 @@ pub use self::segment_writer::SegmentWriter; /// Alias for the default merge policy, which is the `LogMergePolicy`. pub type DefaultMergePolicy = LogMergePolicy; +#[cfg(feature = "mmap")] #[cfg(test)] -mod tests { +mod tests_mmap { use crate::schema::{self, Schema}; use crate::{Index, Term};