aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-06-03 10:38:21 -0700
committerChris Lu <chris.lu@gmail.com>2019-06-03 10:38:21 -0700
commitd85b41b9048cb336265298e47789838f7a5e597c (patch)
tree30cc3668eaa12cd42ad46941636242b688434783
parent7e80b2b8823a9bb8bac58100a76d6a5825c94be4 (diff)
downloadseaweedfs-d85b41b9048cb336265298e47789838f7a5e597c.tar.xz
seaweedfs-d85b41b9048cb336265298e47789838f7a5e597c.zip
fix ec.encode not finding the local ec shards
-rw-r--r--weed/server/volume_grpc_copy.go15
-rw-r--r--weed/server/volume_grpc_erasure_coding.go2
-rw-r--r--weed/shell/command_ec_common.go4
-rw-r--r--weed/shell/command_ec_encode.go2
4 files changed, 15 insertions, 8 deletions
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