diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-12-17 13:05:20 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-12-17 13:05:20 -0800 |
| commit | daa8157fc2afc7c4caa1f8c04bc06c1fb32b193f (patch) | |
| tree | 5b0c367299e31b7db974663f9bed57e0c526b9e8 /weed/storage/disk_location.go | |
| parent | f56e6d231e86ff1ca5fefcda220012ee121c88a5 (diff) | |
| parent | e2076201d79e84df0407a9e1e535bf966452bba0 (diff) | |
| download | seaweedfs-daa8157fc2afc7c4caa1f8c04bc06c1fb32b193f.tar.xz seaweedfs-daa8157fc2afc7c4caa1f8c04bc06c1fb32b193f.zip | |
Merge branch 'master' into support_ssd_volume
Diffstat (limited to 'weed/storage/disk_location.go')
| -rw-r--r-- | weed/storage/disk_location.go | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/weed/storage/disk_location.go b/weed/storage/disk_location.go index 6623c0111..ce42232a7 100644 --- a/weed/storage/disk_location.go +++ b/weed/storage/disk_location.go @@ -55,7 +55,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 @@ -73,15 +73,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" @@ -128,9 +139,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) |
