From 584c8c07b811fd1d9202ea8d80d29c06ed0b3089 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Fri, 6 Apr 2018 16:34:52 -0600 Subject: [PATCH] Better symmetry deserialize -> process -> serialize --- src/accountant_skel.rs | 48 +++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/accountant_skel.rs b/src/accountant_skel.rs index 9e77b4894..df2c19f02 100644 --- a/src/accountant_skel.rs +++ b/src/accountant_skel.rs @@ -149,10 +149,29 @@ impl AccountantSkel { .collect() } - fn create_blob_from_response( - blob_recycler: &packet::BlobRecycler, + fn process_packets( + obj: &Arc>>, + reqs: Vec>, + vers: Vec, + ) -> Vec<(Response, SocketAddr)> { + let mut rsps = Vec::new(); + for (data, v) in reqs.into_iter().zip(vers.into_iter()) { + if let Some((req, rsp_addr)) = data { + if !req.verify() { + continue; + } + if let Some(resp) = obj.lock().unwrap().log_verified_request(req, v) { + rsps.push((resp, rsp_addr)); + } + } + } + rsps + } + + fn serialize_response( resp: Response, rsp_addr: SocketAddr, + blob_recycler: &packet::BlobRecycler, ) -> Result { let blob = blob_recycler.allocate(); { @@ -166,25 +185,15 @@ impl AccountantSkel { Ok(blob) } - fn process_packets( - obj: &Arc>>, - reqs: Vec>, - vers: Vec, + fn serialize_responses( + rsps: Vec<(Response, SocketAddr)>, blob_recycler: &packet::BlobRecycler, ) -> Result> { - let mut rsps = VecDeque::new(); - for (data, v) in reqs.into_iter().zip(vers.into_iter()) { - if let Some((req, rsp_addr)) = data { - if !req.verify() { - continue; - } - if let Some(resp) = obj.lock().unwrap().log_verified_request(req, v) { - let blob = Self::create_blob_from_response(blob_recycler, resp, rsp_addr)?; - rsps.push_back(blob); - } - } + let mut blobs = VecDeque::new(); + for (resp, rsp_addr) in rsps { + blobs.push_back(Self::serialize_response(resp, rsp_addr, blob_recycler)?); } - Ok(rsps) + Ok(blobs) } fn process( @@ -198,7 +207,8 @@ impl AccountantSkel { let (mms, vvs) = verified_receiver.recv_timeout(timer)?; for (msgs, vers) in mms.into_iter().zip(vvs.into_iter()) { let reqs = Self::deserialize_packets(&msgs.read().unwrap()); - let blobs = Self::process_packets(obj, reqs, vers, blob_recycler)?; + let rsps = Self::process_packets(obj, reqs, vers); + let blobs = Self::serialize_responses(rsps, blob_recycler)?; if !blobs.is_empty() { //don't wake up the other side if there is nothing blob_sender.send(blobs)?;