Skip to content

Commit d843b89

Browse files
committed
Add complete_register to ConsensusEngine
This is a work-around to the currently order-dependant and non-deterministic initialization of Tendermint ConsensusEngine/Worker.
1 parent 7d5fd0e commit d843b89

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

codechain/run_node.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ pub fn run_node(matches: &ArgMatches) -> Result<(), String> {
367367

368368
// drop the scheme to free up genesis state.
369369
drop(scheme);
370+
client.client().engine().complete_register();
370371

371372
cinfo!(TEST_SCRIPT, "Initialization complete");
372373

core/src/consensus/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,8 @@ pub trait ConsensusEngine: Sync + Send {
266266

267267
fn register_chain_notify(&self, _: &Client) {}
268268

269+
fn complete_register(&self) {}
270+
269271
fn get_best_block_from_best_proposal_header(&self, header: &HeaderView) -> BlockHash {
270272
header.hash()
271273
}

core/src/consensus/tendermint/engine.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,6 @@ impl ConsensusEngine for Tendermint {
278278
let extension = service.register_extension(move |api| TendermintExtension::new(inner, timeouts, api));
279279
let client = Arc::downgrade(&self.client().unwrap());
280280
self.extension_initializer.send((extension, client)).unwrap();
281-
282-
let (result, receiver) = crossbeam::bounded(1);
283-
self.inner.send(worker::Event::Restore(result)).unwrap();
284-
receiver.recv().unwrap();
285281
}
286282

287283
fn register_time_gap_config_to_worker(&self, time_gap_params: TimeGapParams) {
@@ -300,6 +296,12 @@ impl ConsensusEngine for Tendermint {
300296
client.add_notify(Arc::downgrade(&self.chain_notify) as Weak<dyn ChainNotify>);
301297
}
302298

299+
fn complete_register(&self) {
300+
let (result, receiver) = crossbeam::bounded(1);
301+
self.inner.send(worker::Event::Restore(result)).unwrap();
302+
receiver.recv().unwrap();
303+
}
304+
303305
fn get_best_block_from_best_proposal_header(&self, header: &HeaderView) -> BlockHash {
304306
header.parent_hash()
305307
}

0 commit comments

Comments
 (0)