Refactor for batch verification

This commit is contained in:
Greg Fitzgerald
2018-03-29 13:09:21 -06:00
parent 232e1bb8a3
commit c59c38e50e

View File

@ -11,7 +11,7 @@ use serde_json;
use signature::PublicKey; use signature::PublicKey;
use std::default::Default; use std::default::Default;
use std::io::Write; use std::io::Write;
use std::net::UdpSocket; use std::net::{SocketAddr, UdpSocket};
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
@ -34,6 +34,10 @@ pub enum Request {
GetId { is_last: bool }, GetId { is_last: bool },
} }
fn filter_valid_requests(reqs: Vec<(Request, SocketAddr)>) -> Vec<(Request, SocketAddr)> {
reqs
}
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
pub enum Response { pub enum Response {
Balance { key: PublicKey, val: Option<i64> }, Balance { key: PublicKey, val: Option<i64> },
@ -98,12 +102,18 @@ impl<W: Write + Send + 'static> AccountantSkel<W> {
let rsps = streamer::allocate(response_recycler); let rsps = streamer::allocate(response_recycler);
let rsps_ = rsps.clone(); let rsps_ = rsps.clone();
{ {
let mut num = 0; let mut reqs = vec![];
let mut ursps = rsps.write().unwrap();
for packet in &msgs.read().unwrap().packets { for packet in &msgs.read().unwrap().packets {
let rsp_addr = packet.meta.get_addr(); let rsp_addr = packet.meta.get_addr();
let sz = packet.meta.size; let sz = packet.meta.size;
let req = deserialize(&packet.data[0..sz])?; let req = deserialize(&packet.data[0..sz])?;
reqs.push((req, rsp_addr));
}
let reqs = filter_valid_requests(reqs);
let mut num = 0;
let mut ursps = rsps.write().unwrap();
for (req, rsp_addr) in reqs {
if let Some(resp) = obj.lock().unwrap().process_request(req) { if let Some(resp) = obj.lock().unwrap().process_request(req) {
if ursps.responses.len() <= num { if ursps.responses.len() <= num {
ursps ursps