aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-06-03 00:13:31 -0700
committerChris Lu <chris.lu@gmail.com>2019-06-03 00:13:31 -0700
commit55be09996d8f82e461e1c464db82707c982b2b57 (patch)
treebd5564d5460ff76b610650e9979019bf2afcfb99
parent9ce6b949bf778e16cbf0f2e73ad508c65c3c8fc3 (diff)
downloadseaweedfs-55be09996d8f82e461e1c464db82707c982b2b57.tar.xz
seaweedfs-55be09996d8f82e461e1c464db82707c982b2b57.zip
fix volume balance bug
-rw-r--r--weed/server/volume_grpc_copy.go12
-rw-r--r--weed/shell/command_volume_balance.go3
2 files changed, 10 insertions, 5 deletions
diff --git a/weed/server/volume_grpc_copy.go b/weed/server/volume_grpc_copy.go
index 186c378ef..20778b71f 100644
--- a/weed/server/volume_grpc_copy.go
+++ b/weed/server/volume_grpc_copy.go
@@ -49,7 +49,7 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo
return fmt.Errorf("read volume file status failed, %v", err)
}
- volumeFileName = storage.VolumeFileName(volFileInfoResp.Collection, location.Directory, int(req.VolumeId))
+ volumeFileName = storage.VolumeFileName(location.Directory, volFileInfoResp.Collection, int(req.VolumeId))
// println("source:", volFileInfoResp.String())
// copy ecx file
@@ -63,6 +63,10 @@ func (vs *VolumeServer) VolumeCopy(ctx context.Context, req *volume_server_pb.Vo
return nil
})
+
+ idxFileName = volumeFileName + ".idx"
+ datFileName = volumeFileName + ".dat"
+
if err != nil && volumeFileName != "" {
if idxFileName != "" {
os.Remove(idxFileName)
@@ -117,11 +121,11 @@ todo: maybe should check the received count and deleted count of the volume
func checkCopyFiles(originFileInf *volume_server_pb.ReadVolumeFileStatusResponse, idxFileName, datFileName string) error {
stat, err := os.Stat(idxFileName)
if err != nil {
- return fmt.Errorf("get idx file info failed, %v", err)
+ return fmt.Errorf("stat idx file %s failed, %v", idxFileName, err)
}
if originFileInf.IdxFileSize != uint64(stat.Size()) {
- return fmt.Errorf("the idx file size [%v] is not same as origin file size [%v]",
- stat.Size(), originFileInf.IdxFileSize)
+ return fmt.Errorf("idx file %s size [%v] is not same as origin file size [%v]",
+ idxFileName, stat.Size(), originFileInf.IdxFileSize)
}
stat, err = os.Stat(datFileName)
diff --git a/weed/shell/command_volume_balance.go b/weed/shell/command_volume_balance.go
index f440dc5d2..2a5731333 100644
--- a/weed/shell/command_volume_balance.go
+++ b/weed/shell/command_volume_balance.go
@@ -5,6 +5,7 @@ import (
"flag"
"fmt"
"io"
+ "math"
"os"
"sort"
"time"
@@ -186,7 +187,7 @@ func balanceSelectedVolume(commandEnv *commandEnv, nodes []*Node, sortCandidates
selectedVolumeCount += len(dn.selectedVolumes)
}
- idealSelectedVolumes := selectedVolumeCount / len(nodes)
+ idealSelectedVolumes := int(math.Ceil(float64(selectedVolumeCount) / float64(len(nodes))))
hasMove := true