Skip to content

Commit

Permalink
volume: avoid reprocessing the same volume
Browse files Browse the repository at this point in the history
fix #1682
  • Loading branch information
chrislusf committed Dec 17, 2020
1 parent 986cbdf commit e207620
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions weed/storage/disk_location.go
Expand Up @@ -53,7 +53,7 @@ func NewDiskLocation(dir string, maxVolumeCount int, minFreeSpacePercent float32
}

func volumeIdFromFileName(filename string) (needle.VolumeId, string, error) {
if strings.HasSuffix(filename, ".idx") || strings.HasSuffix(filename, ".vif") {
if isValidVolume(filename) {
base := filename[:len(filename)-4]
collection, volumeId, err := parseCollectionVolumeId(base)
return volumeId, collection, err
Expand All @@ -71,15 +71,26 @@ func parseCollectionVolumeId(base string) (collection string, vid needle.VolumeI
return collection, vol, err
}

func isValidVolume(basename string) bool {
return strings.HasSuffix(basename, ".idx") || strings.HasSuffix(basename, ".vif")
}

func getValidVolumeName(basename string) string {
if isValidVolume(basename) {
return basename[:len(basename)-4]
}
return ""
}

func (l *DiskLocation) loadExistingVolume(fileInfo os.FileInfo, needleMapKind NeedleMapType) bool {
basename := fileInfo.Name()
if fileInfo.IsDir() {
return false
}
if !strings.HasSuffix(basename, ".idx") && !strings.HasSuffix(basename, ".vif") {
volumeName := getValidVolumeName(basename)
if volumeName == "" {
return false
}
volumeName := basename[:len(basename)-4]

// check for incomplete volume
noteFile := l.Directory + "/" + volumeName + ".note"
Expand Down Expand Up @@ -126,9 +137,17 @@ func (l *DiskLocation) concurrentLoadingVolumes(needleMapKind NeedleMapType, con

task_queue := make(chan os.FileInfo, 10*concurrency)
go func() {
foundVolumeNames := make(map[string]bool)
if fileInfos, err := ioutil.ReadDir(l.Directory); err == nil {
for _, fi := range fileInfos {
task_queue <- fi
volumeName := getValidVolumeName(fi.Name())
if volumeName == "" {
continue
}
if _, found := foundVolumeNames[volumeName]; !found {
foundVolumeNames[volumeName] = true
task_queue <- fi
}
}
}
close(task_queue)
Expand Down

0 comments on commit e207620

Please sign in to comment.