diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2022-06-09 18:01:02 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-09 18:01:02 -0700 |
| commit | 37da68931941b1f084b7f4312722e4241e9ab0b0 (patch) | |
| tree | 7be00c81e7b37a264c7d231df1a2a268d9a2a362 | |
| parent | 00d53c34c44dd6442ec276f184344faa20c16db0 (diff) | |
| parent | f5b0c04b149c80cb40fda9cb1d93d9a92c826451 (diff) | |
| download | seaweedfs-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.go | 24 | ||||
| -rw-r--r-- | weed/storage/volume.go | 1 |
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 } |
