Add a new host function for reporting fatal errors; make WASM backtraces readable when printing out errors (#10741)

* Add a new host function for reporting fatal errors

* Fix one of the wasmtime executor tests

* Have `#[runtime_interface(wasm_only)]` actually mean WASM-only, and not no_std-only

* Print out errors through `Display` instead of `Debug`

* Switch one more trait to require `Error` for its error instead of only `Debug`

* Align to review comments
This commit is contained in:
Koute
2022-02-09 18:12:55 +09:00
committed by GitHub
parent bd261d57c4
commit 9a31b2c341
68 changed files with 554 additions and 249 deletions
+4 -8
View File
@@ -167,18 +167,14 @@ where
&self,
at: &BlockId<Self::Block>,
) -> error::Result<Option<graph::NumberFor<Self>>> {
self.client
.to_number(at)
.map_err(|e| Error::BlockIdConversion(format!("{:?}", e)))
self.client.to_number(at).map_err(|e| Error::BlockIdConversion(e.to_string()))
}
fn block_id_to_hash(
&self,
at: &BlockId<Self::Block>,
) -> error::Result<Option<graph::BlockHash<Self>>> {
self.client
.to_hash(at)
.map_err(|e| Error::BlockIdConversion(format!("{:?}", e)))
self.client.to_hash(at).map_err(|e| Error::BlockIdConversion(e.to_string()))
}
fn hash_and_length(
@@ -224,7 +220,7 @@ where
}?;
let block_hash = client.to_hash(at)
.map_err(|e| Error::RuntimeApi(format!("{:?}", e)))?
.map_err(|e| Error::RuntimeApi(e.to_string()))?
.ok_or_else(|| Error::RuntimeApi(format!("Could not get hash for block `{:?}`.", at)))?;
use sp_api::Core;
@@ -237,7 +233,7 @@ where
.map_err(|e| Error::RuntimeApi(e.to_string()))
} else {
let block_number = client.to_number(at)
.map_err(|e| Error::RuntimeApi(format!("{:?}", e)))?
.map_err(|e| Error::RuntimeApi(e.to_string()))?
.ok_or_else(||
Error::RuntimeApi(format!("Could not get number for block `{:?}`.", at))
)?;
+5 -5
View File
@@ -534,7 +534,7 @@ async fn prune_known_txs_for_block<Block: BlockT, Api: graph::ChainApi<Block = B
.block_body(&block_id)
.await
.unwrap_or_else(|e| {
log::warn!("Prune known transactions: error request {:?}!", e);
log::warn!("Prune known transactions: error request: {}", e);
None
})
.unwrap_or_default();
@@ -550,14 +550,14 @@ async fn prune_known_txs_for_block<Block: BlockT, Api: graph::ChainApi<Block = B
return hashes
},
Err(e) => {
log::debug!(target: "txpool", "Error retrieving header for {:?}: {:?}", block_id, e);
log::debug!(target: "txpool", "Error retrieving header for {:?}: {}", block_id, e);
return hashes
},
};
if let Err(e) = pool.prune(&block_id, &BlockId::hash(*header.parent_hash()), &extrinsics).await
{
log::error!("Cannot prune known in the pool {:?}!", e);
log::error!("Cannot prune known in the pool: {}", e);
}
hashes
@@ -639,7 +639,7 @@ where
.block_body(&BlockId::hash(hash))
.await
.unwrap_or_else(|e| {
log::warn!("Failed to fetch block body {:?}!", e);
log::warn!("Failed to fetch block body: {}", e);
None
})
.unwrap_or_default()
@@ -685,7 +685,7 @@ where
{
log::debug!(
target: "txpool",
"[{:?}] Error re-submitting transactions: {:?}",
"[{:?}] Error re-submitting transactions: {}",
id,
e,
)
@@ -106,7 +106,7 @@ async fn batch_revalidate<Api: ChainApi>(
Err(validation_err) => {
log::debug!(
target: "txpool",
"[{:?}]: Error during revalidation: {:?}. Removing.",
"[{:?}]: Removing due to error during revalidation: {}",
ext_hash,
validation_err
);