NOBUG Using BufWriter<Box<Write>>

This commit is contained in:
Paul Masurel
2016-10-25 10:27:43 +09:00
parent 99ca43fd22
commit 91b8402e61
5 changed files with 16 additions and 21 deletions

View File

@@ -99,34 +99,29 @@ impl MmapDirectory {
/// This Write wraps a File, but has the specificity of
/// call `sync_all` on flush.
struct SafeFileWriter {
writer: BufWriter<File>,
}
struct SafeFileWriter(File);
impl SafeFileWriter {
fn new(file: File) -> SafeFileWriter {
SafeFileWriter {
writer: BufWriter::new(file),
}
SafeFileWriter(file)
}
}
impl Write for SafeFileWriter {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.writer.write(buf)
self.0.write(buf)
}
fn flush(&mut self) -> io::Result<()> {
try!(self.writer.flush());
self.writer.get_ref().sync_all()
try!(self.0.flush());
self.0.sync_all()
}
}
impl Seek for SafeFileWriter {
fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
self.writer.seek(pos)
self.0.seek(pos)
}
}
@@ -204,7 +199,7 @@ impl Directory for MmapDirectory {
try!(self.sync_directory());
let writer = SafeFileWriter::new(file);
Ok(Box::new(writer))
Ok(BufWriter::new(Box::new(writer)))
}
fn delete(&self, path: &Path) -> result::Result<(), FileError> {

View File

@@ -7,8 +7,9 @@ mod shared_vec_slice;
/// Errors specific to the directory module.
pub mod error;
use std::io::{Seek, Write};
use std::io::{Write, Seek};
use std::io::BufWriter;
pub use self::read_only_source::ReadOnlySource;
pub use self::directory::Directory;
pub use self::ram_directory::RAMDirectory;
@@ -22,14 +23,14 @@ impl<T: Seek + Write> SeekableWrite for T {}
///
/// `WritePtr` are required to implement both Write
/// and Seek.
pub type WritePtr = Box<SeekableWrite>;
pub type WritePtr = BufWriter<Box<SeekableWrite>>;
#[cfg(test)]
mod tests {
use super::*;
use std::path::Path;
use std::io::SeekFrom;
use std::path::Path;
use std::io::{Write, Seek, SeekFrom};
lazy_static! {
static ref TEST_PATH: &'static Path = Path::new("some_path_for_test");

View File

@@ -1,7 +1,6 @@
use std::collections::HashMap;
use std::fmt;
use std::io;
use std::io::{Cursor, Write, Seek, SeekFrom};
use std::io::{self, BufWriter, Cursor, Write, Seek, SeekFrom};
use std::path::{Path, PathBuf};
use std::result;
use std::sync::{Arc, RwLock};
@@ -173,7 +172,7 @@ impl Directory for RAMDirectory {
Err(OpenWriteError::FileAlreadyExists(path_buf))
}
else {
Ok(Box::new(vec_writer))
Ok(BufWriter::new(Box::new(vec_writer)))
}
}

View File

@@ -1,8 +1,7 @@
use common::BinarySerializable;
use directory::WritePtr;
use schema::Field;
use std::io;
use std::io::{SeekFrom, Write};
use std::io::{self, SeekFrom, Seek, Write};
use super::compute_num_bits;

View File

@@ -13,6 +13,7 @@ use DocId;
use core::Segment;
use std::io;
use core::SegmentComponent;
use std::io::Write;
use common::VInt;
use common::BinarySerializable;