aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2024-09-03 22:30:11 -0700
committerchrislu <chris.lu@gmail.com>2024-09-03 22:30:11 -0700
commit8d5a6d7e74eba7f63ce6466033d24e66d19ddd32 (patch)
treed22b98b43f8efbee716bcb1da0296e4d9dbcf1d4
parent8e4bffc66b212a44a57dd03ee6c5869e921069ad (diff)
downloadseaweedfs-8d5a6d7e74eba7f63ce6466033d24e66d19ddd32.tar.xz
seaweedfs-8d5a6d7e74eba7f63ce6466033d24e66d19ddd32.zip
fix for spreading ec shards
-rw-r--r--weed/server/volume_grpc_erasure_coding.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/weed/server/volume_grpc_erasure_coding.go b/weed/server/volume_grpc_erasure_coding.go
index 546bf8109..dd51894c5 100644
--- a/weed/server/volume_grpc_erasure_coding.go
+++ b/weed/server/volume_grpc_erasure_coding.go
@@ -143,10 +143,17 @@ func (vs *VolumeServer) VolumeEcShardsCopy(ctx context.Context, req *volume_serv
glog.V(0).Infof("VolumeEcShardsCopy: %v", req)
- location := vs.store.FindFreeLocation(func(location *storage.DiskLocation) bool {
- _, found := location.FindEcVolume(needle.VolumeId(req.VolumeId))
- return found
- })
+ var location *storage.DiskLocation
+ if req.CopyEcxFile {
+ location = vs.store.FindFreeLocation(func(location *storage.DiskLocation) bool {
+ return location.DiskType == types.HardDriveType
+ })
+ } else {
+ location = vs.store.FindFreeLocation(func(location *storage.DiskLocation) bool {
+ _, found := location.FindEcVolume(needle.VolumeId(req.VolumeId))
+ return found
+ })
+ }
if location == nil {
return nil, fmt.Errorf("no space left")
}