aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-04-01 22:10:09 -0700
committerChris Lu <chris.lu@gmail.com>2020-04-01 22:10:13 -0700
commitae3d08883f38de30f4a223c056f74d71486d9309 (patch)
tree53e7a1f1def444b43fe1c52b20cbbe083bf6a41e
parentc446438ca5360b8e479e77dd0da32a80bd5644d6 (diff)
downloadseaweedfs-ae3d08883f38de30f4a223c056f74d71486d9309.tar.xz
seaweedfs-ae3d08883f38de30f4a223c056f74d71486d9309.zip
volume.fsck: fix for erasure encoded volumes
fix https://github.com/chrislusf/seaweedfs/issues/1254
-rw-r--r--weed/shell/command_volume_fsck.go15
1 files changed, 10 insertions, 5 deletions
diff --git a/weed/shell/command_volume_fsck.go b/weed/shell/command_volume_fsck.go
index 41fc95653..07e2bee5b 100644
--- a/weed/shell/command_volume_fsck.go
+++ b/weed/shell/command_volume_fsck.go
@@ -68,13 +68,13 @@ func (c *commandVolumeFsck) Do(args []string, commandEnv *CommandEnv, writer io.
defer os.RemoveAll(tempFolder)
// collect all volume id locations
- volumeIdToServer, err := c.collectVolumeIds(*verbose, writer)
+ volumeIdToVInfo, err := c.collectVolumeIds(*verbose, writer)
if err != nil {
return fmt.Errorf("failed to collect all volume locations: %v", err)
}
// collect each volume file ids
- for volumeId, vinfo := range volumeIdToServer {
+ for volumeId, vinfo := range volumeIdToVInfo {
err = c.collectOneVolumeFileIds(tempFolder, volumeId, vinfo, *verbose, writer)
if err != nil {
return fmt.Errorf("failed to collect file ids from volume %d on %s: %v", volumeId, vinfo.server, err)
@@ -82,13 +82,13 @@ func (c *commandVolumeFsck) Do(args []string, commandEnv *CommandEnv, writer io.
}
// collect all filer file ids
- if err = c.collectFilerFileIds(tempFolder, volumeIdToServer, *verbose, writer); err != nil {
+ if err = c.collectFilerFileIds(tempFolder, volumeIdToVInfo, *verbose, writer); err != nil {
return fmt.Errorf("failed to collect file ids from filer: %v", err)
}
// volume file ids substract filer file ids
var totalInUseCount, totalOrphanChunkCount, totalOrphanDataSize uint64
- for volumeId, vinfo := range volumeIdToServer {
+ for volumeId, vinfo := range volumeIdToVInfo {
inUseCount, orphanFileIds, orphanDataSize, checkErr := c.oneVolumeFileIdsSubtractFilerFileIds(tempFolder, volumeId, writer, *verbose)
if checkErr != nil {
return fmt.Errorf("failed to collect file ids from volume %d on %s: %v", volumeId, vinfo.server, checkErr)
@@ -131,9 +131,14 @@ func (c *commandVolumeFsck) collectOneVolumeFileIds(tempFolder string, volumeId
return operation.WithVolumeServerClient(vinfo.server, c.env.option.GrpcDialOption, func(volumeServerClient volume_server_pb.VolumeServerClient) error {
+ ext := ".idx"
+ if vinfo.isEcVolume {
+ ext = ".ecx"
+ }
+
copyFileClient, err := volumeServerClient.CopyFile(context.Background(), &volume_server_pb.CopyFileRequest{
VolumeId: volumeId,
- Ext: ".idx",
+ Ext: ext,
CompactionRevision: math.MaxUint32,
StopOffset: math.MaxInt64,
Collection: vinfo.collection,