casper_node/components/fetcher/fetcher_impls/
trie_or_chunk_fetcher.rs1use std::{collections::HashMap, time::Duration};
2
3use async_trait::async_trait;
4use tracing::error;
5
6use casper_storage::data_access_layer::{TrieElement, TrieRequest, TrieResult};
7
8use crate::{
9 components::fetcher::{metrics::Metrics, Fetcher, ItemFetcher, ItemHandle, StoringState},
10 effect::{requests::ContractRuntimeRequest, EffectBuilder},
11 types::{NodeId, TrieOrChunk, TrieOrChunkId},
12};
13
14#[async_trait]
15impl ItemFetcher<TrieOrChunk> for Fetcher<TrieOrChunk> {
16 const SAFE_TO_RESPOND_TO_ALL: bool = true;
17
18 fn item_handles(
19 &mut self,
20 ) -> &mut HashMap<TrieOrChunkId, HashMap<NodeId, ItemHandle<TrieOrChunk>>> {
21 &mut self.item_handles
22 }
23
24 fn metrics(&mut self) -> &Metrics {
25 &self.metrics
26 }
27
28 fn peer_timeout(&self) -> Duration {
29 self.get_from_peer_timeout
30 }
31
32 async fn get_locally<REv: From<ContractRuntimeRequest> + Send>(
33 effect_builder: EffectBuilder<REv>,
34 id: TrieOrChunkId,
35 ) -> Option<TrieOrChunk> {
36 let TrieOrChunkId(chunk_index, trie_key) = id;
37 let request = TrieRequest::new(trie_key, Some(chunk_index));
38 let result = effect_builder.get_trie(request).await;
39 match result {
40 TrieResult::ValueNotFound(_) => None,
41 TrieResult::Failure(err) => {
42 error!(%err, "failed to get trie element locally");
43 None
44 }
45 TrieResult::Success { element } => match element {
46 TrieElement::Raw(raw) => match TrieOrChunk::new(raw.into(), 0) {
47 Ok(voc) => Some(voc),
48 Err(err) => {
49 error!(%err, "raw chunking error");
50 None
51 }
52 },
53 TrieElement::Chunked(raw, chunk_id) => match TrieOrChunk::new(raw.into(), chunk_id)
54 {
55 Ok(voc) => Some(voc),
56 Err(err) => {
57 error!(%err, "chunking error");
58 None
59 }
60 },
61 },
62 }
63 }
64
65 fn put_to_storage<'a, REv>(
66 _effect_builder: EffectBuilder<REv>,
67 item: TrieOrChunk,
68 ) -> StoringState<'a, TrieOrChunk> {
69 StoringState::WontStore(item)
71 }
72
73 async fn announce_fetched_new_item<REv: Send>(
74 _effect_builder: EffectBuilder<REv>,
75 _item: TrieOrChunk,
76 _peer: NodeId,
77 ) {
78 }
79}