Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Changes from 1 commit
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
69ef3fa
client/network: Add scaffolding for finality req to use req resp
mxinden Oct 26, 2020
e8df535
client/network/src/finality_requests: Remove
mxinden Oct 26, 2020
3207c53
client/network/src/behaviour: Pass request id down to sync
mxinden Oct 29, 2020
e3ef56e
client/network: Use request response for block requests
mxinden Oct 29, 2020
544ebfe
client/network: Move handler logic into *_*_handler.rs
mxinden Oct 30, 2020
8abd813
client/network: Track ongoing finality requests in protocol.rs
mxinden Nov 2, 2020
8da90c5
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 2, 2020
45de155
client/network: Remove commented out finalization initialization
mxinden Nov 2, 2020
456568f
client/network: Add docs for request handlers
mxinden Nov 2, 2020
1a6b00e
client/network/finality_request_handler: Log errors
mxinden Nov 2, 2020
06dbd98
client/network/block_request_handler: Log errors
mxinden Nov 2, 2020
25e298f
client/network: Format
mxinden Nov 3, 2020
2ed6dd1
client/network: Handle block request failure
mxinden Nov 3, 2020
aacb507
protocols/network: Fix tests
mxinden Nov 3, 2020
1a72e0c
client/network/src/behaviour: Handle request sending errors
mxinden Nov 3, 2020
1385f5c
client/network: Move response handling into custom method
mxinden Nov 3, 2020
8fdf1bd
client/network/protocol: Handle block response errors
mxinden Nov 3, 2020
7460a21
client/network/protocol: Remove tracking of obsolete requests
mxinden Nov 4, 2020
f1e7691
client/network/protocol: Remove block request start time tracking
mxinden Nov 4, 2020
401a7f8
client/network/protocol: Refactor on_*_request_started
mxinden Nov 4, 2020
b375b84
client/network: Pass protocol config instead of protocol name
mxinden Nov 4, 2020
107aa83
client/network: Pass protocol config in tests
mxinden Nov 4, 2020
0535723
client/network/config: Document request response configs
mxinden Nov 6, 2020
7a3d71e
client/network/src/_request_handler: Document protocol config gen
mxinden Nov 6, 2020
64d2222
client/network/src/protocol: Document Peer request values
mxinden Nov 6, 2020
9560e32
client/network: Rework request response to always use oneshot
mxinden Nov 6, 2020
8b7b32d
client/network: Unified metric reporting for all request protocols
mxinden Nov 6, 2020
109fa3f
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 6, 2020
d6a6a52
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 11, 2020
1cd8a71
client/network: Move protobuf parsing into protocol.rs
mxinden Nov 11, 2020
d5ea27e
client/network/src/protocol: Return pending events after poll
mxinden Nov 11, 2020
9bfa9ca
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 16, 2020
006fd6e
client/network: Improve error handling and documentation
mxinden Nov 16, 2020
1bca347
client/network/behaviour: Remove outdated error types
mxinden Nov 18, 2020
2797595
Update client/network/src/block_request_handler.rs
wheresaddie Nov 23, 2020
aaa981c
Update client/network/src/finality_request_handler.rs
wheresaddie Nov 23, 2020
d1361f2
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 24, 2020
c19885e
client/network/protocol: Reduce reputation on timeout
mxinden Nov 25, 2020
81cadfc
client/network/protocol: Refine reputation changes
mxinden Nov 25, 2020
9236113
client/network/block_request_handler: Set and explain queue length
mxinden Nov 25, 2020
4c018f1
client/service: Deny block requests when light client
mxinden Nov 25, 2020
07c0d2f
client/service: Fix role matching
mxinden Nov 25, 2020
8c8bcb2
client: Enforce line width
mxinden Nov 25, 2020
9481e6d
client/network/request_responses: Fix unit tests
mxinden Nov 25, 2020
707c1bd
client/network: Expose time to build response via metrics
mxinden Nov 27, 2020
e05c1ad
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 27, 2020
df5907f
client/network/request_responses: Fix early connection closed error
mxinden Nov 30, 2020
4096019
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 30, 2020
24e14c8
Merge branch 'paritytech/master' into use-request-response
mxinden Nov 30, 2020
94a1a79
client/network/protocol: Fix line length
mxinden Dec 1, 2020
db776ca
Merge branch 'paritytech/master' into use-request-response
mxinden Dec 1, 2020
8e846e0
client/network/protocol: Disconnect on most request failures
mxinden Dec 1, 2020
4c45b4b
Merge branch 'paritytech/master' into use-request-response
mxinden Dec 2, 2020
5277841
Merge branch 'paritytech/master' into use-request-response
mxinden Dec 10, 2020
bccc53e
Merge branch 'paritytech/master' into use-request-response
mxinden Dec 16, 2020
e0ae207
Merge branch 'paritytech/master' into use-request-response
mxinden Dec 18, 2020
d2c5161
client/network/protocol: Disconnect peer when oneshot is canceled
mxinden Jan 4, 2021
cc1bff0
Merge branch 'paritytech/master' into use-request-response
mxinden Jan 4, 2021
9acc7ee
Merge branch 'paritytech/master' into use-request-response
mxinden Jan 4, 2021
34d0351
client/network/protocol: Disconnect peer even when connection closed
mxinden Jan 4, 2021
2cb76ef
client/network/protocol: Remove debugging log line
mxinden Jan 5, 2021
d525b96
client/network/request_response: Use Clone::clone for error
mxinden Jan 5, 2021
1da9269
client/network/request_response: Remove outdated comment
mxinden Jan 5, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
client/network: Move response handling into custom method
  • Loading branch information
mxinden committed Nov 3, 2020
commit 1385f5c45b437a266636a54d6ed53a6329b2d06e
82 changes: 64 additions & 18 deletions client/network/src/behaviour.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ pub struct Behaviour<B: BlockT, H: ExHashT> {
#[behaviour(ignore)]
role: Role,

// TODO: Does this really belong here? Why require matching on these in the first place? Why not
// offer a oneshot when sending a request?
// TODO: Does this really belong here? Why require matching on these when reponses come in? Why
// not offer a oneshot when sending a request?
#[behaviour(ignore)]
block_request_protocol_name: String,
#[behaviour(ignore)]
Expand Down Expand Up @@ -285,6 +285,48 @@ impl<B: BlockT, H: ExHashT> Behaviour<B, H> {
pub fn light_client_request(&mut self, r: light_client_handler::Request<B>) -> Result<(), light_client_handler::Error> {
self.light_client_handler.request(r)
}

fn on_block_response(
&mut self,
peer: &PeerId,
// TODO: shorten
request_id: libp2p::request_response::RequestId,
result: Result<Vec<u8>, request_responses::RequestFailure>,
) -> Result<CustomMessageOutcome<B>, OnBlockResponseError>{
let protobuf_response = schema::v1::BlockResponse::decode(&result?[..])?;
let ev = self.substrate.on_block_response(peer.clone(), request_id, protobuf_response);
Ok(ev)
}

fn on_finality_response(
&mut self,
peer: &PeerId,
// TODO: shorten
request_id: libp2p::request_response::RequestId,
result: Result<Vec<u8>, request_responses::RequestFailure>,
) -> Result<CustomMessageOutcome<B>, OnFinalityResponseError>{
let protobuf_response = schema::v1::finality::FinalityProofResponse::decode(
&result?[..],
)?;
let ev = self.substrate.on_finality_proof_response(
peer.clone(),
request_id,
protobuf_response.proof,
);
Ok(ev)
}
}

#[derive(derive_more::Display, derive_more::From)]
enum OnBlockResponseError {
Request(request_responses::RequestFailure),
Decode(prost::DecodeError),
}

#[derive(derive_more::Display, derive_more::From)]
enum OnFinalityResponseError {
Request(request_responses::RequestFailure),
Decode(prost::DecodeError),
}

fn reported_roles_to_observed_role(local_role: &Role, remote: &PeerId, roles: Roles) -> ObservedRole {
Expand Down Expand Up @@ -441,27 +483,31 @@ impl<B: BlockT, H: ExHashT> NetworkBehaviourEventProcess<request_responses::Even
// `RequestFinished` event without a result. Then the NetworkWorker can capture this
// in a metric.
if protocol == self.finality_request_protocol_name {
let proof_response = crate::schema::v1::finality::FinalityProofResponse::decode(&result.unwrap()[..])
.unwrap();
let ev = self.substrate.on_finality_proof_response(peer, request_id, proof_response.proof);
self.inject_event(ev);
match self.on_finality_response(&peer, request_id, result) {
Ok(ev) => self.inject_event(ev),
Err(err) => {
debug!(
target: "sync",
"Handling finality response from {} failed with: {}",
peer, err,
);

// TODO: Should protocol.rs be notified of the failure?
}
}
} else if protocol == self.block_request_protocol_name {
let resp = match result {
Ok(resp) => resp,
Err(e) => {
match self.on_block_response(&peer, request_id, result) {
Ok(ev) => self.inject_event(ev),
Err(err) => {
debug!(
target: "sub-libp2p",
"Block request to {:?} failed with: {:?}",
peer, e,
target: "sync",
"Handling block response from {} failed with: {}",
peer, err,
);

self.substrate.on_block_request_failed(&peer);
return
}
};
let protobuf_response = crate::schema::v1::BlockResponse::decode(&resp[..]).unwrap();

let ev = self.substrate.on_block_response(peer, request_id, protobuf_response);
self.inject_event(ev);
}
} else {
self.events.push_back(BehaviourOut::RequestFinished {
request_id,
Expand Down