mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 23:48:06 -05:00
Init sync: minor refactoring and more tests for Service (#7286)
* removes redundant code * removes redundant code * removes redundant db * removes redundant p2p * servive - test future genesis * more tests for service.Start() * service - already synced test * Merge branch 'master' into init-sync-more-service-tests * Merge branch 'master' into init-sync-more-service-tests * NewInitialSync to New (avoid stutter) * TestService_markSynced * more assertions * TestService_Resync * renames test * Merge branch 'master' into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * Merge branch 'master' into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * Merge branch 'master' into init-sync-more-service-tests * fixes e2e test * Merge branch 'init-sync-more-service-tests' of github.com:prysmaticlabs/prysm into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * Merge refs/heads/master into init-sync-more-service-tests * New -> NewInitialSync
This commit is contained in:
@@ -79,40 +79,20 @@ func (s *Service) Start() {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if flags.Get().DisableSync {
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
s.markSynced(genesis)
|
||||
log.WithField("genesisTime", genesis).Info("Due to Sync Being Disabled, entering regular sync immediately.")
|
||||
return
|
||||
}
|
||||
|
||||
if genesis.After(timeutils.Now()) {
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
log.WithField("genesisTime", genesis).Info("Chain started within the last epoch - not syncing")
|
||||
s.markSynced(genesis)
|
||||
log.WithField("genesisTime", genesis).Info("Genesis time has not arrived - not syncing")
|
||||
return
|
||||
}
|
||||
currentSlot := helpers.SlotsSince(genesis)
|
||||
if helpers.SlotToEpoch(currentSlot) == 0 {
|
||||
log.WithField("genesisTime", genesis).Info("Chain started within the last epoch - not syncing")
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
s.markSynced(genesis)
|
||||
return
|
||||
}
|
||||
s.chainStarted = true
|
||||
@@ -120,13 +100,7 @@ func (s *Service) Start() {
|
||||
// Are we already in sync, or close to it?
|
||||
if helpers.SlotToEpoch(s.chain.HeadSlot()) == helpers.SlotToEpoch(currentSlot) {
|
||||
log.Info("Already synced to the current chain head")
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
s.markSynced(genesis)
|
||||
return
|
||||
}
|
||||
s.waitForMinimumPeers()
|
||||
@@ -134,13 +108,7 @@ func (s *Service) Start() {
|
||||
panic(err)
|
||||
}
|
||||
log.Infof("Synced up to slot %d", s.chain.HeadSlot())
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
s.markSynced(genesis)
|
||||
}
|
||||
|
||||
// Stop initial sync.
|
||||
@@ -165,22 +133,21 @@ func (s *Service) Syncing() bool {
|
||||
// Resync allows a node to start syncing again if it has fallen
|
||||
// behind the current network head.
|
||||
func (s *Service) Resync() error {
|
||||
// set it to false since we are syncing again
|
||||
headState, err := s.chain.HeadState(s.ctx)
|
||||
if err != nil || headState == nil {
|
||||
return errors.Errorf("could not retrieve head state: %v", err)
|
||||
}
|
||||
|
||||
// Set it to false since we are syncing again.
|
||||
s.synced = false
|
||||
defer func() { s.synced = true }() // Reset it at the end of the method.
|
||||
headState, err := s.chain.HeadState(s.ctx)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not retrieve head state")
|
||||
}
|
||||
genesis := time.Unix(int64(headState.GenesisTime()), 0)
|
||||
|
||||
s.waitForMinimumPeers()
|
||||
err = s.roundRobinSync(genesis)
|
||||
if err != nil {
|
||||
if err = s.roundRobinSync(genesis); err != nil {
|
||||
log = log.WithError(err)
|
||||
}
|
||||
log.WithField("slot", s.chain.HeadSlot()).Info("Resync attempt complete")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -239,3 +206,14 @@ func (s *Service) waitForStateInitialization() (time.Time, error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// markSynced marks node as synced and notifies feed listeners.
|
||||
func (s *Service) markSynced(genesis time.Time) {
|
||||
s.synced = true
|
||||
s.stateNotifier.StateFeed().Send(&feed.Event{
|
||||
Type: statefeed.Synced,
|
||||
Data: &statefeed.SyncedData{
|
||||
StartTime: genesis,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user