skip migration cache correctly

This commit is contained in:
Aayush 2023-11-08 09:10:31 -05:00
parent fb3c16207f
commit ae75aa1d0d
3 changed files with 16 additions and 13 deletions

View File

@ -2064,7 +2064,7 @@ func upgradeActorsV12Fix(ctx context.Context, sm *stmgr.StateManager, cache stmg
} }
systemState.BuiltinActors = newManifest.Data systemState.BuiltinActors = newManifest.Data
newSystemHead, err := adtStore.Put(ctx, systemState) newSystemHead, err := adtStore.Put(ctx, &systemState)
if err != nil { if err != nil {
return cid.Undef, xerrors.Errorf("failed to put new system state: %w", err) return cid.Undef, xerrors.Errorf("failed to put new system state: %w", err)
} }
@ -2094,7 +2094,7 @@ func upgradeActorsV12Fix(ctx context.Context, sm *stmgr.StateManager, cache stmg
return xerrors.Errorf("mismatched address for actor %s: %s != %s", a, inActor.Address, outActor.Address) return xerrors.Errorf("mismatched address for actor %s: %s != %s", a, inActor.Address, outActor.Address)
} }
if inActor.Head != outActor.Head { if inActor.Head != outActor.Head && a != builtin.SystemActorAddr {
return xerrors.Errorf("mismatched head for actor %s", a) return xerrors.Errorf("mismatched head for actor %s", a)
} }

View File

@ -177,17 +177,19 @@ func (us UpgradeSchedule) GetNtwkVersion(e abi.ChainEpoch) (network.Version, err
func (sm *StateManager) HandleStateForks(ctx context.Context, root cid.Cid, height abi.ChainEpoch, cb ExecMonitor, ts *types.TipSet) (cid.Cid, error) { func (sm *StateManager) HandleStateForks(ctx context.Context, root cid.Cid, height abi.ChainEpoch, cb ExecMonitor, ts *types.TipSet) (cid.Cid, error) {
retCid := root retCid := root
u := sm.stateMigrations[height] u := sm.stateMigrations[height]
if u != nil && u.upgrade != nil && height != build.UpgradeWatermelonFixHeight { if u != nil && u.upgrade != nil {
migCid, ok, err := u.migrationResultCache.Get(ctx, root) if height != build.UpgradeWatermelonFixHeight {
if err == nil { migCid, ok, err := u.migrationResultCache.Get(ctx, root)
if ok { if err == nil {
log.Infow("CACHED migration", "height", height, "from", root, "to", migCid) if ok {
return migCid, nil log.Infow("CACHED migration", "height", height, "from", root, "to", migCid)
return migCid, nil
}
} else if !errors.Is(err, datastore.ErrNotFound) {
log.Errorw("failed to lookup previous migration result", "err", err)
} else {
log.Debug("no cached migration found, migrating from scratch")
} }
} else if !errors.Is(err, datastore.ErrNotFound) {
log.Errorw("failed to lookup previous migration result", "err", err)
} else {
log.Debug("no cached migration found, migrating from scratch")
} }
startTime := time.Now() startTime := time.Now()
@ -195,6 +197,7 @@ func (sm *StateManager) HandleStateForks(ctx context.Context, root cid.Cid, heig
// Yes, we clone the cache, even for the final upgrade epoch. Why? Reverts. We may // Yes, we clone the cache, even for the final upgrade epoch. Why? Reverts. We may
// have to migrate multiple times. // have to migrate multiple times.
tmpCache := u.cache.Clone() tmpCache := u.cache.Clone()
var err error
retCid, err = u.upgrade(ctx, sm, tmpCache, cb, root, height, ts) retCid, err = u.upgrade(ctx, sm, tmpCache, cb, root, height, ts)
if err != nil { if err != nil {
log.Errorw("FAILED migration", "height", height, "from", root, "error", err) log.Errorw("FAILED migration", "height", height, "from", root, "error", err)

View File

@ -57,7 +57,7 @@ func (a *SyncAPI) SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) erro
return xerrors.Errorf("loading parent block: %w", err) return xerrors.Errorf("loading parent block: %w", err)
} }
if a.SlashFilter != nil && os.Getenv("LOTUS_NO_SLASHFILTER") != "_yes_i_know_i_can_and_probably_will_lose_all_my_fil_and_power_" { if a.SlashFilter != nil && os.Getenv("LOTUS_NO_SLASHFILTER") != "_yes_i_know_i_can_and_probably_will_lose_all_my_fil_and_power_" && !build.IsNearUpgrade(blk.Header.Height, build.UpgradeWatermelonFixHeight) {
witness, fault, err := a.SlashFilter.MinedBlock(ctx, blk.Header, parent.Height) witness, fault, err := a.SlashFilter.MinedBlock(ctx, blk.Header, parent.Height)
if err != nil { if err != nil {
log.Errorf("<!!> SLASH FILTER ERRORED: %s", err) log.Errorf("<!!> SLASH FILTER ERRORED: %s", err)