aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2022-06-09 18:01:02 -0700
committerGitHub <noreply@github.com>2022-06-09 18:01:02 -0700
commit37da68931941b1f084b7f4312722e4241e9ab0b0 (patch)
tree7be00c81e7b37a264c7d231df1a2a268d9a2a362
parent00d53c34c44dd6442ec276f184344faa20c16db0 (diff)
parentf5b0c04b149c80cb40fda9cb1d93d9a92c826451 (diff)
downloadseaweedfs-37da68931941b1f084b7f4312722e4241e9ab0b0.tar.xz
seaweedfs-37da68931941b1f084b7f4312722e4241e9ab0b0.zip
Merge pull request #3159 from shichanglin5/_duplicateUUID
perf: Optimized volume handling duplicateUUID logic to avoid quitting…
-rw-r--r--weed/server/volume_grpc_client_to_master.go24
-rw-r--r--weed/storage/volume.go1
2 files changed, 19 insertions, 6 deletions
diff --git a/weed/server/volume_grpc_client_to_master.go b/weed/server/volume_grpc_client_to_master.go
index d4f3b2853..a7b75d6a5 100644
--- a/weed/server/volume_grpc_client_to_master.go
+++ b/weed/server/volume_grpc_client_to_master.go
@@ -119,16 +119,30 @@ func (vs *VolumeServer) doHeartbeat(masterAddress pb.ServerAddress, grpcDialOpti
return
}
if len(in.DuplicatedUuids) > 0 {
- var duplictedDir []string
+ var duplicatedDir []string
+
+ foundDuplicate := false
+ duplicateSet := make(map[string]struct{})
for _, loc := range vs.store.Locations {
+ directoryUuid := loc.DirectoryUuid
+ if _, exists := duplicateSet[directoryUuid]; !exists {
+ duplicateSet[directoryUuid] = struct{}{}
+ } else {
+ foundDuplicate = true
+ }
+
for _, uuid := range in.DuplicatedUuids {
- if uuid == loc.DirectoryUuid {
- duplictedDir = append(duplictedDir, loc.Directory)
+ if uuid == directoryUuid {
+ duplicatedDir = append(duplicatedDir, loc.Directory)
}
}
}
- glog.Errorf("Shut down Volume Server due to duplicated volume directories: %v", duplictedDir)
- os.Exit(1)
+ if foundDuplicate {
+ glog.Errorf("Shut down Volume Server due to duplicated volume directories: %v", duplicatedDir)
+ os.Exit(1)
+ } else {
+ glog.Warningf("Receive response of duplicated volume directories: %v, ignored(the check found no duplicates)", duplicatedDir)
+ }
}
if in.GetVolumeSizeLimit() != 0 && vs.store.GetVolumeSizeLimit() != in.GetVolumeSizeLimit() {
vs.store.SetVolumeSizeLimit(in.GetVolumeSizeLimit())
diff --git a/weed/storage/volume.go b/weed/storage/volume.go
index 3539efa85..fc77fa63a 100644
--- a/weed/storage/volume.go
+++ b/weed/storage/volume.go
@@ -293,7 +293,6 @@ func (v *Volume) collectStatus() (maxFileKey types.NeedleId, datFileSize int64,
fileCount = uint64(v.nm.FileCount())
deletedCount = uint64(v.nm.DeletedCount())
deletedSize = v.nm.DeletedSize()
- fileCount = uint64(v.nm.FileCount())
return
}