mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 19:51:05 +00:00
Use cached session index to obtain executor params (#1190)
* Import changes from archieved repo * Revert erroneous changes * Fix more tests * Resolve discussions * Fix MORE tests * approval-voting: launch_approval better interface (#1355) --------- Co-authored-by: Javier Viola <javier@parity.io> Co-authored-by: ordian <noreply@reusable.software> Co-authored-by: ordian <write@reusable.software>
This commit is contained in:
@@ -598,7 +598,9 @@ pub(crate) mod tests {
|
||||
use polkadot_node_subsystem::messages::{AllMessages, ApprovalVotingMessage};
|
||||
use polkadot_node_subsystem_test_helpers::make_subsystem_context;
|
||||
use polkadot_node_subsystem_util::database::Database;
|
||||
use polkadot_primitives::{Id as ParaId, IndexedVec, SessionInfo, ValidatorId, ValidatorIndex};
|
||||
use polkadot_primitives::{
|
||||
ExecutorParams, Id as ParaId, IndexedVec, SessionInfo, ValidatorId, ValidatorIndex,
|
||||
};
|
||||
pub(crate) use sp_consensus_babe::{
|
||||
digests::{CompatibleDigestItem, PreDigest, SecondaryVRFPreDigest},
|
||||
AllowedSlots, BabeEpochConfiguration, Epoch as BabeEpoch,
|
||||
@@ -835,6 +837,20 @@ pub(crate) mod tests {
|
||||
si_tx.send(Ok(Some(session_info.clone()))).unwrap();
|
||||
}
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
handle.recv().await,
|
||||
AllMessages::RuntimeApi(
|
||||
RuntimeApiMessage::Request(
|
||||
req_block_hash,
|
||||
RuntimeApiRequest::SessionExecutorParams(idx, si_tx),
|
||||
)
|
||||
) => {
|
||||
assert_eq!(session, idx);
|
||||
assert_eq!(req_block_hash, hash);
|
||||
si_tx.send(Ok(Some(ExecutorParams::default()))).unwrap();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
futures::executor::block_on(futures::future::join(test_fut, aux_fut));
|
||||
@@ -952,6 +968,20 @@ pub(crate) mod tests {
|
||||
si_tx.send(Ok(Some(session_info.clone()))).unwrap();
|
||||
}
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
handle.recv().await,
|
||||
AllMessages::RuntimeApi(
|
||||
RuntimeApiMessage::Request(
|
||||
req_block_hash,
|
||||
RuntimeApiRequest::SessionExecutorParams(idx, si_tx),
|
||||
)
|
||||
) => {
|
||||
assert_eq!(session, idx);
|
||||
assert_eq!(req_block_hash, hash);
|
||||
si_tx.send(Ok(Some(ExecutorParams::default()))).unwrap();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
futures::executor::block_on(futures::future::join(test_fut, aux_fut));
|
||||
@@ -1172,6 +1202,20 @@ pub(crate) mod tests {
|
||||
si_tx.send(Ok(Some(session_info.clone()))).unwrap();
|
||||
}
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
handle.recv().await,
|
||||
AllMessages::RuntimeApi(
|
||||
RuntimeApiMessage::Request(
|
||||
req_block_hash,
|
||||
RuntimeApiRequest::SessionExecutorParams(idx, si_tx),
|
||||
)
|
||||
) => {
|
||||
assert_eq!(session, idx);
|
||||
assert_eq!(req_block_hash, hash);
|
||||
si_tx.send(Ok(Some(ExecutorParams::default()))).unwrap();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
futures::executor::block_on(futures::future::join(test_fut, aux_fut));
|
||||
@@ -1374,6 +1418,20 @@ pub(crate) mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
handle.recv().await,
|
||||
AllMessages::RuntimeApi(
|
||||
RuntimeApiMessage::Request(
|
||||
req_block_hash,
|
||||
RuntimeApiRequest::SessionExecutorParams(idx, si_tx),
|
||||
)
|
||||
) => {
|
||||
assert_eq!(session, idx);
|
||||
assert_eq!(req_block_hash, hash);
|
||||
si_tx.send(Ok(Some(ExecutorParams::default()))).unwrap();
|
||||
}
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
handle.recv().await,
|
||||
AllMessages::ApprovalDistribution(ApprovalDistributionMessage::NewBlocks(
|
||||
|
||||
@@ -45,13 +45,13 @@ use polkadot_node_subsystem_util::{
|
||||
self,
|
||||
database::Database,
|
||||
metrics::{self, prometheus},
|
||||
runtime::{Config as RuntimeInfoConfig, RuntimeInfo},
|
||||
runtime::{Config as RuntimeInfoConfig, ExtendedSessionInfo, RuntimeInfo},
|
||||
TimeoutExt,
|
||||
};
|
||||
use polkadot_primitives::{
|
||||
ApprovalVote, BlockNumber, CandidateHash, CandidateIndex, CandidateReceipt, DisputeStatement,
|
||||
GroupIndex, Hash, PvfExecTimeoutKind, SessionIndex, SessionInfo, ValidDisputeStatementKind,
|
||||
ValidatorId, ValidatorIndex, ValidatorPair, ValidatorSignature,
|
||||
ExecutorParams, GroupIndex, Hash, PvfExecTimeoutKind, SessionIndex, SessionInfo,
|
||||
ValidDisputeStatementKind, ValidatorId, ValidatorIndex, ValidatorPair, ValidatorSignature,
|
||||
};
|
||||
use sc_keystore::LocalKeystore;
|
||||
use sp_application_crypto::Pair;
|
||||
@@ -643,6 +643,32 @@ impl CurrentlyCheckingSet {
|
||||
}
|
||||
}
|
||||
|
||||
async fn get_extended_session_info<'a, Sender>(
|
||||
runtime_info: &'a mut RuntimeInfo,
|
||||
sender: &mut Sender,
|
||||
relay_parent: Hash,
|
||||
session_index: SessionIndex,
|
||||
) -> Option<&'a ExtendedSessionInfo>
|
||||
where
|
||||
Sender: SubsystemSender<RuntimeApiMessage>,
|
||||
{
|
||||
match runtime_info
|
||||
.get_session_info_by_index(sender, relay_parent, session_index)
|
||||
.await
|
||||
{
|
||||
Ok(extended_info) => Some(&extended_info),
|
||||
Err(_) => {
|
||||
gum::debug!(
|
||||
target: LOG_TARGET,
|
||||
session = session_index,
|
||||
?relay_parent,
|
||||
"Can't obtain SessionInfo or ExecutorParams"
|
||||
);
|
||||
None
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
async fn get_session_info<'a, Sender>(
|
||||
runtime_info: &'a mut RuntimeInfo,
|
||||
sender: &mut Sender,
|
||||
@@ -652,21 +678,9 @@ async fn get_session_info<'a, Sender>(
|
||||
where
|
||||
Sender: SubsystemSender<RuntimeApiMessage>,
|
||||
{
|
||||
match runtime_info
|
||||
.get_session_info_by_index(sender, relay_parent, session_index)
|
||||
get_extended_session_info(runtime_info, sender, relay_parent, session_index)
|
||||
.await
|
||||
{
|
||||
Ok(extended_info) => Some(&extended_info.session_info),
|
||||
Err(_) => {
|
||||
gum::debug!(
|
||||
target: LOG_TARGET,
|
||||
session = session_index,
|
||||
?relay_parent,
|
||||
"Can't obtain SessionInfo"
|
||||
);
|
||||
None
|
||||
},
|
||||
}
|
||||
.map(|extended_info| &extended_info.session_info)
|
||||
}
|
||||
|
||||
struct State {
|
||||
@@ -746,6 +760,7 @@ enum Action {
|
||||
relay_block_hash: Hash,
|
||||
candidate_index: CandidateIndex,
|
||||
session: SessionIndex,
|
||||
executor_params: ExecutorParams,
|
||||
candidate: CandidateReceipt,
|
||||
backing_group: GroupIndex,
|
||||
},
|
||||
@@ -968,6 +983,7 @@ async fn handle_actions<Context>(
|
||||
relay_block_hash,
|
||||
candidate_index,
|
||||
session,
|
||||
executor_params,
|
||||
candidate,
|
||||
backing_group,
|
||||
} => {
|
||||
@@ -1008,6 +1024,7 @@ async fn handle_actions<Context>(
|
||||
},
|
||||
None => {
|
||||
let ctx = &mut *ctx;
|
||||
|
||||
currently_checking_set
|
||||
.insert_relay_block_hash(
|
||||
candidate_hash,
|
||||
@@ -1022,6 +1039,7 @@ async fn handle_actions<Context>(
|
||||
validator_index,
|
||||
block_hash,
|
||||
backing_group,
|
||||
executor_params,
|
||||
&launch_approval_span,
|
||||
)
|
||||
.await
|
||||
@@ -2328,17 +2346,18 @@ async fn process_wakeup<Context>(
|
||||
_ => return Ok(Vec::new()),
|
||||
};
|
||||
|
||||
let session_info = match get_session_info(
|
||||
session_info_provider,
|
||||
ctx.sender(),
|
||||
block_entry.parent_hash(),
|
||||
block_entry.session(),
|
||||
)
|
||||
.await
|
||||
{
|
||||
Some(i) => i,
|
||||
None => return Ok(Vec::new()),
|
||||
};
|
||||
let ExtendedSessionInfo { ref session_info, ref executor_params, .. } =
|
||||
match get_extended_session_info(
|
||||
session_info_provider,
|
||||
ctx.sender(),
|
||||
block_entry.parent_hash(),
|
||||
block_entry.session(),
|
||||
)
|
||||
.await
|
||||
{
|
||||
Some(i) => i,
|
||||
None => return Ok(Vec::new()),
|
||||
};
|
||||
|
||||
let block_tick = slot_number_to_tick(state.slot_duration_millis, block_entry.slot());
|
||||
let no_show_duration = slot_number_to_tick(
|
||||
@@ -2425,6 +2444,7 @@ async fn process_wakeup<Context>(
|
||||
relay_block_hash: relay_block,
|
||||
candidate_index: i as _,
|
||||
session: block_entry.session(),
|
||||
executor_params: executor_params.clone(),
|
||||
candidate: candidate_receipt,
|
||||
backing_group,
|
||||
});
|
||||
@@ -2466,6 +2486,7 @@ async fn launch_approval<Context>(
|
||||
validator_index: ValidatorIndex,
|
||||
block_hash: Hash,
|
||||
backing_group: GroupIndex,
|
||||
executor_params: ExecutorParams,
|
||||
span: &jaeger::Span,
|
||||
) -> SubsystemResult<RemoteHandle<ApprovalState>> {
|
||||
let (a_tx, a_rx) = oneshot::channel();
|
||||
@@ -2611,6 +2632,7 @@ async fn launch_approval<Context>(
|
||||
validation_code,
|
||||
candidate.clone(),
|
||||
available_data.pov,
|
||||
executor_params,
|
||||
PvfExecTimeoutKind::Approval,
|
||||
val_tx,
|
||||
))
|
||||
|
||||
@@ -910,6 +910,19 @@ async fn import_block(
|
||||
si_tx.send(Ok(Some(session_info.clone()))).unwrap();
|
||||
}
|
||||
);
|
||||
assert_matches!(
|
||||
overseer_recv(overseer).await,
|
||||
AllMessages::RuntimeApi(
|
||||
RuntimeApiMessage::Request(
|
||||
req_block_hash,
|
||||
RuntimeApiRequest::SessionExecutorParams(_, si_tx),
|
||||
)
|
||||
) => {
|
||||
// Make sure all SessionExecutorParams calls are not made for the leaf (but for its relay parent)
|
||||
assert_ne!(req_block_hash, hashes[(number-1) as usize].0);
|
||||
si_tx.send(Ok(Some(ExecutorParams::default()))).unwrap();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
@@ -2376,7 +2389,7 @@ async fn handle_double_assignment_import(
|
||||
|
||||
assert_matches!(
|
||||
overseer_recv(virtual_overseer).await,
|
||||
AllMessages::CandidateValidation(CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, timeout, tx)) if timeout == PvfExecTimeoutKind::Approval => {
|
||||
AllMessages::CandidateValidation(CandidateValidationMessage::ValidateFromExhaustive(_, _, _, _, _, timeout, tx)) if timeout == PvfExecTimeoutKind::Approval => {
|
||||
tx.send(Ok(ValidationResult::Valid(Default::default(), Default::default())))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user