diff --git a/weed/shell/command_ec_encode.go b/weed/shell/command_ec_encode.go index da0a94f0f..e341f7828 100644 --- a/weed/shell/command_ec_encode.go +++ b/weed/shell/command_ec_encode.go @@ -143,6 +143,7 @@ func doEcEncode(commandEnv *CommandEnv, collection string, vid needle.VolumeId, if !found { return fmt.Errorf("volume %d not found", vid) } + target := locations[0] // mark the volume as readonly ewg = NewErrorWaitGroup(maxParallelization) @@ -159,8 +160,8 @@ func doEcEncode(commandEnv *CommandEnv, collection string, vid needle.VolumeId, } // generate ec shards - if err := generateEcShards(commandEnv.option.GrpcDialOption, vid, collection, locations[0].ServerAddress()); err != nil { - return fmt.Errorf("generate ec shards for volume %d on %s: %v", vid, locations[0].Url, err) + if err := generateEcShards(commandEnv.option.GrpcDialOption, vid, collection, target.ServerAddress()); err != nil { + return fmt.Errorf("generate ec shards for volume %d on %s: %v", vid, target.Url, err) } // ask the source volume server to delete the original volume @@ -178,6 +179,15 @@ func doEcEncode(commandEnv *CommandEnv, collection string, vid needle.VolumeId, return err } + // mount all ec shards for the converted volume + shardIds := make([]uint32, erasure_coding.TotalShardsCount) + for i := range shardIds { + shardIds[i] = uint32(i) + } + if err := mountEcShards(commandEnv.option.GrpcDialOption, collection, vid, target.ServerAddress(), shardIds); err != nil { + return fmt.Errorf("mount ec shards for volume %d on %s: %v", vid, target.Url, err) + } + return nil }