fix error deadlocked master node in case : try mine block Epoch when start node

This commit is contained in:
Nguyen Ba Tam 2018-10-29 17:11:46 +07:00
parent c058a3d72e
commit f924946794

View file

@ -337,6 +337,24 @@ func (self *worker) wait() {
if stat == core.CanonStatTy { if stat == core.CanonStatTy {
events = append(events, core.ChainHeadEvent{Block: block}) events = append(events, core.ChainHeadEvent{Block: block})
} }
if work.config.Posv != nil {
// epoch block
if (block.NumberU64() % work.config.Posv.Epoch) == 0 {
core.CheckpointCh <- 1
}
// prepare set of masternodes for the next epoch
if (block.NumberU64() % work.config.Posv.Epoch) == (work.config.Posv.Epoch - work.config.Posv.Gap) {
err := self.chain.UpdateM1()
if err != nil {
if err == core.ErrNotPoSV {
log.Error("Stopping node", "err", err)
os.Exit(1)
} else {
log.Error("Error when update masternodes set. Keep the current masternodes set for the next epoch.", "err", err)
}
}
}
}
self.chain.PostChainEvents(events, logs) self.chain.PostChainEvents(events, logs)
// Insert the block into the set of pending ones to wait for confirmations // Insert the block into the set of pending ones to wait for confirmations
@ -590,24 +608,6 @@ func (self *worker) commitNewWork() {
log.Info("Commit new mining work", "number", work.Block.Number(), "txs", work.tcount, "special txs", len(specialTxs), "uncles", len(uncles), "elapsed", common.PrettyDuration(time.Since(tstart))) log.Info("Commit new mining work", "number", work.Block.Number(), "txs", work.tcount, "special txs", len(specialTxs), "uncles", len(uncles), "elapsed", common.PrettyDuration(time.Since(tstart)))
self.unconfirmed.Shift(work.Block.NumberU64() - 1) self.unconfirmed.Shift(work.Block.NumberU64() - 1)
} }
if work.config.Posv != nil {
// epoch block
if (work.Block.NumberU64() % work.config.Posv.Epoch) == 0 {
core.CheckpointCh <- 1
}
// prepare set of masternodes for the next epoch
if (work.Block.NumberU64() % work.config.Posv.Epoch) == (work.config.Posv.Epoch - work.config.Posv.Gap) {
err := self.chain.UpdateM1()
if err != nil {
if err == core.ErrNotPoSV {
log.Error("Stopping node", "err", err)
os.Exit(1)
} else {
log.Error("Error when update masternodes set. Keep the current masternodes set for the next epoch.", "err", err)
}
}
}
}
self.push(work) self.push(work)
} }