diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-08-05 05:35:00 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-04 17:35:00 -0700 |
| commit | 4d08393b7ca8b1a34ed65532955de76cf8843ec2 (patch) | |
| tree | b764fe5f4b927d9b9cf1b83a2f19c87a91d81c8e /weed/filer/reader_at.go | |
| parent | 28a1f42962a3c22fa341d62e52ed014ae17c508f (diff) | |
| download | seaweedfs-4d08393b7ca8b1a34ed65532955de76cf8843ec2.tar.xz seaweedfs-4d08393b7ca8b1a34ed65532955de76cf8843ec2.zip | |
filer prefer volume server in same data center (#3405)
* initial prefer same data center
https://github.com/seaweedfs/seaweedfs/issues/3404
* GetDataCenter
* prefer same data center for ReplicationSource
* GetDataCenterId
* remove glog
Diffstat (limited to 'weed/filer/reader_at.go')
| -rw-r--r-- | weed/filer/reader_at.go | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/weed/filer/reader_at.go b/weed/filer/reader_at.go index 70228705b..2b3e77d1b 100644 --- a/weed/filer/reader_at.go +++ b/weed/filer/reader_at.go @@ -66,17 +66,25 @@ func LookupFn(filerClient filer_pb.FilerClient) wdclient.LookupFileIdFunctionTyp return nil, err } + fcDataCenter := filerClient.GetDataCenter() + var sameDcTargetUrls, otherTargetUrls []string for _, loc := range locations.Locations { volumeServerAddress := filerClient.AdjustedUrl(loc) targetUrl := fmt.Sprintf("http://%s/%s", volumeServerAddress, fileId) - targetUrls = append(targetUrls, targetUrl) - } - - for i := len(targetUrls) - 1; i > 0; i-- { - j := rand.Intn(i + 1) - targetUrls[i], targetUrls[j] = targetUrls[j], targetUrls[i] + if fcDataCenter == "" || fcDataCenter != loc.DataCenter { + otherTargetUrls = append(otherTargetUrls, targetUrl) + } else { + sameDcTargetUrls = append(sameDcTargetUrls, targetUrl) + } } - + rand.Shuffle(len(sameDcTargetUrls), func(i, j int) { + sameDcTargetUrls[i], sameDcTargetUrls[j] = sameDcTargetUrls[j], sameDcTargetUrls[i] + }) + rand.Shuffle(len(otherTargetUrls), func(i, j int) { + otherTargetUrls[i], otherTargetUrls[j] = otherTargetUrls[j], otherTargetUrls[i] + }) + // Prefer same data center + targetUrls = append(sameDcTargetUrls, otherTargetUrls...) return } } |
