mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 11:41:02 +00:00
refactor runtime cache for SessionInfo (#4723)
This commit is contained in:
@@ -102,7 +102,7 @@ pub(crate) struct RequestResultCache {
|
|||||||
candidate_pending_availability:
|
candidate_pending_availability:
|
||||||
MemoryLruCache<(Hash, ParaId), ResidentSizeOf<Option<CommittedCandidateReceipt>>>,
|
MemoryLruCache<(Hash, ParaId), ResidentSizeOf<Option<CommittedCandidateReceipt>>>,
|
||||||
candidate_events: MemoryLruCache<Hash, ResidentSizeOf<Vec<CandidateEvent>>>,
|
candidate_events: MemoryLruCache<Hash, ResidentSizeOf<Vec<CandidateEvent>>>,
|
||||||
session_info: MemoryLruCache<SessionIndex, ResidentSizeOf<Option<SessionInfo>>>,
|
session_info: MemoryLruCache<SessionIndex, ResidentSizeOf<SessionInfo>>,
|
||||||
dmq_contents:
|
dmq_contents:
|
||||||
MemoryLruCache<(Hash, ParaId), ResidentSizeOf<Vec<InboundDownwardMessage<BlockNumber>>>>,
|
MemoryLruCache<(Hash, ParaId), ResidentSizeOf<Vec<InboundDownwardMessage<BlockNumber>>>>,
|
||||||
inbound_hrmp_channels_contents: MemoryLruCache<
|
inbound_hrmp_channels_contents: MemoryLruCache<
|
||||||
@@ -309,18 +309,12 @@ impl RequestResultCache {
|
|||||||
self.candidate_events.insert(relay_parent, ResidentSizeOf(events));
|
self.candidate_events.insert(relay_parent, ResidentSizeOf(events));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn session_info(
|
pub(crate) fn session_info(&mut self, key: SessionIndex) -> Option<&SessionInfo> {
|
||||||
&mut self,
|
self.session_info.get(&key).map(|v| &v.0)
|
||||||
key: (Hash, SessionIndex),
|
|
||||||
) -> Option<&Option<SessionInfo>> {
|
|
||||||
self.session_info.get(&key.1).map(|v| &v.0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn cache_session_info(&mut self, key: SessionIndex, value: Option<SessionInfo>) {
|
pub(crate) fn cache_session_info(&mut self, key: SessionIndex, value: SessionInfo) {
|
||||||
// only cache Some(SessionInfo)
|
self.session_info.insert(key, ResidentSizeOf(value));
|
||||||
if value.is_some() {
|
|
||||||
self.session_info.insert(key, ResidentSizeOf(value));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn dmq_contents(
|
pub(crate) fn dmq_contents(
|
||||||
|
|||||||
@@ -147,7 +147,9 @@ where
|
|||||||
CandidateEvents(relay_parent, events) =>
|
CandidateEvents(relay_parent, events) =>
|
||||||
self.requests_cache.cache_candidate_events(relay_parent, events),
|
self.requests_cache.cache_candidate_events(relay_parent, events),
|
||||||
SessionInfo(_relay_parent, session_index, info) =>
|
SessionInfo(_relay_parent, session_index, info) =>
|
||||||
self.requests_cache.cache_session_info(session_index, info),
|
if let Some(info) = info {
|
||||||
|
self.requests_cache.cache_session_info(session_index, info);
|
||||||
|
},
|
||||||
DmqContents(relay_parent, para_id, messages) =>
|
DmqContents(relay_parent, para_id, messages) =>
|
||||||
self.requests_cache.cache_dmq_contents((relay_parent, para_id), messages),
|
self.requests_cache.cache_dmq_contents((relay_parent, para_id), messages),
|
||||||
InboundHrmpChannelsContents(relay_parent, para_id, contents) => self
|
InboundHrmpChannelsContents(relay_parent, para_id, contents) => self
|
||||||
@@ -235,8 +237,15 @@ where
|
|||||||
.map(|sender| Request::CandidatePendingAvailability(para, sender)),
|
.map(|sender| Request::CandidatePendingAvailability(para, sender)),
|
||||||
Request::CandidateEvents(sender) =>
|
Request::CandidateEvents(sender) =>
|
||||||
query!(candidate_events(), sender).map(|sender| Request::CandidateEvents(sender)),
|
query!(candidate_events(), sender).map(|sender| Request::CandidateEvents(sender)),
|
||||||
Request::SessionInfo(index, sender) => query!(session_info(index), sender)
|
Request::SessionInfo(index, sender) => {
|
||||||
.map(|sender| Request::SessionInfo(index, sender)),
|
if let Some(info) = self.requests_cache.session_info(index) {
|
||||||
|
self.metrics.on_cached_request();
|
||||||
|
let _ = sender.send(Ok(Some(info.clone())));
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(Request::SessionInfo(index, sender))
|
||||||
|
}
|
||||||
|
},
|
||||||
Request::DmqContents(id, sender) =>
|
Request::DmqContents(id, sender) =>
|
||||||
query!(dmq_contents(id), sender).map(|sender| Request::DmqContents(id, sender)),
|
query!(dmq_contents(id), sender).map(|sender| Request::DmqContents(id, sender)),
|
||||||
Request::InboundHrmpChannelsContents(id, sender) =>
|
Request::InboundHrmpChannelsContents(id, sender) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user