Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions cumulus/client/consensus/aura/src/collator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,14 @@ where
inherent_data: (ParachainInherentData, InherentData),
proposal_duration: Duration,
max_pov_size: usize,
) -> Result<(Collation, ParachainBlockData<Block>, Block::Hash), Box<dyn Error + Send + 'static>>
{
) -> Result<
Option<(Collation, ParachainBlockData<Block>, Block::Hash)>,
Box<dyn Error + Send + 'static>,
> {
let mut digest = additional_pre_digest.into().unwrap_or_default();
digest.push(slot_claim.pre_digest.clone());

let proposal = self
let maybe_proposal = self
.proposer
.propose(
&parent_header,
Expand All @@ -190,6 +192,11 @@ where
.await
.map_err(|e| Box::new(e) as Box<dyn Error + Send>)?;

let proposal = match maybe_proposal {
None => return Ok(None),
Some(p) => p,
};

let sealed_importable = seal::<_, P>(
proposal.block,
proposal.storage_changes,
Expand Down Expand Up @@ -234,7 +241,7 @@ where
);
}

Ok((collation, block_data, post_hash))
Ok(Some((collation, block_data, post_hash)))
} else {
Err(Box::<dyn Error + Send + Sync>::from("Unable to produce collation")
as Box<dyn Error + Send>)
Expand Down
12 changes: 9 additions & 3 deletions cumulus/client/consensus/aura/src/collators/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ where
.await
);

let (collation, _, post_hash) = try_request!(
let maybe_collation = try_request!(
collator
.collate(
&parent_header,
Expand All @@ -220,8 +220,14 @@ where
.await
);

let result_sender = Some(collator.collator_service().announce_with_barrier(post_hash));
request.complete(Some(CollationResult { collation, result_sender }));
if let Some((collation, _, post_hash)) = maybe_collation {
let result_sender =
Some(collator.collator_service().announce_with_barrier(post_hash));
request.complete(Some(CollationResult { collation, result_sender }));
} else {
request.complete(None);
tracing::debug!(target: crate::LOG_TARGET, "No block proposal");
}
}
}
}
6 changes: 5 additions & 1 deletion cumulus/client/consensus/aura/src/collators/lookahead.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ where
)
.await
{
Ok((collation, block_data, new_block_hash)) => {
Ok(Some((collation, block_data, new_block_hash))) => {
// Here we are assuming that the import logic protects against equivocations
// and provides sybil-resistance, as it should.
collator.collator_service().announce_block(new_block_hash, None);
Expand Down Expand Up @@ -387,6 +387,10 @@ where
parent_hash = new_block_hash;
parent_header = block_data.into_header();
},
Ok(None) => {
tracing::debug!(target: crate::LOG_TARGET, "No block proposal");
break
},
Err(err) => {
tracing::error!(target: crate::LOG_TARGET, ?err);
break
Expand Down
5 changes: 3 additions & 2 deletions cumulus/client/consensus/proposer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ pub trait ProposerInterface<Block: BlockT> {
inherent_digests: Digest,
max_duration: Duration,
block_size_limit: Option<usize>,
) -> Result<Proposal<Block, StorageProof>, Error>;
) -> Result<Option<Proposal<Block, StorageProof>>, Error>;
}

/// A simple wrapper around a Substrate proposer for creating collations.
Expand Down Expand Up @@ -109,7 +109,7 @@ where
inherent_digests: Digest,
max_duration: Duration,
block_size_limit: Option<usize>,
) -> Result<Proposal<B, StorageProof>, Error> {
) -> Result<Option<Proposal<B, StorageProof>>, Error> {
let proposer = self
.inner
.init(parent_header)
Expand All @@ -127,6 +127,7 @@ where
proposer
.propose(inherent_data, inherent_digests, max_duration, block_size_limit)
.await
.map(Some)
.map_err(|e| Error::proposing(anyhow::Error::new(e)).into())
}
}
13 changes: 13 additions & 0 deletions prdoc/pr_2834.prdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title: "proposer: return optional block"

doc:
- audience: Node Dev
description: |
The `ProposerInterface` trait now returns an optional `Proposal`, allowing
for no block to be created. This is a breaking change that only impacts custom
`ProposerInterface` implementations. The change allows more flexibility in choosing
when to create blocks.

crates:
- name: "cumulus-client-consensus-aura"
- name: "cumulus-client-consensus-proposer"