From c59c38e50e324a35d5118b600f7574e5cff871cc Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Thu, 29 Mar 2018 13:09:21 -0600 Subject: [PATCH] Refactor for batch verification --- src/accountant_skel.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/accountant_skel.rs b/src/accountant_skel.rs index 9558fab85..4b8c61185 100644 --- a/src/accountant_skel.rs +++ b/src/accountant_skel.rs @@ -11,7 +11,7 @@ use serde_json; use signature::PublicKey; use std::default::Default; use std::io::Write; -use std::net::UdpSocket; +use std::net::{SocketAddr, UdpSocket}; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc::channel; use std::sync::{Arc, Mutex}; @@ -34,6 +34,10 @@ pub enum Request { GetId { is_last: bool }, } +fn filter_valid_requests(reqs: Vec<(Request, SocketAddr)>) -> Vec<(Request, SocketAddr)> { + reqs +} + #[derive(Serialize, Deserialize, Debug)] pub enum Response { Balance { key: PublicKey, val: Option }, @@ -98,12 +102,18 @@ impl AccountantSkel { let rsps = streamer::allocate(response_recycler); let rsps_ = rsps.clone(); { - let mut num = 0; - let mut ursps = rsps.write().unwrap(); + let mut reqs = vec![]; for packet in &msgs.read().unwrap().packets { let rsp_addr = packet.meta.get_addr(); let sz = packet.meta.size; 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 ursps.responses.len() <= num { ursps