Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Print an error when we can not find the genesis block (#313)
Browse files Browse the repository at this point in the history
This changes the collator to print an error if the block that we can not
find is the genesis block, instead of only logging this as a `debug`
message. This should help people when they have registered the wrong
genesis state on the relay chain.
  • Loading branch information
bkchr authored Jan 29, 2021
1 parent 0d086ae commit cb00749
Showing 1 changed file with 56 additions and 36 deletions.
92 changes: 56 additions & 36 deletions collator/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use sp_core::traits::SpawnNamed;
use sp_inherents::{InherentData, InherentDataProviders};
use sp_runtime::{
generic::BlockId,
traits::{BlakeTwo256, Block as BlockT, Header as HeaderT},
traits::{BlakeTwo256, Block as BlockT, Header as HeaderT, Zero},
};
use sp_state_machine::InspectState;

Expand All @@ -59,6 +59,9 @@ use parking_lot::Mutex;
type TransactionFor<E, Block> =
<<E as Environment<Block>>::Proposer as Proposer<Block>>::Transaction;

/// The logging target.
const LOG_TARGET: &str = "cumulus-collator";

/// The implementation of the Cumulus `Collator`.
pub struct Collator<Block: BlockT, PF, BI, BS, Backend, PBackend, PClient, PBackend2> {
para_id: ParaId,
Expand Down Expand Up @@ -162,7 +165,7 @@ where
)
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"An error occured during requesting the downward messages for {}: {:?}",
relay_parent, e,
);
Expand All @@ -187,7 +190,7 @@ where
)
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"An error occured during requesting the inbound HRMP messages for {}: {:?}",
relay_parent, e,
);
Expand All @@ -208,7 +211,7 @@ where
.state_at(BlockId::Hash(relay_parent))
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Cannot obtain the state of the relay chain at `{:?}`: {:?}",
relay_parent,
e,
Expand All @@ -222,7 +225,7 @@ where
))
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Cannot obtain the hrmp egress channel index: {:?}",
e,
)
Expand All @@ -233,7 +236,7 @@ where
.transpose()
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Cannot decode the hrmp egress channel index: {:?}",
e,
)
Expand All @@ -259,7 +262,7 @@ where
sp_state_machine::prove_read(relay_parent_state_backend, relevant_keys)
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to collect required relay chain state storage proof at `{:?}`: {:?}",
relay_parent,
e,
Expand All @@ -279,7 +282,7 @@ where
.create_inherent_data()
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to create inherent data: {:?}",
e,
)
Expand Down Expand Up @@ -307,7 +310,7 @@ where
)
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to put the system inherent into inherent data: {:?}",
e,
)
Expand All @@ -320,39 +323,56 @@ where
/// Checks the status of the given block hash in the Parachain.
///
/// Returns `true` if the block could be found and is good to be build on.
fn check_block_status(&self, hash: Block::Hash) -> bool {
fn check_block_status(&self, hash: Block::Hash, header: &Block::Header) -> bool {
match self.block_status.block_status(&BlockId::Hash(hash)) {
Ok(BlockStatus::Queued) => {
debug!(
target: "cumulus-collator",
"Skipping candidate production, because block `{:?}` is still queued for import.", hash,
target: LOG_TARGET,
"Skipping candidate production, because block `{:?}` is still queued for import.",
hash,
);
false
}
Ok(BlockStatus::InChainWithState) => true,
Ok(BlockStatus::InChainPruned) => {
error!(
target: "cumulus-collator",
"Skipping candidate production, because block `{:?}` is already pruned!", hash,
target: LOG_TARGET,
"Skipping candidate production, because block `{:?}` is already pruned!",
hash,
);
false
}
Ok(BlockStatus::KnownBad) => {
error!(
target: "cumulus-collator",
"Block `{}` is tagged as known bad and is included in the relay chain! Skipping candidate production!", hash,
target: LOG_TARGET,
"Block `{}` is tagged as known bad and is included in the relay chain! Skipping candidate production!",
hash,
);
false
}
Ok(BlockStatus::Unknown) => {
debug!(
target: "cumulus-collator",
"Skipping candidate production, because block `{:?}` is unknown.", hash,
);
if header.number().is_zero() {
error!(
target: LOG_TARGET,
"Could not find the header `{:?}` of the genesis block in the database!",
hash,
);
} else {
debug!(
target: LOG_TARGET,
"Skipping candidate production, because block `{:?}` is unknown.",
hash,
);
}
false
}
Err(e) => {
error!(target: "cumulus-collator", "Failed to get block status of `{:?}`: {:?}", hash, e);
error!(
target: LOG_TARGET,
"Failed to get block status of `{:?}`: {:?}",
hash,
e,
);
false
}
}
Expand All @@ -371,7 +391,7 @@ where
let state = match self.backend.state_at(BlockId::Hash(block_hash)) {
Ok(state) => state,
Err(e) => {
error!(target: "cumulus-collator", "Failed to get state of the freshly built block: {:?}", e);
error!(target: LOG_TARGET, "Failed to get state of the freshly built block: {:?}", e);
return None;
}
};
Expand All @@ -381,7 +401,7 @@ where
let upward_messages = match upward_messages.map(|v| Vec::<UpwardMessage>::decode(&mut &v[..])) {
Some(Ok(msgs)) => msgs,
Some(Err(e)) => {
error!(target: "cumulus-collator", "Failed to decode upward messages from the build block: {:?}", e);
error!(target: LOG_TARGET, "Failed to decode upward messages from the build block: {:?}", e);
return None
},
None => Vec::new(),
Expand All @@ -396,7 +416,7 @@ where
Some(Ok(processed_cnt)) => processed_cnt,
Some(Err(e)) => {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to decode the count of processed downward messages: {:?}",
e
);
Expand All @@ -412,7 +432,7 @@ where
Some(Ok(horizontal_messages)) => horizontal_messages,
Some(Err(e)) => {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to decode the horizontal messages: {:?}",
e
);
Expand All @@ -426,7 +446,7 @@ where
Some(Ok(hrmp_watermark)) => hrmp_watermark,
Some(Err(e)) => {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Failed to decode the HRMP watermark: {:?}",
e
);
Expand Down Expand Up @@ -458,24 +478,24 @@ where
relay_parent: PHash,
validation_data: PersistedValidationData,
) -> Option<Collation> {
trace!(target: "cumulus-collator", "Producing candidate");
trace!(target: LOG_TARGET, "Producing candidate");

let last_head =
match Block::Header::decode(&mut &validation_data.parent_head.0[..]) {
Ok(x) => x,
Err(e) => {
error!(target: "cumulus-collator", "Could not decode the head data: {:?}", e);
error!(target: LOG_TARGET, "Could not decode the head data: {:?}", e);
return None;
}
};

let last_head_hash = last_head.hash();
if !self.check_block_status(last_head_hash) {
if !self.check_block_status(last_head_hash, &last_head) {
return None;
}

info!(
target: "cumulus-collator",
target: LOG_TARGET,
"Starting collation for relay parent {:?} on parent {:?}.",
relay_parent,
last_head_hash,
Expand All @@ -487,7 +507,7 @@ where
.await
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Could not create proposer: {:?}",
e,
)
Expand All @@ -511,7 +531,7 @@ where
.await
.map_err(|e| {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Proposing failed: {:?}",
e,
)
Expand All @@ -522,7 +542,7 @@ where
Some(proof) => proof,
None => {
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Proposer did not return the requested proof.",
);

Expand All @@ -548,7 +568,7 @@ where
.import_block(block_import_params, Default::default())
{
error!(
target: "cumulus-collator",
target: LOG_TARGET,
"Error importing build block (at {:?}): {:?}",
b.header().parent_hash(),
err,
Expand All @@ -558,7 +578,7 @@ where
}

trace!(
target: "cumulus-collator",
target: LOG_TARGET,
"PoV size {{ header: {}kb, extrinsics: {}kb, storage_proof: {}kb }}",
b.header().encode().len() as f64 / 1024f64,
b.extrinsics().encode().len() as f64 / 1024f64,
Expand All @@ -574,7 +594,7 @@ where
.wait_to_announce(block_hash, pov_hash);

info!(
target: "cumulus-collator",
target: LOG_TARGET,
"Produced proof-of-validity candidate {:?} from block {:?}.",
pov_hash,
block_hash,
Expand Down

0 comments on commit cb00749

Please sign in to comment.