github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/migration/nv12/test/parallel_migration_test.go (about)

     1  package test_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/filecoin-project/go-state-types/abi"
     8  	ipld2 "github.com/filecoin-project/specs-actors/v2/support/ipld"
     9  	vm3 "github.com/filecoin-project/specs-actors/v3/support/vm"
    10  	"github.com/filecoin-project/specs-actors/v4/actors/migration/nv12"
    11  	adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt"
    12  	cbor "github.com/ipfs/go-ipld-cbor"
    13  
    14  	"github.com/ipfs/go-cid"
    15  	"github.com/stretchr/testify/assert"
    16  	"github.com/stretchr/testify/require"
    17  	"golang.org/x/sync/errgroup"
    18  )
    19  
    20  func TestParallelMigrationCalls(t *testing.T) {
    21  	// Construct simple prior state tree over a synchronized store
    22  	ctx := context.Background()
    23  	log := nv12.TestLogger{TB: t}
    24  	bs := ipld2.NewSyncBlockStoreInMemory()
    25  	vm := vm3.NewVMWithSingletons(ctx, t, bs)
    26  
    27  	// Run migration
    28  	adtStore := adt4.WrapStore(ctx, cbor.NewCborStore(bs))
    29  	startRoot := vm.StateRoot()
    30  	endRootSerial, err := nv12.MigrateStateTree(ctx, adtStore, startRoot, abi.ChainEpoch(0), nv12.Config{MaxWorkers: 1}, log, nv12.NewMemMigrationCache())
    31  	require.NoError(t, err)
    32  
    33  	// Migrate in parallel
    34  	var endRootParallel1, endRootParallel2 cid.Cid
    35  	grp, ctx := errgroup.WithContext(ctx)
    36  	grp.Go(func() error {
    37  		var err1 error
    38  		endRootParallel1, err1 = nv12.MigrateStateTree(ctx, adtStore, startRoot, abi.ChainEpoch(0), nv12.Config{MaxWorkers: 2}, log, nv12.NewMemMigrationCache())
    39  		return err1
    40  	})
    41  	grp.Go(func() error {
    42  		var err2 error
    43  		endRootParallel2, err2 = nv12.MigrateStateTree(ctx, adtStore, startRoot, abi.ChainEpoch(0), nv12.Config{MaxWorkers: 2}, log, nv12.NewMemMigrationCache())
    44  		return err2
    45  	})
    46  	require.NoError(t, grp.Wait())
    47  	assert.Equal(t, endRootSerial, endRootParallel1)
    48  	assert.Equal(t, endRootParallel1, endRootParallel2)
    49  }