Skip to content

Commit 90f6b86

Browse files
committed
Merge branch '0.11' into i246-zombie-handshakes
2 parents c300eaa + d2e5d4c commit 90f6b86

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

crates/ethcore/src/engines/hbbft/hbbft_engine.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ pub struct HoneyBadgerBFT {
102102
current_minimum_gas_price: Mutex<Option<U256>>,
103103
early_epoch_manager: Mutex<Option<HbbftEarlyEpochEndManager>>,
104104
hbbft_engine_cache: Mutex<HbbftEngineCache>,
105+
delayed_hbbft_join: AtomicBool,
105106
}
106107

107108
struct TransitionHandler {
@@ -292,6 +293,17 @@ impl TransitionHandler {
292293
// Periodically allow messages received for future epochs to be processed.
293294
self.engine.replay_cached_messages();
294295

296+
// rejoin Hbbft Epoch after sync was completed.
297+
if self
298+
.engine
299+
.delayed_hbbft_join
300+
.load(std::sync::atomic::Ordering::SeqCst)
301+
{
302+
if let Err(e) = self.engine.join_hbbft_epoch() {
303+
error!(target: "engine", "Error trying to join epoch after synced: {}", e);
304+
}
305+
}
306+
295307
self.handle_shutdown_on_missing_block_import(shutdown_on_missing_block_import_config);
296308

297309
let mut timer_duration = self.min_block_time_remaining(client.clone());
@@ -469,14 +481,15 @@ impl HoneyBadgerBFT {
469481
),
470482
sealing: RwLock::new(BTreeMap::new()),
471483
params,
472-
message_counter: Mutex::new(0),
484+
message_counter: Mutex::new(0), // restore message counter from memory here for RBC ? */
473485
random_numbers: RwLock::new(BTreeMap::new()),
474486
keygen_transaction_sender: RwLock::new(KeygenTransactionSender::new()),
475487

476488
has_connected_to_validator_set: AtomicBool::new(false),
477489
current_minimum_gas_price: Mutex::new(None),
478490
early_epoch_manager: Mutex::new(None),
479491
hbbft_engine_cache: Mutex::new(HbbftEngineCache::new()),
492+
delayed_hbbft_join: AtomicBool::new(false),
480493
});
481494

482495
if !engine.params.is_unit_test.unwrap_or(false) {
@@ -496,6 +509,8 @@ impl HoneyBadgerBFT {
496509
.hbbft_peers_service
497510
.register_handler(Arc::new(peers_handler))?;
498511

512+
// todo:
513+
// setup rev
499514
Ok(engine)
500515
}
501516

@@ -810,9 +825,18 @@ impl HoneyBadgerBFT {
810825
let client = self.client_arc().ok_or(EngineError::RequiresClient)?;
811826
if self.is_syncing(&client) {
812827
trace!(target: "consensus", "tried to join HBBFT Epoch, but still syncing.");
828+
self.delayed_hbbft_join
829+
.store(true, std::sync::atomic::Ordering::SeqCst);
813830
return Ok(());
814831
}
815832

833+
if self
834+
.delayed_hbbft_join
835+
.swap(false, std::sync::atomic::Ordering::SeqCst)
836+
{
837+
trace!(target: "consensus", "continued join_hbbft_epoch after sync was completed.");
838+
}
839+
816840
let step = self
817841
.hbbft_state
818842
.write()
@@ -1295,6 +1319,9 @@ impl Engine<EthereumMachine> for HoneyBadgerBFT {
12951319
error!(target: "engine", "hbbft-hardfork : could not initialialize hardfork manager, no latest block found.");
12961320
}
12971321

1322+
// RBC: we need to replay disk cached messages here.
1323+
// state.replay_cached_messages(client)
1324+
12981325
match state.update_honeybadger(
12991326
client,
13001327
&self.signer,
@@ -1664,6 +1691,7 @@ mod tests {
16641691

16651692
let mut builder: HoneyBadgerBuilder<Contribution, _> =
16661693
HoneyBadger::builder(Arc::new(net_info.clone()));
1694+
builder.max_future_epochs(0);
16671695

16681696
let mut honey_badger = builder.build();
16691697

0 commit comments

Comments
 (0)