avoid duplicated volume directory
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/needle"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/types"
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type DiskLocation struct {
|
||||
@@ -33,6 +34,29 @@ type DiskLocation struct {
|
||||
isDiskSpaceLow bool
|
||||
}
|
||||
|
||||
func GenerateDirUUID(dir string) (dirUUIDString string, err error) {
|
||||
glog.V(1).Infof("Getting UUID of volume directory:%s", dir)
|
||||
dirUUIDString = ""
|
||||
fileName := dir + "/volume.uuid"
|
||||
if !util.FileExists(fileName) {
|
||||
dirUUID, _ := uuid.NewRandom()
|
||||
dirUUIDString = dirUUID.String()
|
||||
writeErr := util.WriteFile(fileName, []byte(dirUUIDString), 0644)
|
||||
if writeErr != nil {
|
||||
glog.Warningf("failed to write UUID to %s : %v", fileName, writeErr)
|
||||
return "", fmt.Errorf("failed to write UUID to %s : %v", fileName, writeErr)
|
||||
}
|
||||
} else {
|
||||
uuidData, readErr := os.ReadFile(fileName)
|
||||
if readErr != nil {
|
||||
glog.Warningf("failed to read UUID from %s : %v", fileName, readErr)
|
||||
return "", fmt.Errorf("failed to read UUID from %s : %v", fileName, readErr)
|
||||
}
|
||||
dirUUIDString = string(uuidData)
|
||||
}
|
||||
return dirUUIDString, nil
|
||||
}
|
||||
|
||||
func NewDiskLocation(dir string, maxVolumeCount int, minFreeSpace util.MinFreeSpace, idxDir string, diskType types.DiskType) *DiskLocation {
|
||||
dir = util.ResolvePath(dir)
|
||||
if idxDir == "" {
|
||||
|
||||
@@ -2,13 +2,14 @@ package storage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/volume_info"
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/pb"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/volume_info"
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||
@@ -40,6 +41,7 @@ type Store struct {
|
||||
GrpcPort int
|
||||
PublicUrl string
|
||||
Locations []*DiskLocation
|
||||
LocationUUIDs []string
|
||||
dataCenter string // optional informaton, overwriting master setting if exists
|
||||
rack string // optional information, overwriting master setting if exists
|
||||
connected bool
|
||||
@@ -64,6 +66,8 @@ func NewStore(grpcDialOption grpc.DialOption, ip string, port int, grpcPort int,
|
||||
location := NewDiskLocation(dirnames[i], maxVolumeCounts[i], minFreeSpaces[i], idxFolder, diskTypes[i])
|
||||
location.loadExistingVolumes(needleMapKind)
|
||||
s.Locations = append(s.Locations, location)
|
||||
dirUUID, _ := GenerateDirUUID(dirnames[i])
|
||||
s.LocationUUIDs = append(s.LocationUUIDs, dirUUID)
|
||||
stats.VolumeServerMaxVolumeCounter.Add(float64(maxVolumeCounts[i]))
|
||||
}
|
||||
s.NewVolumesChan = make(chan master_pb.VolumeShortInformationMessage, 3)
|
||||
@@ -300,6 +304,11 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
|
||||
}
|
||||
}
|
||||
|
||||
var UUIDList []string
|
||||
for _, locationUUID := range s.LocationUUIDs {
|
||||
UUIDList = append(UUIDList, locationUUID)
|
||||
}
|
||||
|
||||
for col, size := range collectionVolumeSize {
|
||||
stats.VolumeServerDiskSizeGauge.WithLabelValues(col, "normal").Set(float64(size))
|
||||
}
|
||||
@@ -321,6 +330,7 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
|
||||
Rack: s.rack,
|
||||
Volumes: volumeMessages,
|
||||
HasNoVolumes: len(volumeMessages) == 0,
|
||||
LocationUUIDs: UUIDList,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,10 +3,11 @@ package storage
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/util"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/backend"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/needle"
|
||||
|
||||
Reference in New Issue
Block a user