reintroduce credits recharging
This commit is contained in:
parent
0d110ed47c
commit
4eb69dc0fe
@ -303,10 +303,18 @@ impl LightProtocol {
|
||||
match peer.remote_flow {
|
||||
None => Err(Error::NotServer),
|
||||
Some((ref mut creds, ref params)) => {
|
||||
// apply recharge to credits if there's no pending requests.
|
||||
if peer.pending_requests.is_empty() {
|
||||
params.recharge(creds);
|
||||
}
|
||||
|
||||
// compute and deduct cost.
|
||||
let cost = params.compute_cost_multi(requests.requests());
|
||||
creds.deduct_cost(cost)?;
|
||||
|
||||
trace!(target: "pip", "requesting from peer {}. Cost: {}; Available: {}",
|
||||
peer_id, cost, creds.current());
|
||||
|
||||
let req_id = ReqId(self.req_id.fetch_add(1, Ordering::SeqCst));
|
||||
io.send(*peer_id, packet::REQUEST, {
|
||||
let mut stream = RlpStream::new_list(2);
|
||||
@ -686,6 +694,8 @@ impl LightProtocol {
|
||||
trace!(target: "pip", "Received requests (id: {}) from peer {}", req_id, peer_id);
|
||||
|
||||
// deserialize requests, check costs and request validity.
|
||||
self.flow_params.recharge(&mut peer.local_credits);
|
||||
|
||||
peer.local_credits.deduct_cost(self.flow_params.base_cost())?;
|
||||
for request_rlp in raw.at(1)?.iter().take(MAX_REQUESTS) {
|
||||
let request: Request = request_rlp.as_val()?;
|
||||
@ -712,6 +722,7 @@ impl LightProtocol {
|
||||
});
|
||||
|
||||
trace!(target: "pip", "Responded to {}/{} requests in packet {}", responses.len(), num_requests, req_id);
|
||||
trace!(target: "pip", "Peer {} has {} credits remaining.", peer_id, peer.local_credits.current());
|
||||
|
||||
io.respond(packet::RESPONSE, {
|
||||
let mut stream = RlpStream::new_list(3);
|
||||
|
Loading…
Reference in New Issue
Block a user