aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/reader_at.go
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-08-05 05:35:00 +0500
committerGitHub <noreply@github.com>2022-08-04 17:35:00 -0700
commit4d08393b7ca8b1a34ed65532955de76cf8843ec2 (patch)
treeb764fe5f4b927d9b9cf1b83a2f19c87a91d81c8e /weed/filer/reader_at.go
parent28a1f42962a3c22fa341d62e52ed014ae17c508f (diff)
downloadseaweedfs-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.go22
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
}
}