Skip to content

Commit f9522c5

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

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
@@ -376,6 +376,7 @@ pub fn run_node(matches: &ArgMatches) -> Result<(), String> {
376376

377377
// drop the scheme to free up genesis state.
378378
drop(scheme);
379+
client.client().engine().register_is_done();
379380

380381
cinfo!(TEST_SCRIPT, "Initialization complete");
381382

core/src/consensus/mod.rs

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

266266
fn register_snapshot_notify_sender(&self, _sender: SnapshotNotifySender) {}
267267

268+
fn register_is_done(&self) {}
269+
268270
fn send_snapshot_notify(&self, _block_hash: BlockHash) {}
269271

270272
fn get_best_block_from_best_proposal_header(&self, header: &HeaderView) -> BlockHash {

core/src/consensus/tendermint/engine.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,6 @@ impl ConsensusEngine for Tendermint {
281281
let extension = service.register_extension(move |api| TendermintExtension::new(inner, timeouts, api));
282282
let client = Weak::clone(self.client.read().as_ref().unwrap());
283283
self.extension_initializer.send((extension, client)).unwrap();
284-
285-
let (result, receiver) = crossbeam::bounded(1);
286-
self.inner.send(worker::Event::Restore(result)).unwrap();
287-
receiver.recv().unwrap();
288284
}
289285

290286
fn register_time_gap_config_to_worker(&self, time_gap_params: TimeGapParams) {
@@ -303,6 +299,12 @@ impl ConsensusEngine for Tendermint {
303299
client.add_notify(Arc::downgrade(&self.chain_notify) as Weak<dyn ChainNotify>);
304300
}
305301

302+
fn register_is_done(&self) {
303+
let (result, receiver) = crossbeam::bounded(1);
304+
self.inner.send(worker::Event::Restore(result)).unwrap();
305+
receiver.recv().unwrap();
306+
}
307+
306308
fn get_best_block_from_best_proposal_header(&self, header: &HeaderView) -> BlockHash {
307309
header.parent_hash()
308310
}

0 commit comments

Comments
 (0)