diff --git a/weed/server/volume_grpc_copy.go b/weed/server/volume_grpc_copy.go index 393ea357d..96ea8c3b5 100644 --- a/weed/server/volume_grpc_copy.go +++ b/weed/server/volume_grpc_copy.go @@ -6,12 +6,14 @@ import ( "io" "math" "os" + "path" "time" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/operation" "github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb" "github.com/chrislusf/seaweedfs/weed/storage" + "github.com/chrislusf/seaweedfs/weed/storage/erasure_coding" "github.com/chrislusf/seaweedfs/weed/storage/needle" "github.com/chrislusf/seaweedfs/weed/util" ) @@ -199,11 +201,16 @@ func (vs *VolumeServer) CopyFile(req *volume_server_pb.CopyFileRequest, stream v } fileName = v.FileName() + req.Ext } else { - ecv, found := vs.store.FindEcVolume(needle.VolumeId(req.VolumeId)) - if !found { - return fmt.Errorf("not found ec volume id %d", req.VolumeId) + baseFileName := erasure_coding.EcShardBaseFileName(req.Collection, int(req.VolumeId)) + req.Ext + for _, location := range vs.store.Locations { + tName := path.Join(location.Directory, baseFileName) + if util.FileExists(tName){ + fileName = tName + } + } + if fileName == "" { + return fmt.Errorf("CopyFile not found ec volume id %d", req.VolumeId) } - fileName = ecv.FileName() + req.Ext } bytesToRead := int64(req.StopOffset) diff --git a/weed/server/volume_grpc_erasure_coding.go b/weed/server/volume_grpc_erasure_coding.go index da2146ccb..5568596a9 100644 --- a/weed/server/volume_grpc_erasure_coding.go +++ b/weed/server/volume_grpc_erasure_coding.go @@ -200,7 +200,7 @@ func (vs *VolumeServer) VolumeEcShardRead(req *volume_server_pb.VolumeEcShardRea ecVolume, found := vs.store.FindEcVolume(needle.VolumeId(req.VolumeId)) if !found { - return fmt.Errorf("not found ec volume id %d", req.VolumeId) + return fmt.Errorf("VolumeEcShardRead not found ec volume id %d", req.VolumeId) } ecShard, found := ecVolume.FindEcVolumeShard(erasure_coding.ShardId(req.ShardId)) if !found { diff --git a/weed/shell/command_ec_common.go b/weed/shell/command_ec_common.go index 0cbf694cd..b5560b560 100644 --- a/weed/shell/command_ec_common.go +++ b/weed/shell/command_ec_common.go @@ -62,7 +62,7 @@ func oneServerCopyAndMountEcShardsFromSource(ctx context.Context, grpcDialOption SourceDataNode: existingLocation, }) if copyErr != nil { - return copyErr + return fmt.Errorf("copy %d.%v %s => %s : %v\n", volumeId, shardIdsToCopy, existingLocation, targetServer.info.Id, copyErr) } } @@ -73,7 +73,7 @@ func oneServerCopyAndMountEcShardsFromSource(ctx context.Context, grpcDialOption ShardIds: shardIdsToCopy, }) if mountErr != nil { - return mountErr + return fmt.Errorf("mount %d.%v on %s : %v\n", volumeId, shardIdsToCopy, targetServer.info.Id, mountErr) } if targetServer.info.Id != existingLocation { diff --git a/weed/shell/command_ec_encode.go b/weed/shell/command_ec_encode.go index 94265a874..f84fcf303 100644 --- a/weed/shell/command_ec_encode.go +++ b/weed/shell/command_ec_encode.go @@ -97,7 +97,7 @@ func doEcEncode(ctx context.Context, commandEnv *commandEnv, collection string, // balance the ec shards to current cluster err = spreadEcShards(ctx, commandEnv, vid, collection, locations) if err != nil { - return fmt.Errorf("spread ec shards for volume %d to %s: %v", vid, locations[0].Url, err) + return fmt.Errorf("spread ec shards for volume %d from %s: %v", vid, locations[0].Url, err) } return nil