correct count for free ec slots, avoid removing generated shards

This commit is contained in:
Chris Lu 2019-06-04 01:49:51 -07:00
parent 6cea23d091
commit 06133ae98f
2 changed files with 5 additions and 9 deletions

View file

@ -256,6 +256,7 @@ func pickOneEcNodeAndMoveOneShard(ctx context.Context, commandEnv *commandEnv, a
}
destEcNode.freeEcSlot--
existingLocation.freeEcSlot++
return nil
}

View file

@ -144,23 +144,18 @@ func rebuildOneEcVolume(ctx context.Context, commandEnv *commandEnv, rebuilder *
fmt.Fprintf(writer, "%s delete copied ec shards %s %d.%v\n", rebuilder.info.Id, collection, volumeId, copiedShardIds)
}
// ask the rebuilder to delete the copied shards
err = sourceServerDeleteEcShards(ctx, commandEnv.option.GrpcDialOption, collection, volumeId, rebuilder.info.Id, generatedShardIds)
if err != nil {
fmt.Fprintf(writer, "%s delete generated ec shards %s %d.%v\n", rebuilder.info.Id, collection, volumeId, generatedShardIds)
}
}()
if !applyChanges {
return nil
}
// generate ec shards, and maybe ecx file, and mount them
// generate ec shards, and maybe ecx file
generatedShardIds, err = generateMissingShards(ctx, commandEnv.option.GrpcDialOption, collection, volumeId, rebuilder.info.Id)
if err != nil {
return err
}
rebuilder.freeEcSlot -= len(generatedShardIds)
// mount the generated shards
err = mountEcShards(ctx, commandEnv.option.GrpcDialOption, collection, volumeId, rebuilder.info.Id, generatedShardIds)
@ -205,14 +200,14 @@ func prepareDataToRecover(ctx context.Context, commandEnv *commandEnv, rebuilder
continue
}
if localShardBits.HasShardId(erasure_coding.ShardId(shardId)){
if localShardBits.HasShardId(erasure_coding.ShardId(shardId)) {
localShardIds = append(localShardIds, uint32(shardId))
fmt.Fprintf(writer, "use existing shard %d.%d\n", volumeId, shardId)
continue
}
var copyErr error
if applyBalancing{
if applyBalancing {
copyErr = operation.WithVolumeServerClient(rebuilder.info.Id, commandEnv.option.GrpcDialOption, func(volumeServerClient volume_server_pb.VolumeServerClient) error {
_, copyErr := volumeServerClient.VolumeEcShardsCopy(ctx, &volume_server_pb.VolumeEcShardsCopyRequest{
VolumeId: uint32(volumeId),