mirror of
https://github.com/eosswedenorg/thalos
synced 2026-07-04 12:03:41 +02:00
Merge branch 'rollback'
This commit is contained in:
commit
d32b463e12
3 changed files with 19 additions and 0 deletions
|
|
@ -45,6 +45,7 @@ func (c Channel) Is(other Channel) bool {
|
||||||
var (
|
var (
|
||||||
TransactionChannel = Channel{"transactions"}
|
TransactionChannel = Channel{"transactions"}
|
||||||
HeartbeatChannel = Channel{"heartbeat"}
|
HeartbeatChannel = Channel{"heartbeat"}
|
||||||
|
RollbackChannel = Channel{"rollback"}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Action Channel
|
// Action Channel
|
||||||
|
|
|
||||||
|
|
@ -80,3 +80,8 @@ func (act ActionTrace) GetData() (map[string]any, error) {
|
||||||
}
|
}
|
||||||
return nil, errors.New("failed to convert data to map")
|
return nil, errors.New("failed to convert data to map")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RollbackMessage struct {
|
||||||
|
OldBlockNum uint32 `json:"old_block" msgpack:"old_block"`
|
||||||
|
NewBlockNum uint32 `json:"new_block" msgpack:"new_block"`
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,19 @@ func (processor *ShipProcessor) GetCurrentBlock() uint32 {
|
||||||
|
|
||||||
// Callback function called by shipclient.Stream when a new block arrives.
|
// Callback function called by shipclient.Stream when a new block arrives.
|
||||||
func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) {
|
func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) {
|
||||||
|
// Check to see if we have a microfork and post a message to
|
||||||
|
// the rollback channel in that case.
|
||||||
|
if processor.state.CurrentBlock > 0 && block.ThisBlock.BlockNum < processor.state.CurrentBlock {
|
||||||
|
log.WithField("old_block", processor.state.CurrentBlock).
|
||||||
|
WithField("new_block", block.ThisBlock.BlockNum).
|
||||||
|
Warn("Fork detected, old_block is greater than new_block")
|
||||||
|
|
||||||
|
processor.encodeQueue(api.RollbackChannel, message.RollbackMessage{
|
||||||
|
OldBlockNum: processor.state.CurrentBlock,
|
||||||
|
NewBlockNum: block.ThisBlock.BlockNum,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
processor.state.CurrentBlock = block.ThisBlock.BlockNum
|
processor.state.CurrentBlock = block.ThisBlock.BlockNum
|
||||||
|
|
||||||
if block.ThisBlock.BlockNum%100 == 0 {
|
if block.ThisBlock.BlockNum%100 == 0 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue