Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize time for hermes start/ worker spawn #1000

Merged
merged 8 commits into from
May 31, 2021
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
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
12 changes: 9 additions & 3 deletions relayer/src/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ use ibc::query::QueryTxRequest;
use ibc::signer::Signer;
use ibc::Height as ICSHeight;
use ibc_proto::ibc::core::channel::v1::{
PacketState, QueryChannelsRequest, QueryConnectionChannelsRequest,
QueryNextSequenceReceiveRequest, QueryPacketAcknowledgementsRequest,
QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest, QueryUnreceivedPacketsRequest,
PacketState, QueryChannelClientStateRequest, QueryChannelsRequest,
QueryConnectionChannelsRequest, QueryNextSequenceReceiveRequest,
QueryPacketAcknowledgementsRequest, QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest,
QueryUnreceivedPacketsRequest,
};
use ibc_proto::ibc::core::client::v1::{QueryClientStatesRequest, QueryConsensusStatesRequest};
use ibc_proto::ibc::core::commitment::v1::MerkleProof;
Expand Down Expand Up @@ -204,6 +205,11 @@ pub trait Chain: Sized {
}
}

fn query_channel_client_state(
&self,
request: QueryChannelClientStateRequest,
) -> Result<Option<IdentifiedAnyClientState>, Error>;

fn query_packet_commitments(
&self,
request: QueryPacketCommitmentsRequest,
Expand Down
35 changes: 32 additions & 3 deletions relayer/src/chain/cosmos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,10 @@ use ibc_proto::cosmos::upgrade::v1beta1::{
QueryCurrentPlanRequest, QueryUpgradedConsensusStateRequest,
};
use ibc_proto::ibc::core::channel::v1::{
PacketState, QueryChannelsRequest, QueryConnectionChannelsRequest,
QueryNextSequenceReceiveRequest, QueryPacketAcknowledgementsRequest,
QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest, QueryUnreceivedPacketsRequest,
PacketState, QueryChannelClientStateRequest, QueryChannelsRequest,
QueryConnectionChannelsRequest, QueryNextSequenceReceiveRequest,
QueryPacketAcknowledgementsRequest, QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest,
QueryUnreceivedPacketsRequest,
};
use ibc_proto::ibc::core::client::v1::{QueryClientStatesRequest, QueryConsensusStatesRequest};
use ibc_proto::ibc::core::commitment::v1::MerkleProof;
Expand Down Expand Up @@ -827,6 +828,34 @@ impl Chain for CosmosSdkChain {
Ok(channel_end)
}

fn query_channel_client_state(
&self,
request: QueryChannelClientStateRequest,
) -> Result<Option<IdentifiedAnyClientState>, Error> {
crate::time!("query_channel_client_state");

let mut client = self
.block_on(
ibc_proto::ibc::core::channel::v1::query_client::QueryClient::connect(
self.grpc_addr.clone(),
),
)
.map_err(|e| Kind::Grpc.context(e))?;

let request = tonic::Request::new(request);

let response = self
.block_on(client.channel_client_state(request))
.map_err(|e| Kind::Grpc.context(e))?
.into_inner();

let client_state: Option<IdentifiedAnyClientState> = response
.identified_client_state
.map_or_else(|| None, |proto_cs| proto_cs.try_into().ok());

Ok(client_state)
}

/// Queries the packet commitment hashes associated with a channel.
fn query_packet_commitments(
&self,
Expand Down
51 changes: 42 additions & 9 deletions relayer/src/chain/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use dyn_clone::DynClone;
use serde::{Serialize, Serializer};

use ibc::ics02_client::client_consensus::{AnyConsensusState, AnyConsensusStateWithHeight};
use ibc::ics02_client::client_state::AnyClientState;
use ibc::ics02_client::client_state::{AnyClientState, IdentifiedAnyClientState};
use ibc::ics02_client::events::UpdateClient;
use ibc::ics02_client::misbehaviour::AnyMisbehaviour;
use ibc::ics04_channel::channel::IdentifiedChannelEnd;
Expand All @@ -26,12 +26,15 @@ use ibc::{
Height,
};
use ibc_proto::ibc::core::channel::v1::{
PacketState, QueryChannelsRequest, QueryConnectionChannelsRequest,
QueryNextSequenceReceiveRequest, QueryPacketAcknowledgementsRequest,
QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest, QueryUnreceivedPacketsRequest,
PacketState, QueryChannelClientStateRequest, QueryChannelsRequest,
QueryConnectionChannelsRequest, QueryNextSequenceReceiveRequest,
QueryPacketAcknowledgementsRequest, QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest,
QueryUnreceivedPacketsRequest,
};
use ibc_proto::ibc::core::client::v1::QueryConsensusStatesRequest;
use ibc_proto::ibc::core::client::v1::{QueryClientStatesRequest, QueryConsensusStatesRequest};
use ibc_proto::ibc::core::commitment::v1::MerkleProof;
use ibc_proto::ibc::core::connection::v1::QueryClientConnectionsRequest;

pub use prod::ProdChainHandle;

use crate::{
Expand Down Expand Up @@ -103,6 +106,11 @@ pub enum ChainRequest {
reply_to: ReplyTo<Height>,
},

QueryClients {
request: QueryClientStatesRequest,
reply_to: ReplyTo<Vec<IdentifiedAnyClientState>>,
},

BuildHeader {
trusted_height: Height,
target_height: Height,
Expand Down Expand Up @@ -142,6 +150,11 @@ pub enum ChainRequest {
reply_to: ReplyTo<AnyClientState>,
},

QueryClientConnections {
request: QueryClientConnectionsRequest,
reply_to: ReplyTo<Vec<ConnectionId>>,
},

QueryConsensusStates {
request: QueryConsensusStatesRequest,
reply_to: ReplyTo<Vec<AnyConsensusStateWithHeight>>,
Expand Down Expand Up @@ -178,13 +191,13 @@ pub enum ChainRequest {
reply_to: ReplyTo<ConnectionEnd>,
},

QueryChannels {
request: QueryChannelsRequest,
QueryConnectionChannels {
request: QueryConnectionChannelsRequest,
reply_to: ReplyTo<Vec<IdentifiedChannelEnd>>,
},

QueryConnectionChannels {
request: QueryConnectionChannelsRequest,
QueryChannels {
request: QueryChannelsRequest,
reply_to: ReplyTo<Vec<IdentifiedChannelEnd>>,
},

Expand All @@ -195,6 +208,11 @@ pub enum ChainRequest {
reply_to: ReplyTo<ChannelEnd>,
},

QueryChannelClientState {
request: QueryChannelClientStateRequest,
reply_to: ReplyTo<Option<IdentifiedAnyClientState>>,
},

QueryNextSequenceReceive {
request: QueryNextSequenceReceiveRequest,
reply_to: ReplyTo<Sequence>,
Expand Down Expand Up @@ -280,12 +298,22 @@ pub trait ChainHandle: DynClone + Send + Sync + Debug {

fn query_latest_height(&self) -> Result<Height, Error>;

fn query_clients(
&self,
request: QueryClientStatesRequest,
) -> Result<Vec<IdentifiedAnyClientState>, Error>;

fn query_client_state(
&self,
client_id: &ClientId,
height: Height,
) -> Result<AnyClientState, Error>;

fn query_client_connections(
&self,
request: QueryClientConnectionsRequest,
) -> Result<Vec<ConnectionId>, Error>;

fn query_consensus_states(
&self,
request: QueryConsensusStatesRequest,
Expand Down Expand Up @@ -340,6 +368,11 @@ pub trait ChainHandle: DynClone + Send + Sync + Debug {
height: Height,
) -> Result<ChannelEnd, Error>;

fn query_channel_client_state(
&self,
request: QueryChannelClientStateRequest,
) -> Result<Option<IdentifiedAnyClientState>, Error>;

fn proven_client_state(
&self,
client_id: &ClientId,
Expand Down
47 changes: 35 additions & 12 deletions relayer/src/chain/handle/prod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::fmt::Debug;
use crossbeam_channel as channel;

use ibc::ics02_client::client_consensus::{AnyConsensusState, AnyConsensusStateWithHeight};
use ibc::ics02_client::client_state::AnyClientState;
use ibc::ics02_client::client_state::{AnyClientState, IdentifiedAnyClientState};
use ibc::ics02_client::events::UpdateClient;
use ibc::ics02_client::misbehaviour::AnyMisbehaviour;
use ibc::ics04_channel::channel::IdentifiedChannelEnd;
Expand All @@ -24,12 +24,14 @@ use ibc::{
Height,
};
use ibc_proto::ibc::core::channel::v1::{
PacketState, QueryChannelsRequest, QueryConnectionChannelsRequest,
QueryNextSequenceReceiveRequest, QueryPacketAcknowledgementsRequest,
QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest, QueryUnreceivedPacketsRequest,
PacketState, QueryChannelClientStateRequest, QueryChannelsRequest,
QueryConnectionChannelsRequest, QueryNextSequenceReceiveRequest,
QueryPacketAcknowledgementsRequest, QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest,
QueryUnreceivedPacketsRequest,
};
use ibc_proto::ibc::core::client::v1::QueryConsensusStatesRequest;
use ibc_proto::ibc::core::client::v1::{QueryClientStatesRequest, QueryConsensusStatesRequest};
use ibc_proto::ibc::core::commitment::v1::MerkleProof;
use ibc_proto::ibc::core::connection::v1::QueryClientConnectionsRequest;

use crate::{
connection::ConnectionMsgType,
Expand Down Expand Up @@ -107,6 +109,13 @@ impl ChainHandle for ProdChainHandle {
self.send(|reply_to| ChainRequest::QueryLatestHeight { reply_to })
}

fn query_clients(
&self,
request: QueryClientStatesRequest,
) -> Result<Vec<IdentifiedAnyClientState>, Error> {
self.send(|reply_to| ChainRequest::QueryClients { request, reply_to })
}

fn query_client_state(
&self,
client_id: &ClientId,
Expand All @@ -119,6 +128,13 @@ impl ChainHandle for ProdChainHandle {
})
}

fn query_client_connections(
&self,
request: QueryClientConnectionsRequest,
) -> Result<Vec<ConnectionId>, Error> {
self.send(|reply_to| ChainRequest::QueryClientConnections { request, reply_to })
}

fn query_consensus_states(
&self,
request: QueryConsensusStatesRequest,
Expand Down Expand Up @@ -174,6 +190,13 @@ impl ChainHandle for ProdChainHandle {
})
}

fn query_connection_channels(
&self,
request: QueryConnectionChannelsRequest,
) -> Result<Vec<IdentifiedChannelEnd>, Error> {
self.send(|reply_to| ChainRequest::QueryConnectionChannels { request, reply_to })
}

fn query_next_sequence_receive(
&self,
request: QueryNextSequenceReceiveRequest,
Expand All @@ -188,13 +211,6 @@ impl ChainHandle for ProdChainHandle {
self.send(|reply_to| ChainRequest::QueryChannels { request, reply_to })
}

fn query_connection_channels(
&self,
request: QueryConnectionChannelsRequest,
) -> Result<Vec<IdentifiedChannelEnd>, Error> {
self.send(|reply_to| ChainRequest::QueryConnectionChannels { request, reply_to })
}

fn query_channel(
&self,
port_id: &PortId,
Expand All @@ -209,6 +225,13 @@ impl ChainHandle for ProdChainHandle {
})
}

fn query_channel_client_state(
&self,
request: QueryChannelClientStateRequest,
) -> Result<Option<IdentifiedAnyClientState>, Error> {
self.send(|reply_to| ChainRequest::QueryChannelClientState { request, reply_to })
}

fn proven_client_state(
&self,
client_id: &ClientId,
Expand Down
14 changes: 11 additions & 3 deletions relayer/src/chain/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ use ibc::signer::Signer;
use ibc::test_utils::get_dummy_account_id;
use ibc::Height;
use ibc_proto::ibc::core::channel::v1::{
PacketState, QueryChannelsRequest, QueryConnectionChannelsRequest,
QueryNextSequenceReceiveRequest, QueryPacketAcknowledgementsRequest,
QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest, QueryUnreceivedPacketsRequest,
PacketState, QueryChannelClientStateRequest, QueryChannelsRequest,
QueryConnectionChannelsRequest, QueryNextSequenceReceiveRequest,
QueryPacketAcknowledgementsRequest, QueryPacketCommitmentsRequest, QueryUnreceivedAcksRequest,
QueryUnreceivedPacketsRequest,
};
use ibc_proto::ibc::core::client::v1::{QueryClientStatesRequest, QueryConsensusStatesRequest};
use ibc_proto::ibc::core::commitment::v1::MerkleProof;
Expand Down Expand Up @@ -197,6 +198,13 @@ impl Chain for MockChain {
unimplemented!()
}

fn query_channel_client_state(
&self,
_request: QueryChannelClientStateRequest,
) -> Result<Option<IdentifiedAnyClientState>, Error> {
unimplemented!()
}

fn query_packet_commitments(
&self,
_request: QueryPacketCommitmentsRequest,
Expand Down
Loading