Don't hide error in write_entry()

This commit is contained in:
Greg Fitzgerald
2018-07-01 08:09:32 -07:00
committed by Greg Fitzgerald
parent b05e6ce3db
commit 466d6f76b9

View File

@ -9,8 +9,7 @@ use packet::BlobRecycler;
use result::Result; use result::Result;
use serde_json; use serde_json;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::io::sink; use std::io::{self, sink, Write};
use std::io::Write;
use std::sync::mpsc::Receiver; use std::sync::mpsc::Receiver;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::time::Duration; use std::time::Duration;
@ -26,7 +25,7 @@ impl<'a> EntryWriter<'a> {
EntryWriter { bank } EntryWriter { bank }
} }
fn write_entry<W: Write>(&self, writer: &Mutex<W>, entry: &Entry) { fn write_entry<W: Write>(&self, writer: &Mutex<W>, entry: &Entry) -> io::Result<()> {
trace!("write_entry entry"); trace!("write_entry entry");
if !entry.has_more { if !entry.has_more {
self.bank.register_entry_id(&entry.id); self.bank.register_entry_id(&entry.id);
@ -35,7 +34,7 @@ impl<'a> EntryWriter<'a> {
writer.lock().expect("'writer' lock in fn fn write_entry"), writer.lock().expect("'writer' lock in fn fn write_entry"),
"{}", "{}",
serde_json::to_string(&entry).expect("'entry' to_strong in fn write_entry") serde_json::to_string(&entry).expect("'entry' to_strong in fn write_entry")
).expect("writeln! in fn write_entry"); )
} }
fn write_entries<W: Write>( fn write_entries<W: Write>(
@ -46,10 +45,10 @@ impl<'a> EntryWriter<'a> {
//TODO implement a serialize for channel that does this without allocations //TODO implement a serialize for channel that does this without allocations
let mut l = vec![]; let mut l = vec![];
let entry = entry_receiver.recv_timeout(Duration::new(1, 0))?; let entry = entry_receiver.recv_timeout(Duration::new(1, 0))?;
self.write_entry(writer, &entry); self.write_entry(writer, &entry)?;
l.push(entry); l.push(entry);
while let Ok(entry) = entry_receiver.try_recv() { while let Ok(entry) = entry_receiver.try_recv() {
self.write_entry(writer, &entry); self.write_entry(writer, &entry)?;
l.push(entry); l.push(entry);
} }
Ok(l) Ok(l)
@ -114,11 +113,11 @@ mod tests {
// Verify that write_entry doesn't register the first entries after a split. // Verify that write_entry doesn't register the first entries after a split.
assert_eq!(bank.last_id(), mint.last_id()); assert_eq!(bank.last_id(), mint.last_id());
let writer = Mutex::new(sink()); let writer = Mutex::new(sink());
entry_writer.write_entry(&writer, &entries[0]); entry_writer.write_entry(&writer, &entries[0]).unwrap();
assert_eq!(bank.last_id(), mint.last_id()); assert_eq!(bank.last_id(), mint.last_id());
// Verify that write_entry registers the final entry after a split. // Verify that write_entry registers the final entry after a split.
entry_writer.write_entry(&writer, &entries[1]); entry_writer.write_entry(&writer, &entries[1]).unwrap();
assert_eq!(bank.last_id(), entries[1].id); assert_eq!(bank.last_id(), entries[1].id);
} }
} }