(t *testing.T)
| 28 | ) |
| 29 | |
| 30 | func TestMigrateGenTasklets(t *testing.T) { |
| 31 | mode := codemode.EC6P10L2 |
| 32 | replicas := genMockVol(100, codemode.CodeMode(mode)) |
| 33 | badi := 10 |
| 34 | godi := 11 |
| 35 | balanceTask := &proto.MigrateTask{ |
| 36 | TaskID: "mock_balance_task_id", |
| 37 | TaskType: proto.TaskTypeBalance, |
| 38 | CodeMode: codemode.CodeMode(mode), |
| 39 | Sources: replicas, |
| 40 | Destination: replicas[badi], |
| 41 | SourceVuid: replicas[badi].Vuid, |
| 42 | } |
| 43 | bids := []proto.BlobID{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} |
| 44 | sizes := []int64{1024, 2048, 0, 512, 23, 65, 12, 50, 100, 2047} |
| 45 | markDeleteBidIndex := 9 |
| 46 | bidsMap := make(map[proto.BlobID]int64, len(bids)) |
| 47 | for idx := range bids { |
| 48 | bidsMap[bids[idx]] = sizes[idx] |
| 49 | } |
| 50 | |
| 51 | workutils.TaskBufPool = workutils.NewBufPool(&workutils.BufConfig{ |
| 52 | MigrateBufSize: 2 * 1024, |
| 53 | MigrateBufCapacity: 10, |
| 54 | RepairBufSize: 1, |
| 55 | RepairBufCapacity: 1, |
| 56 | }) |
| 57 | getter := NewMockGetterWithBids(replicas, codemode.CodeMode(mode), bids, sizes) |
| 58 | w := NewMigrateWorker(MigrateTaskEx{taskInfo: balanceTask, blobNodeCli: getter, downloadShardConcurrency: 1}) |
| 59 | |
| 60 | tasklets, _ := w.GenTasklets(context.Background()) |
| 61 | require.Equal(t, 0, len(tasklets)) |
| 62 | |
| 63 | getter.setFail(replicas[badi].Vuid, errors.New("fake error")) |
| 64 | _, err := w.GenTasklets(context.Background()) |
| 65 | require.Equal(t, DstErr, err.errType) |
| 66 | |
| 67 | { |
| 68 | getter.setWell(replicas[badi].Vuid) |
| 69 | shards, _ := getter.ListShards(context.Background(), replicas[badi]) |
| 70 | for _, shard := range shards { |
| 71 | getter.Delete(context.Background(), balanceTask.SourceVuid, shard.Bid) |
| 72 | } |
| 73 | tasklets, _ = w.GenTasklets(context.Background()) |
| 74 | require.Equal(t, 4, len(tasklets)) |
| 75 | var bids []*ShardInfoSimple |
| 76 | for _, tasklet := range tasklets { |
| 77 | var size int64 = 0 |
| 78 | for _, bid := range tasklet.bids { |
| 79 | size += bid.Size |
| 80 | } |
| 81 | bids = append(bids, tasklet.bids...) |
| 82 | require.LessOrEqual(t, size, int64(workutils.TaskBufPool.GetMigrateBufSize())) |
| 83 | } |
| 84 | |
| 85 | for _, bid := range bids { |
| 86 | require.Equal(t, bidsMap[bid.Bid], bid.Size) |
| 87 | } |
nothing calls this directly
no test coverage detected