Rename Requests to Batch
This commit is contained in:
		
							parent
							
								
									684b142711
								
							
						
					
					
						commit
						5f025cc1b8
					
				| @ -899,7 +899,7 @@ impl LightProtocol { | ||||
| 		// the maximum amount of requests we'll fill in a single packet.
 | ||||
| 		const MAX_REQUESTS: usize = 256; | ||||
| 
 | ||||
| 		use ::request::RequestBuilder; | ||||
| 		use ::request::Builder; | ||||
| 		use ::request::CompleteRequest; | ||||
| 
 | ||||
| 		let peers = self.peers.read(); | ||||
| @ -914,7 +914,7 @@ impl LightProtocol { | ||||
| 		let peer: &mut Peer = &mut *peer; | ||||
| 
 | ||||
| 		let req_id: u64 = raw.val_at(0)?; | ||||
| 		let mut request_builder = RequestBuilder::default(); | ||||
| 		let mut request_builder = Builder::default(); | ||||
| 
 | ||||
| 		trace!(target: "pip", "Received requests (id: {}) from peer {}", req_id, peer_id); | ||||
| 
 | ||||
|  | ||||
| @ -147,7 +147,7 @@ fn compute_timeout(reqs: &Requests) -> Duration { | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
| 	use net::ReqId; | ||||
| 	use request::RequestBuilder; | ||||
| 	use request::Builder; | ||||
| 	use time::{SteadyTime, Duration}; | ||||
| 	use super::{RequestSet, compute_timeout}; | ||||
| 
 | ||||
| @ -156,7 +156,7 @@ mod tests { | ||||
| 		let test_begin = SteadyTime::now(); | ||||
| 		let mut req_set = RequestSet::default(); | ||||
| 
 | ||||
| 		let the_req = RequestBuilder::default().build(); | ||||
| 		let the_req = Builder::default().build(); | ||||
| 		let req_time = compute_timeout(&the_req); | ||||
| 		req_set.insert(ReqId(0), the_req.clone(), 0.into(), test_begin); | ||||
| 		req_set.insert(ReqId(1), the_req, 0.into(), test_begin + Duration::seconds(1)); | ||||
| @ -173,7 +173,7 @@ mod tests { | ||||
| 
 | ||||
| 	#[test] | ||||
| 	fn cumulative_cost() { | ||||
| 		let the_req = RequestBuilder::default().build(); | ||||
| 		let the_req = Builder::default().build(); | ||||
| 		let test_begin = SteadyTime::now(); | ||||
| 		let test_end = test_begin + Duration::seconds(1); | ||||
| 		let mut req_set = RequestSet::default(); | ||||
|  | ||||
| @ -41,7 +41,7 @@ use std::sync::Arc; | ||||
| // helper for encoding a single request into a packet.
 | ||||
| // panics on bad backreference.
 | ||||
| fn encode_single(request: Request) -> NetworkRequests { | ||||
| 	let mut builder = RequestBuilder::default(); | ||||
| 	let mut builder = Builder::default(); | ||||
| 	builder.push(request).unwrap(); | ||||
| 	builder.build() | ||||
| } | ||||
| @ -344,7 +344,7 @@ fn get_block_bodies() { | ||||
| 		proto.handle_packet(&Expect::Nothing, &1, packet::STATUS, &my_status); | ||||
| 	} | ||||
| 
 | ||||
| 	let mut builder = RequestBuilder::default(); | ||||
| 	let mut builder = Builder::default(); | ||||
| 	let mut bodies = Vec::new(); | ||||
| 
 | ||||
| 	for i in 0..10 { | ||||
| @ -400,7 +400,7 @@ fn get_block_receipts() { | ||||
| 		.take(10) | ||||
| 		.collect(); | ||||
| 
 | ||||
| 	let mut builder = RequestBuilder::default(); | ||||
| 	let mut builder = Builder::default(); | ||||
| 	let mut receipts = Vec::new(); | ||||
| 	for hash in block_hashes.iter().cloned() { | ||||
| 		builder.push(Request::Receipts(IncompleteReceiptsRequest { hash: hash.into() })).unwrap(); | ||||
| @ -448,7 +448,7 @@ fn get_state_proofs() { | ||||
| 	let key1: H256 = U256::from(11223344).into(); | ||||
| 	let key2: H256 = U256::from(99988887).into(); | ||||
| 
 | ||||
| 	let mut builder = RequestBuilder::default(); | ||||
| 	let mut builder = Builder::default(); | ||||
| 	builder.push(Request::Account(IncompleteAccountRequest { | ||||
| 		block_hash: H256::default().into(), | ||||
| 		address_hash: key1.into(), | ||||
|  | ||||
| @ -74,8 +74,8 @@ impl Peer { | ||||
| 
 | ||||
| // Attempted request info and sender to put received value.
 | ||||
| struct Pending { | ||||
| 	requests: basic_request::Requests<CheckedRequest>, | ||||
| 	net_requests: basic_request::Requests<NetworkRequest>, | ||||
| 	requests: basic_request::Batch<CheckedRequest>, | ||||
| 	net_requests: basic_request::Batch<NetworkRequest>, | ||||
| 	required_capabilities: Capabilities, | ||||
| 	responses: Vec<Response>, | ||||
| 	sender: oneshot::Sender<Vec<Response>>, | ||||
| @ -151,7 +151,7 @@ impl Pending { | ||||
| 	fn update_net_requests(&mut self) { | ||||
| 		use request::IncompleteRequest; | ||||
| 
 | ||||
| 		let mut builder = basic_request::RequestBuilder::default(); | ||||
| 		let mut builder = basic_request::Builder::default(); | ||||
| 		let num_answered = self.requests.num_answered(); | ||||
| 		let mut mapping = move |idx| idx - num_answered; | ||||
| 
 | ||||
| @ -281,7 +281,7 @@ impl OnDemand { | ||||
| 			return Ok(receiver); | ||||
| 		} | ||||
| 
 | ||||
| 		let mut builder = basic_request::RequestBuilder::default(); | ||||
| 		let mut builder = basic_request::Builder::default(); | ||||
| 
 | ||||
| 		let responses = Vec::with_capacity(requests.len()); | ||||
| 
 | ||||
|  | ||||
| @ -25,23 +25,23 @@ use request::{ | ||||
| }; | ||||
| 
 | ||||
| /// Build chained requests. Push them onto the series with `push`,
 | ||||
| /// and produce a `Requests` object with `build`. Outputs are checked for consistency.
 | ||||
| /// and produce a `Batch` object with `build`. Outputs are checked for consistency.
 | ||||
| #[derive(Debug, Clone, PartialEq, Eq)] | ||||
| pub struct RequestBuilder<T> { | ||||
| pub struct Builder<T> { | ||||
| 	output_kinds: HashMap<(usize, usize), OutputKind>, | ||||
| 	requests: Vec<T>, | ||||
| } | ||||
| 
 | ||||
| impl<T> Default for RequestBuilder<T> { | ||||
| impl<T> Default for Builder<T> { | ||||
| 	fn default() -> Self { | ||||
| 		RequestBuilder { | ||||
| 		Builder { | ||||
| 			output_kinds: HashMap::new(), | ||||
| 			requests: Vec::new(), | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl<T: IncompleteRequest> RequestBuilder<T> { | ||||
| impl<T: IncompleteRequest> Builder<T> { | ||||
| 	/// Attempt to push a request onto the request chain. Fails if the request
 | ||||
| 	/// references a non-existent output of a prior request.
 | ||||
| 	pub fn push(&mut self, request: T) -> Result<(), NoSuchOutput> { | ||||
| @ -62,9 +62,9 @@ impl<T: IncompleteRequest> RequestBuilder<T> { | ||||
| 		&self.output_kinds | ||||
| 	} | ||||
| 
 | ||||
| 	/// Convert this into a "requests" object.
 | ||||
| 	pub fn build(self) -> Requests<T> { | ||||
| 		Requests { | ||||
| 	/// Convert this into a "batch" object.
 | ||||
| 	pub fn build(self) -> Batch<T> { | ||||
| 		Batch { | ||||
| 			outputs: HashMap::new(), | ||||
| 			requests: self.requests, | ||||
| 			answered: 0, | ||||
| @ -74,13 +74,13 @@ impl<T: IncompleteRequest> RequestBuilder<T> { | ||||
| 
 | ||||
| /// Requests pending responses.
 | ||||
| #[derive(Debug, Clone, PartialEq, Eq)] | ||||
| pub struct Requests<T> { | ||||
| pub struct Batch<T> { | ||||
| 	outputs: HashMap<(usize, usize), Output>, | ||||
| 	requests: Vec<T>, | ||||
| 	answered: usize, | ||||
| } | ||||
| 
 | ||||
| impl<T> Requests<T> { | ||||
| impl<T> Batch<T> { | ||||
| 	/// Get access to the underlying slice of requests.
 | ||||
| 	// TODO: unimplemented -> Vec<Request>, // do we _have to_ allocate?
 | ||||
| 	pub fn requests(&self) -> &[T] { &self.requests } | ||||
| @ -94,10 +94,10 @@ impl<T> Requests<T> { | ||||
| 	} | ||||
| 
 | ||||
| 	/// Map requests from one type into another.
 | ||||
| 	pub fn map_requests<F, U>(self, f: F) -> Requests<U> | ||||
| 	pub fn map_requests<F, U>(self, f: F) -> Batch<U> | ||||
| 		where F: FnMut(T) -> U, U: IncompleteRequest | ||||
| 	{ | ||||
| 		Requests { | ||||
| 		Batch { | ||||
| 			outputs: self.outputs, | ||||
| 			requests: self.requests.into_iter().map(f).collect(), | ||||
| 			answered: self.answered, | ||||
| @ -105,7 +105,7 @@ impl<T> Requests<T> { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl<T: IncompleteRequest + Clone> Requests<T> { | ||||
| impl<T: IncompleteRequest + Clone> Batch<T> { | ||||
| 	/// Get the next request as a filled request. Returns `None` when all requests answered.
 | ||||
| 	pub fn next_complete(&self) -> Option<T::Complete> { | ||||
| 		if self.is_complete() { | ||||
| @ -113,7 +113,7 @@ impl<T: IncompleteRequest + Clone> Requests<T> { | ||||
| 		} else { | ||||
| 			Some(self.requests[self.answered].clone() | ||||
| 				.complete() | ||||
| 				.expect("All outputs checked as invariant of `Requests` object; qed")) | ||||
| 				.expect("All outputs checked as invariant of `Batch` object; qed")) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -149,7 +149,7 @@ impl<T: IncompleteRequest + Clone> Requests<T> { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl<T: super::CheckedRequest + Clone> Requests<T> { | ||||
| impl<T: super::CheckedRequest + Clone> Batch<T> { | ||||
| 	/// Supply a response for the next request.
 | ||||
| 	/// Fails on: wrong request kind, all requests answered already.
 | ||||
| 	pub fn supply_response(&mut self, env: &T::Environment, response: &T::Response) | ||||
| @ -170,7 +170,7 @@ impl<T: super::CheckedRequest + Clone> Requests<T> { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl Requests<super::Request> { | ||||
| impl Batch<super::Request> { | ||||
| 	/// For each request, produce a response.
 | ||||
| 	/// The responses vector produced goes up to the point where the responder
 | ||||
| 	/// first returns `None`, an invalid response, or until all requests have been responded to.
 | ||||
| @ -193,7 +193,7 @@ impl Requests<super::Request> { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl<T: IncompleteRequest> Deref for Requests<T> { | ||||
| impl<T: IncompleteRequest> Deref for Batch<T> { | ||||
| 	type Target = [T]; | ||||
| 
 | ||||
| 	fn deref(&self) -> &[T] { | ||||
| @ -201,7 +201,7 @@ impl<T: IncompleteRequest> Deref for Requests<T> { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| impl<T: IncompleteRequest> DerefMut for Requests<T> { | ||||
| impl<T: IncompleteRequest> DerefMut for Batch<T> { | ||||
| 	fn deref_mut(&mut self) -> &mut [T] { | ||||
| 		&mut self.requests[..] | ||||
| 	} | ||||
| @ -210,12 +210,12 @@ impl<T: IncompleteRequest> DerefMut for Requests<T> { | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
| 	use request::*; | ||||
| 	use super::RequestBuilder; | ||||
| 	use super::Builder; | ||||
| 	use bigint::hash::H256; | ||||
| 
 | ||||
| 	#[test] | ||||
| 	fn all_scalar() { | ||||
| 		let mut builder = RequestBuilder::default(); | ||||
| 		let mut builder = Builder::default(); | ||||
| 		builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { | ||||
| 			num: 100.into(), | ||||
| 		})).unwrap(); | ||||
| @ -227,7 +227,7 @@ mod tests { | ||||
| 	#[test] | ||||
| 	#[should_panic] | ||||
| 	fn missing_backref() { | ||||
| 		let mut builder = RequestBuilder::default(); | ||||
| 		let mut builder = Builder::default(); | ||||
| 		builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { | ||||
| 			num: Field::BackReference(100, 3), | ||||
| 		})).unwrap(); | ||||
| @ -236,7 +236,7 @@ mod tests { | ||||
| 	#[test] | ||||
| 	#[should_panic] | ||||
| 	fn wrong_kind() { | ||||
| 		let mut builder = RequestBuilder::default(); | ||||
| 		let mut builder = Builder::default(); | ||||
| 		assert!(builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { | ||||
| 			num: 100.into(), | ||||
| 		})).is_ok()); | ||||
| @ -247,7 +247,7 @@ mod tests { | ||||
| 
 | ||||
| 	#[test] | ||||
| 	fn good_backreference() { | ||||
| 		let mut builder = RequestBuilder::default(); | ||||
| 		let mut builder = Builder::default(); | ||||
| 		builder.push(Request::HeaderProof(IncompleteHeaderProofRequest { | ||||
| 			num: 100.into(), // header proof puts hash at output 0.
 | ||||
| 		})).unwrap(); | ||||
|  | ||||
| @ -73,7 +73,7 @@ pub use self::epoch_signal::{ | ||||
| 	Response as SignalResponse, | ||||
| }; | ||||
| 
 | ||||
| pub use self::builder::{RequestBuilder, Requests}; | ||||
| pub use self::builder::{Builder, Requests}; | ||||
| 
 | ||||
| /// Error indicating a reference to a non-existent or wrongly-typed output.
 | ||||
| #[derive(Debug, Clone, Copy, PartialEq, Eq)] | ||||
| @ -241,7 +241,7 @@ impl Encodable for HashOrNumber { | ||||
| } | ||||
| 
 | ||||
| /// Type alias for "network requests".
 | ||||
| pub type NetworkRequests = Requests<Request>; | ||||
| pub type NetworkRequests = Batch<Request>; | ||||
| 
 | ||||
| /// All request types, as they're sent over the network.
 | ||||
| /// They may be incomplete, with back-references to outputs
 | ||||
|  | ||||
| @ -522,7 +522,7 @@ impl<L: AsLightClient> LightSync<L> { | ||||
| 				rng.shuffle(&mut peer_ids); | ||||
| 
 | ||||
| 				let request = { | ||||
| 					let mut builder = request::RequestBuilder::default(); | ||||
| 					let mut builder = request::Builder::default(); | ||||
| 					builder.push(request::Request::Headers(request::IncompleteHeadersRequest { | ||||
| 						start: req.start.into(), | ||||
| 						skip: req.skip, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user