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

Commit cd305af

Browse files
authored
Make Proposer consume its reference on propose (#6190)
* Make `Proposer` consume its reference on `propose` A proposer must be created per new round, so it makes sense to have the proposer consume its own reference. * Remove `ProposerInner`
1 parent fc2e119 commit cd305af

File tree

8 files changed

+24
-32
lines changed

8 files changed

+24
-32
lines changed

client/basic-authorship/src/basic_authorship.rs

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,14 @@ impl<B, Block, C, A> ProposerFactory<A, B, C>
9191
info!("🙌 Starting consensus session on top of parent {:?}", parent_hash);
9292

9393
let proposer = Proposer {
94-
inner: Arc::new(ProposerInner {
95-
client: self.client.clone(),
96-
parent_hash,
97-
parent_id: id,
98-
parent_number: *parent_header.number(),
99-
transaction_pool: self.transaction_pool.clone(),
100-
now,
101-
metrics: self.metrics.clone(),
102-
_phantom: PhantomData,
103-
}),
94+
client: self.client.clone(),
95+
parent_hash,
96+
parent_id: id,
97+
parent_number: *parent_header.number(),
98+
transaction_pool: self.transaction_pool.clone(),
99+
now,
100+
metrics: self.metrics.clone(),
101+
_phantom: PhantomData,
104102
};
105103

106104
proposer
@@ -132,11 +130,6 @@ impl<A, B, Block, C> sp_consensus::Environment<Block> for
132130

133131
/// The proposer logic.
134132
pub struct Proposer<B, Block: BlockT, C, A: TransactionPool> {
135-
inner: Arc<ProposerInner<B, Block, C, A>>,
136-
}
137-
138-
/// Proposer inner, to wrap parameters under Arc.
139-
struct ProposerInner<B, Block: BlockT, C, A: TransactionPool> {
140133
client: Arc<C>,
141134
parent_hash: <Block as BlockT>::Hash,
142135
parent_id: BlockId<Block>,
@@ -165,22 +158,21 @@ impl<A, B, Block, C> sp_consensus::Proposer<Block> for
165158
type Error = sp_blockchain::Error;
166159

167160
fn propose(
168-
&mut self,
161+
self,
169162
inherent_data: InherentData,
170163
inherent_digests: DigestFor<Block>,
171164
max_duration: time::Duration,
172165
record_proof: RecordProof,
173166
) -> Self::Proposal {
174-
let inner = self.inner.clone();
175167
tokio_executor::blocking::run(move || {
176168
// leave some time for evaluation and block finalization (33%)
177-
let deadline = (inner.now)() + max_duration - max_duration / 3;
178-
inner.propose_with(inherent_data, inherent_digests, deadline, record_proof)
169+
let deadline = (self.now)() + max_duration - max_duration / 3;
170+
self.propose_with(inherent_data, inherent_digests, deadline, record_proof)
179171
})
180172
}
181173
}
182174

183-
impl<A, B, Block, C> ProposerInner<B, Block, C, A>
175+
impl<A, B, Block, C> Proposer<B, Block, C, A>
184176
where
185177
A: TransactionPool<Block = Block>,
186178
B: backend::Backend<Block> + Send + Sync + 'static,
@@ -191,7 +183,7 @@ impl<A, B, Block, C> ProposerInner<B, Block, C, A>
191183
+ BlockBuilderApi<Block, Error = sp_blockchain::Error>,
192184
{
193185
fn propose_with(
194-
&self,
186+
self,
195187
inherent_data: InherentData,
196188
inherent_digests: DigestFor<Block>,
197189
deadline: time::Instant,
@@ -399,7 +391,7 @@ mod tests {
399391
let mut proposer_factory = ProposerFactory::new(client.clone(), txpool.clone(), None);
400392

401393
let cell = Mutex::new((false, time::Instant::now()));
402-
let mut proposer = proposer_factory.init_with_now(
394+
let proposer = proposer_factory.init_with_now(
403395
&client.header(&BlockId::number(0)).unwrap().unwrap(),
404396
Box::new(move || {
405397
let mut value = cell.lock();
@@ -440,7 +432,7 @@ mod tests {
440432
let mut proposer_factory = ProposerFactory::new(client.clone(), txpool.clone(), None);
441433

442434
let cell = Mutex::new((false, time::Instant::now()));
443-
let mut proposer = proposer_factory.init_with_now(
435+
let proposer = proposer_factory.init_with_now(
444436
&client.header(&BlockId::number(0)).unwrap().unwrap(),
445437
Box::new(move || {
446438
let mut value = cell.lock();
@@ -489,7 +481,7 @@ mod tests {
489481

490482
let mut proposer_factory = ProposerFactory::new(client.clone(), txpool.clone(), None);
491483

492-
let mut proposer = proposer_factory.init_with_now(
484+
let proposer = proposer_factory.init_with_now(
493485
&client.header(&block_id).unwrap().unwrap(),
494486
Box::new(move || time::Instant::now()),
495487
);
@@ -560,7 +552,7 @@ mod tests {
560552
expected_block_extrinsics,
561553
expected_pool_transactions,
562554
| {
563-
let mut proposer = proposer_factory.init_with_now(
555+
let proposer = proposer_factory.init_with_now(
564556
&client.header(&BlockId::number(number)).unwrap().unwrap(),
565557
Box::new(move || time::Instant::now()),
566558
);

client/basic-authorship/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
//! );
3939
//!
4040
//! // The proposer is created asynchronously.
41-
//! let mut proposer = futures::executor::block_on(proposer).unwrap();
41+
//! let proposer = futures::executor::block_on(proposer).unwrap();
4242
//!
4343
//! // This `Proposer` allows us to create a block proposition.
4444
//! // The proposer will grab transactions from the transaction pool, and put them into the block.

client/consensus/aura/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,7 @@ mod tests {
904904
type Proposal = future::Ready<Result<Proposal<TestBlock, Self::Transaction>, Error>>;
905905

906906
fn propose(
907-
&mut self,
907+
self,
908908
_: InherentData,
909909
digests: DigestFor<TestBlock>,
910910
_: Duration,

client/consensus/babe/src/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl Proposer<TestBlock> for DummyProposer {
159159
type Proposal = future::Ready<Result<Proposal<TestBlock, Self::Transaction>, Error>>;
160160

161161
fn propose(
162-
&mut self,
162+
mut self,
163163
_: InherentData,
164164
pre_digests: DigestFor<TestBlock>,
165165
_: Duration,

client/consensus/manual-seal/src/seal_new_block.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ pub async fn seal_new_block<B, SC, HB, E, T, P>(
108108
None => select_chain.best_chain()?
109109
};
110110

111-
let mut proposer = env.init(&header)
111+
let proposer = env.init(&header)
112112
.map_err(|err| Error::StringError(format!("{}", err))).await?;
113113
let id = inherent_data_provider.create_inherent_data()?;
114114
let inherents_len = id.len();

client/consensus/pow/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ fn mine_loop<B: BlockT, C, Algorithm, E, SO, S, CAW>(
610610
continue 'outer
611611
}
612612

613-
let mut proposer = futures::executor::block_on(env.init(&best_header))
613+
let proposer = futures::executor::block_on(env.init(&best_header))
614614
.map_err(|e| Error::Environment(format!("{:?}", e)))?;
615615

616616
let inherent_data = inherent_data_providers

client/consensus/slots/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ pub trait SimpleSlotWorker<B: BlockT> {
239239
let logs = self.pre_digest_data(slot_number, &claim);
240240

241241
// deadline our production to approx. the end of the slot
242-
let proposing = awaiting_proposer.and_then(move |mut proposer| proposer.propose(
242+
let proposing = awaiting_proposer.and_then(move |proposer| proposer.propose(
243243
slot_info.inherent_data,
244244
sp_runtime::generic::Digest {
245245
logs,

primitives/consensus/common/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ pub trait Proposer<B: BlockT> {
157157
///
158158
/// Returns a future that resolves to a [`Proposal`] or to [`Error`].
159159
fn propose(
160-
&mut self,
160+
self,
161161
inherent_data: InherentData,
162162
inherent_digests: DigestFor<B>,
163163
max_duration: Duration,

0 commit comments

Comments
 (0)