stmgr: Make v2 upgrade faster

This commit is contained in:
Łukasz Magiera 2020-10-07 01:15:19 +02:00
parent f6eb530cba
commit b7c8f65af5

View File

@ -4,6 +4,9 @@ import (
"bytes" "bytes"
"context" "context"
"encoding/binary" "encoding/binary"
"github.com/filecoin-project/lotus/chain/store"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
"github.com/filecoin-project/lotus/lib/bufbstore"
"math" "math"
"github.com/filecoin-project/go-address" "github.com/filecoin-project/go-address"
@ -490,7 +493,8 @@ func UpgradeIgnition(ctx context.Context, sm *StateManager, cb ExecCallback, roo
} }
func UpgradeActorsV2(ctx context.Context, sm *StateManager, cb ExecCallback, root cid.Cid, ts *types.TipSet) (cid.Cid, error) { func UpgradeActorsV2(ctx context.Context, sm *StateManager, cb ExecCallback, root cid.Cid, ts *types.TipSet) (cid.Cid, error) {
store := sm.cs.Store(ctx) buf := bufbstore.NewTieredBstore(sm.cs.Blockstore(), bstore.NewTemporarySync())
store := store.ActorStore(ctx, buf)
epoch := ts.Height() - 1 epoch := ts.Height() - 1
@ -538,6 +542,15 @@ func UpgradeActorsV2(ctx context.Context, sm *StateManager, cb ExecCallback, roo
return cid.Undef, xerrors.Errorf("failed to load init actor after upgrade: %w", err) return cid.Undef, xerrors.Errorf("failed to load init actor after upgrade: %w", err)
} }
{
from := buf
to := buf.Read()
if err := vm.Copy(ctx, from, to, newRoot); err != nil {
return cid.Undef, xerrors.Errorf("copying migrated tree: %w", err)
}
}
return newRoot, nil return newRoot, nil
} }