mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-07 16:38:01 +00:00
Runtime API: introduce candidates_pending_availability (#4027)
Fixes https://github.com/paritytech/polkadot-sdk/issues/3576 Required by elastic scaling collators. Deprecates old API: `candidate_pending_availability`. TODO: - [x] PRDoc --------- Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
This commit is contained in:
@@ -48,6 +48,7 @@ pub(crate) struct RequestResultCache {
|
||||
validation_code: LruMap<(Hash, ParaId, OccupiedCoreAssumption), Option<ValidationCode>>,
|
||||
validation_code_by_hash: LruMap<ValidationCodeHash, Option<ValidationCode>>,
|
||||
candidate_pending_availability: LruMap<(Hash, ParaId), Option<CommittedCandidateReceipt>>,
|
||||
candidates_pending_availability: LruMap<(Hash, ParaId), Vec<CommittedCandidateReceipt>>,
|
||||
candidate_events: LruMap<Hash, Vec<CandidateEvent>>,
|
||||
session_executor_params: LruMap<SessionIndex, Option<ExecutorParams>>,
|
||||
session_info: LruMap<SessionIndex, SessionInfo>,
|
||||
@@ -86,6 +87,7 @@ impl Default for RequestResultCache {
|
||||
validation_code: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
validation_code_by_hash: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
candidate_pending_availability: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
candidates_pending_availability: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
candidate_events: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
session_executor_params: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
session_info: LruMap::new(ByLength::new(DEFAULT_CACHE_CAP)),
|
||||
@@ -261,6 +263,21 @@ impl RequestResultCache {
|
||||
self.candidate_pending_availability.insert(key, value);
|
||||
}
|
||||
|
||||
pub(crate) fn candidates_pending_availability(
|
||||
&mut self,
|
||||
key: (Hash, ParaId),
|
||||
) -> Option<&Vec<CommittedCandidateReceipt>> {
|
||||
self.candidates_pending_availability.get(&key).map(|v| &*v)
|
||||
}
|
||||
|
||||
pub(crate) fn cache_candidates_pending_availability(
|
||||
&mut self,
|
||||
key: (Hash, ParaId),
|
||||
value: Vec<CommittedCandidateReceipt>,
|
||||
) {
|
||||
self.candidates_pending_availability.insert(key, value);
|
||||
}
|
||||
|
||||
pub(crate) fn candidate_events(&mut self, relay_parent: &Hash) -> Option<&Vec<CandidateEvent>> {
|
||||
self.candidate_events.get(relay_parent).map(|v| &*v)
|
||||
}
|
||||
@@ -591,4 +608,5 @@ pub(crate) enum RequestResult {
|
||||
AsyncBackingParams(Hash, async_backing::AsyncBackingParams),
|
||||
NodeFeatures(SessionIndex, NodeFeatures),
|
||||
ClaimQueue(Hash, BTreeMap<CoreIndex, VecDeque<ParaId>>),
|
||||
CandidatesPendingAvailability(Hash, ParaId, Vec<CommittedCandidateReceipt>),
|
||||
}
|
||||
|
||||
@@ -133,6 +133,9 @@ where
|
||||
CandidatePendingAvailability(relay_parent, para_id, candidate) => self
|
||||
.requests_cache
|
||||
.cache_candidate_pending_availability((relay_parent, para_id), candidate),
|
||||
CandidatesPendingAvailability(relay_parent, para_id, candidates) => self
|
||||
.requests_cache
|
||||
.cache_candidates_pending_availability((relay_parent, para_id), candidates),
|
||||
CandidateEvents(relay_parent, events) =>
|
||||
self.requests_cache.cache_candidate_events(relay_parent, events),
|
||||
SessionExecutorParams(_relay_parent, session_index, index) =>
|
||||
@@ -252,6 +255,9 @@ where
|
||||
Request::CandidatePendingAvailability(para, sender) =>
|
||||
query!(candidate_pending_availability(para), sender)
|
||||
.map(|sender| Request::CandidatePendingAvailability(para, sender)),
|
||||
Request::CandidatesPendingAvailability(para, sender) =>
|
||||
query!(candidates_pending_availability(para), sender)
|
||||
.map(|sender| Request::CandidatesPendingAvailability(para, sender)),
|
||||
Request::CandidateEvents(sender) =>
|
||||
query!(candidate_events(), sender).map(|sender| Request::CandidateEvents(sender)),
|
||||
Request::SessionExecutorParams(session_index, sender) => {
|
||||
@@ -531,6 +537,12 @@ where
|
||||
ver = 1,
|
||||
sender
|
||||
),
|
||||
Request::CandidatesPendingAvailability(para, sender) => query!(
|
||||
CandidatesPendingAvailability,
|
||||
candidates_pending_availability(para),
|
||||
ver = Request::CANDIDATES_PENDING_AVAILABILITY_RUNTIME_REQUIREMENT,
|
||||
sender
|
||||
),
|
||||
Request::CandidateEvents(sender) => {
|
||||
query!(CandidateEvents, candidate_events(), ver = 1, sender)
|
||||
},
|
||||
|
||||
@@ -47,6 +47,7 @@ struct MockSubsystemClient {
|
||||
validation_outputs_results: HashMap<ParaId, bool>,
|
||||
session_index_for_child: SessionIndex,
|
||||
candidate_pending_availability: HashMap<ParaId, CommittedCandidateReceipt>,
|
||||
candidates_pending_availability: HashMap<ParaId, Vec<CommittedCandidateReceipt>>,
|
||||
dmq_contents: HashMap<ParaId, Vec<InboundDownwardMessage>>,
|
||||
hrmp_channels: HashMap<ParaId, BTreeMap<ParaId, Vec<InboundHrmpMessage>>>,
|
||||
validation_code_by_hash: HashMap<ValidationCodeHash, ValidationCode>,
|
||||
@@ -140,6 +141,14 @@ impl RuntimeApiSubsystemClient for MockSubsystemClient {
|
||||
Ok(self.candidate_pending_availability.get(¶_id).cloned())
|
||||
}
|
||||
|
||||
async fn candidates_pending_availability(
|
||||
&self,
|
||||
_: Hash,
|
||||
para_id: ParaId,
|
||||
) -> Result<Vec<CommittedCandidateReceipt<Hash>>, ApiError> {
|
||||
Ok(self.candidates_pending_availability.get(¶_id).cloned().unwrap_or_default())
|
||||
}
|
||||
|
||||
async fn candidate_events(&self, _: Hash) -> Result<Vec<CandidateEvent<Hash>>, ApiError> {
|
||||
Ok(self.candidate_events.clone())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user