Exit write_stage on channel errors

This commit is contained in:
Greg Fitzgerald
2018-07-05 15:29:19 -06:00
committed by Greg Fitzgerald
parent b95db62be3
commit 82c86daa78

View File

@ -7,12 +7,12 @@ use entry::Entry;
use entry_writer::EntryWriter; use entry_writer::EntryWriter;
use ledger::Block; use ledger::Block;
use packet::BlobRecycler; use packet::BlobRecycler;
use result::Result; use result::{Error, Result};
use service::Service; use service::Service;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::io::Write; use std::io::Write;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc::{channel, Receiver}; use std::sync::mpsc::{channel, Receiver, RecvTimeoutError};
use std::sync::Arc; use std::sync::Arc;
use std::thread::{self, Builder, JoinHandle}; use std::thread::{self, Builder, JoinHandle};
use std::time::Duration; use std::time::Duration;
@ -57,12 +57,19 @@ impl WriteStage {
.spawn(move || { .spawn(move || {
let mut entry_writer = EntryWriter::new(&bank, writer); let mut entry_writer = EntryWriter::new(&bank, writer);
loop { loop {
let _ = Self::write_and_send_entries( if let Err(e) = Self::write_and_send_entries(
&mut entry_writer, &mut entry_writer,
&blob_sender, &blob_sender,
&blob_recycler, &blob_recycler,
&entry_receiver, &entry_receiver,
); ) {
match e {
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break,
Error::SendError => break,
_ => error!("{:?}", e),
}
};
if exit.load(Ordering::Relaxed) { if exit.load(Ordering::Relaxed) {
info!("broadcat_service exiting"); info!("broadcat_service exiting");
break; break;