Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions cmd/utils/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -1620,6 +1620,13 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {

if ctx.GlobalIsSet(SyncModeFlag.Name) {
cfg.SyncMode = *GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode)

// To be extra preventive, we won't allow the node to start
// in snap sync mode until we have it working
// TODO(snap): Comment when we have snap sync working
if cfg.SyncMode == downloader.SnapSync {
cfg.SyncMode = downloader.FullSync
}
}
if ctx.GlobalIsSet(NetworkIdFlag.Name) {
cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name)
Expand Down
11 changes: 9 additions & 2 deletions eth/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,15 @@ func newHandler(config *handlerConfig) (*handler, error) {
// In these cases however it's safe to reenable snap sync.
fullBlock, fastBlock := h.chain.CurrentBlock(), h.chain.CurrentFastBlock()
if fullBlock.NumberU64() == 0 && fastBlock.NumberU64() > 0 {
h.snapSync = uint32(1)
log.Warn("Switch sync mode from full sync to snap sync")
// Note: Ideally this should never happen with bor, but to be extra
// preventive we won't allow it to roll over to snap sync until
// we have it working

// TODO(snap): Uncomment when we have snap sync working
// h.snapSync = uint32(1)
// log.Warn("Switch sync mode from full sync to snap sync")

log.Warn("Preventing switching sync mode from full sync to snap sync")
}
} else {
if h.chain.CurrentBlock().NumberU64() > 0 {
Expand Down
43 changes: 27 additions & 16 deletions eth/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,25 +204,36 @@ func peerToSyncOp(mode downloader.SyncMode, p *eth.Peer) *chainSyncOp {
}

func (cs *chainSyncer) modeAndLocalHead() (downloader.SyncMode, *big.Int) {
// If we're in snap sync mode, return that directly
if atomic.LoadUint32(&cs.handler.snapSync) == 1 {
block := cs.handler.chain.CurrentFastBlock()
td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64())
return downloader.SnapSync, td
}
// We are probably in full sync, but we might have rewound to before the
// snap sync pivot, check if we should reenable
if pivot := rawdb.ReadLastPivotNumber(cs.handler.database); pivot != nil {
if head := cs.handler.chain.CurrentBlock(); head.NumberU64() < *pivot {
block := cs.handler.chain.CurrentFastBlock()
td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64())
return downloader.SnapSync, td
}
}
// Nope, we're really full syncing
// Note: Ideally this should never happen with bor, but to be extra
// preventive we won't allow it to roll over to snap sync until
// we have it working

// Handle full sync mode only
head := cs.handler.chain.CurrentBlock()
td := cs.handler.chain.GetTd(head.Hash(), head.NumberU64())
return downloader.FullSync, td

// TODO(snap): Uncomment when we have snap sync working

// If we're in snap sync mode, return that directly
// if atomic.LoadUint32(&cs.handler.snapSync) == 1 {
// block := cs.handler.chain.CurrentFastBlock()
// td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64())
// return downloader.SnapSync, td
// }
// // We are probably in full sync, but we might have rewound to before the
// // snap sync pivot, check if we should reenable
// if pivot := rawdb.ReadLastPivotNumber(cs.handler.database); pivot != nil {
// if head := cs.handler.chain.CurrentBlock(); head.NumberU64() < *pivot {
// block := cs.handler.chain.CurrentFastBlock()
// td := cs.handler.chain.GetTd(block.Hash(), block.NumberU64())
// return downloader.SnapSync, td
// }
// }
// // Nope, we're really full syncing
// head := cs.handler.chain.CurrentBlock()
// td := cs.handler.chain.GetTd(head.Hash(), head.NumberU64())
// return downloader.FullSync, td
}

// startSync launches doSync in a new goroutine.
Expand Down