remove entry_writer.rs (#1720)
This commit is contained in:
36
src/bank.rs
36
src/bank.rs
@ -1487,14 +1487,12 @@ mod tests {
|
|||||||
use budget_program::BudgetState;
|
use budget_program::BudgetState;
|
||||||
use entry::next_entry;
|
use entry::next_entry;
|
||||||
use entry::Entry;
|
use entry::Entry;
|
||||||
use entry_writer::{self, EntryWriter};
|
|
||||||
use hash::hash;
|
use hash::hash;
|
||||||
use jsonrpc_macros::pubsub::{Subscriber, SubscriptionId};
|
use jsonrpc_macros::pubsub::{Subscriber, SubscriptionId};
|
||||||
use ledger;
|
use ledger;
|
||||||
use signature::Keypair;
|
use signature::Keypair;
|
||||||
use signature::{GenKeys, KeypairUtil};
|
use signature::{GenKeys, KeypairUtil};
|
||||||
use std;
|
use std;
|
||||||
use std::io::{BufReader, Cursor, Seek, SeekFrom};
|
|
||||||
use system_transaction::SystemTransaction;
|
use system_transaction::SystemTransaction;
|
||||||
use tokio::prelude::{Async, Stream};
|
use tokio::prelude::{Async, Stream};
|
||||||
use transaction::Instruction;
|
use transaction::Instruction;
|
||||||
@ -1915,40 +1913,6 @@ mod tests {
|
|||||||
assert_eq!(bank.last_id(), last_id);
|
assert_eq!(bank.last_id(), last_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the given entries to a file and then return a file iterator to them.
|
|
||||||
fn to_file_iter(entries: impl Iterator<Item = Entry>) -> impl Iterator<Item = Entry> {
|
|
||||||
let mut file = Cursor::new(vec![]);
|
|
||||||
EntryWriter::write_entries(&mut file, entries).unwrap();
|
|
||||||
file.seek(SeekFrom::Start(0)).unwrap();
|
|
||||||
|
|
||||||
let reader = BufReader::new(file);
|
|
||||||
entry_writer::read_entries(reader).map(|x| x.unwrap())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_process_ledger_from_file() {
|
|
||||||
let (ledger, pubkey) = create_sample_ledger(1);
|
|
||||||
let ledger = to_file_iter(ledger);
|
|
||||||
|
|
||||||
let bank = Bank::default();
|
|
||||||
bank.process_ledger(ledger).unwrap();
|
|
||||||
assert_eq!(bank.get_balance(&pubkey), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_process_ledger_from_files() {
|
|
||||||
let dummy_leader_id = Keypair::new().pubkey();
|
|
||||||
let dummy_leader_tokens = 1;
|
|
||||||
let mint = Mint::new_with_leader(2, dummy_leader_id, dummy_leader_tokens);
|
|
||||||
|
|
||||||
let genesis = to_file_iter(mint.create_entries().into_iter());
|
|
||||||
let block = to_file_iter(create_sample_block_with_ticks(&mint, 1, 1));
|
|
||||||
|
|
||||||
let bank = Bank::default();
|
|
||||||
bank.process_ledger(genesis.chain(block)).unwrap();
|
|
||||||
assert_eq!(bank.get_balance(&mint.pubkey()), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_hash_internal_state() {
|
fn test_hash_internal_state() {
|
||||||
let dummy_leader_id = Keypair::new().pubkey();
|
let dummy_leader_id = Keypair::new().pubkey();
|
||||||
|
@ -1,102 +0,0 @@
|
|||||||
//! The `entry_writer` module helps implement the TPU's write stage. It
|
|
||||||
//! writes entries to the given writer, which is typically a file or
|
|
||||||
//! stdout, and then sends the Entry to its output channel.
|
|
||||||
|
|
||||||
use bincode;
|
|
||||||
use entry::Entry;
|
|
||||||
use std::io::{self, BufRead, Error, ErrorKind, Write};
|
|
||||||
use std::mem::size_of;
|
|
||||||
|
|
||||||
pub struct EntryWriter {}
|
|
||||||
|
|
||||||
impl EntryWriter {
|
|
||||||
fn write_entry<W: Write>(writer: &mut W, entry: &Entry) -> io::Result<()> {
|
|
||||||
let entry_bytes =
|
|
||||||
bincode::serialize(&entry).map_err(|e| Error::new(ErrorKind::Other, e.to_string()))?;
|
|
||||||
|
|
||||||
let len = entry_bytes.len();
|
|
||||||
let len_bytes =
|
|
||||||
bincode::serialize(&len).map_err(|e| Error::new(ErrorKind::Other, e.to_string()))?;
|
|
||||||
|
|
||||||
writer.write_all(&len_bytes[..])?;
|
|
||||||
writer.write_all(&entry_bytes[..])?;
|
|
||||||
writer.flush()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn write_entries<W: Write, I>(writer: &mut W, entries: I) -> io::Result<()>
|
|
||||||
where
|
|
||||||
I: IntoIterator<Item = Entry>,
|
|
||||||
{
|
|
||||||
for entry in entries {
|
|
||||||
Self::write_entry(writer, &entry)?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct EntryReader<R: BufRead> {
|
|
||||||
reader: R,
|
|
||||||
entry_bytes: Vec<u8>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<R: BufRead> Iterator for EntryReader<R> {
|
|
||||||
type Item = io::Result<Entry>;
|
|
||||||
|
|
||||||
fn next(&mut self) -> Option<io::Result<Entry>> {
|
|
||||||
let mut entry_len_bytes = [0u8; size_of::<usize>()];
|
|
||||||
|
|
||||||
if self.reader.read_exact(&mut entry_len_bytes[..]).is_ok() {
|
|
||||||
let entry_len = bincode::deserialize(&entry_len_bytes).unwrap();
|
|
||||||
|
|
||||||
if entry_len > self.entry_bytes.len() {
|
|
||||||
self.entry_bytes.resize(entry_len, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Err(e) = self.reader.read_exact(&mut self.entry_bytes[..entry_len]) {
|
|
||||||
Some(Err(e))
|
|
||||||
} else {
|
|
||||||
Some(
|
|
||||||
bincode::deserialize(&self.entry_bytes)
|
|
||||||
.map_err(|e| Error::new(ErrorKind::Other, e.to_string())),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
None // EOF (probably)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return an iterator for all the entries in the given file.
|
|
||||||
pub fn read_entries<R: BufRead>(reader: R) -> impl Iterator<Item = io::Result<Entry>> {
|
|
||||||
EntryReader {
|
|
||||||
reader,
|
|
||||||
entry_bytes: Vec::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use mint::Mint;
|
|
||||||
use std::io::Cursor;
|
|
||||||
|
|
||||||
/// Same as read_entries() but parsing a buffer and returning a vector.
|
|
||||||
fn read_entries_from_buf(s: &[u8]) -> io::Result<Vec<Entry>> {
|
|
||||||
let mut result = vec![];
|
|
||||||
let reader = Cursor::new(s);
|
|
||||||
for x in read_entries(reader) {
|
|
||||||
trace!("entry... {:?}", x);
|
|
||||||
result.push(x?);
|
|
||||||
}
|
|
||||||
Ok(result)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_read_entries_from_buf() {
|
|
||||||
let mint = Mint::new(1);
|
|
||||||
let mut buf = vec![];
|
|
||||||
EntryWriter::write_entries(&mut buf, mint.create_entries()).unwrap();
|
|
||||||
let entries = read_entries_from_buf(&buf).unwrap();
|
|
||||||
assert_eq!(entries, mint.create_entries());
|
|
||||||
}
|
|
||||||
}
|
|
@ -29,7 +29,6 @@ pub mod budget_program;
|
|||||||
pub mod compute_leader_finality_service;
|
pub mod compute_leader_finality_service;
|
||||||
pub mod drone;
|
pub mod drone;
|
||||||
pub mod entry;
|
pub mod entry;
|
||||||
pub mod entry_writer;
|
|
||||||
#[cfg(feature = "erasure")]
|
#[cfg(feature = "erasure")]
|
||||||
pub mod erasure;
|
pub mod erasure;
|
||||||
pub mod fetch_stage;
|
pub mod fetch_stage;
|
||||||
|
Reference in New Issue
Block a user