Merge pull request #1298 from ethcore/fiximport

Fix read-ahead bug.
This commit is contained in:
Nikolay Volf 2016-06-16 13:17:13 +04:00 committed by GitHub
commit 5a0d367e0b

View File

@ -398,7 +398,9 @@ fn execute_import(conf: Configuration) {
Box::new(::std::io::stdin()) Box::new(::std::io::stdin())
}; };
let mut first_bytes: Bytes = vec![0; 3]; const READAHEAD_BYTES: usize = 8;
let mut first_bytes: Bytes = vec![0; READAHEAD_BYTES];
let mut first_read = 0; let mut first_read = 0;
let format = match conf.args.flag_format { let format = match conf.args.flag_format {
@ -438,13 +440,13 @@ fn execute_import(conf: Configuration) {
match format { match format {
DataFormat::Binary => { DataFormat::Binary => {
loop { loop {
let mut bytes: Bytes = if first_read > 0 {first_bytes.clone()} else {vec![0; 3]}; let mut bytes: Bytes = if first_read > 0 {first_bytes.clone()} else {vec![0; READAHEAD_BYTES]};
let n = if first_read > 0 {first_read} else {instream.read(&mut(bytes[..])).unwrap_or_else(|_| die!("Error reading from the file/stream."))}; let n = if first_read > 0 {first_read} else {instream.read(&mut(bytes[..])).unwrap_or_else(|_| die!("Error reading from the file/stream."))};
if n == 0 { break; } if n == 0 { break; }
first_read = 0; first_read = 0;
let s = PayloadInfo::from(&(bytes[..])).unwrap_or_else(|e| die!("Invalid RLP in the file/stream: {:?}", e)).total(); let s = PayloadInfo::from(&(bytes[..])).unwrap_or_else(|e| die!("Invalid RLP in the file/stream: {:?}", e)).total();
bytes.resize(s, 0); bytes.resize(s, 0);
instream.read_exact(&mut(bytes[3..])).unwrap_or_else(|_| die!("Error reading from the file/stream.")); instream.read_exact(&mut(bytes[READAHEAD_BYTES..])).unwrap_or_else(|_| die!("Error reading from the file/stream."));
do_import(bytes); do_import(bytes);
} }
} }