aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/command/fix.go86
1 files changed, 43 insertions, 43 deletions
diff --git a/weed/command/fix.go b/weed/command/fix.go
index bff9416a0..d19496a79 100644
--- a/weed/command/fix.go
+++ b/weed/command/fix.go
@@ -22,14 +22,13 @@ func init() {
}
var cmdFix = &Command{
- UsageLine: "fix -path=/tmp [-volumeId=234] [-collection=bigData]",
- Short: "run weed tool fix to recreate index file(s) if corrupted",
- Long: `Fix runs the SeaweedFS fix command on dat files to re-create the index .idx file.
+ UsageLine: "fix [-volumeId=234] [-collection=bigData] /tmp",
+ Short: "run weed tool fix on files or whole folders to recreate index file(s) if corrupted",
+ Long: `Fix runs the SeaweedFS fix command on dat files or whole folders to re-create the index .idx file.
`,
}
var (
- fixVolumePath = cmdFix.Flag.String("path", ".", "path to an individual .dat file or a folder of dat files")
fixVolumeCollection = cmdFix.Flag.String("collection", "", "an optional volume collection name, if specified only it will be processed")
fixVolumeId = cmdFix.Flag.Int64("volumeId", 0, "an optional volume id, if not 0 (default) only it will be processed")
)
@@ -61,51 +60,52 @@ func (scanner *VolumeFileScanner4Fix) VisitNeedle(n *needle.Needle, offset int64
}
func runFix(cmd *Command, args []string) bool {
- basePath, f := path.Split(util.ResolvePath(*fixVolumePath))
-
- files := []fs.DirEntry{}
- if f == "" {
- fileInfo, err := os.ReadDir(basePath + f)
- if err != nil {
- fmt.Println(err)
- return false
- }
- files = fileInfo
- } else {
- fileInfo, err := os.Stat(basePath + f)
- if err != nil {
- fmt.Println(err)
- return false
+ for _, arg := range args {
+ basePath, f := path.Split(util.ResolvePath(arg))
+
+ files := []fs.DirEntry{}
+ if f == "" {
+ fileInfo, err := os.ReadDir(basePath)
+ if err != nil {
+ fmt.Println(err)
+ return false
+ }
+ files = fileInfo
+ } else {
+ fileInfo, err := os.Stat(basePath + f)
+ if err != nil {
+ fmt.Println(err)
+ return false
+ }
+ files = []fs.DirEntry{fs.FileInfoToDirEntry(fileInfo)}
}
- files = []fs.DirEntry{fs.FileInfoToDirEntry(fileInfo)}
- }
- for _, file := range files {
- if !strings.HasSuffix(file.Name(), ".dat") {
- continue
- }
- if *fixVolumeCollection != "" {
- if !strings.HasPrefix(file.Name(), *fixVolumeCollection+"_") {
+ for _, file := range files {
+ if !strings.HasSuffix(file.Name(), ".dat") {
continue
}
+ if *fixVolumeCollection != "" {
+ if !strings.HasPrefix(file.Name(), *fixVolumeCollection+"_") {
+ continue
+ }
+ }
+ baseFileName := file.Name()[:len(file.Name())-4]
+ collection, volumeIdStr := "", baseFileName
+ if sepIndex := strings.LastIndex(baseFileName, "_"); sepIndex > 0 {
+ collection = baseFileName[:sepIndex]
+ volumeIdStr = baseFileName[sepIndex+1:]
+ }
+ volumeId, parseErr := strconv.ParseInt(volumeIdStr, 10, 64)
+ if parseErr != nil {
+ fmt.Printf("Failed to parse volume id from %s: %v\n", baseFileName, parseErr)
+ return false
+ }
+ if *fixVolumeId != 0 && *fixVolumeId != volumeId {
+ continue
+ }
+ doFixOneVolume(basePath, baseFileName, collection, volumeId)
}
- baseFileName := file.Name()[:len(file.Name())-4]
- collection, volumeIdStr := "", baseFileName
- if sepIndex := strings.LastIndex(baseFileName, "_"); sepIndex > 0 {
- collection = baseFileName[:sepIndex]
- volumeIdStr = baseFileName[sepIndex+1:]
- }
- volumeId, parseErr := strconv.ParseInt(volumeIdStr, 10, 64)
- if parseErr != nil {
- fmt.Printf("Failed to parse volume id from %s: %v\n", baseFileName, parseErr)
- return false
- }
- if *fixVolumeId != 0 && *fixVolumeId != volumeId {
- continue
- }
- doFixOneVolume(basePath, baseFileName, collection, volumeId)
}
-
return true
}