diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-11-12 11:30:11 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-11-12 11:30:11 -0800 |
| commit | 7bf891c00a8258ee40db46d302b0be1cc5a1d7d4 (patch) | |
| tree | 10b47f9d67c78c70f4849749e4624f6029f78bee | |
| parent | 1f75f1f9dc19f74a76028420a724a4ab984c4b3d (diff) | |
| download | seaweedfs-7bf891c00a8258ee40db46d302b0be1cc5a1d7d4.tar.xz seaweedfs-7bf891c00a8258ee40db46d302b0be1cc5a1d7d4.zip | |
randomize same-dc servers and other-dc servers
| -rw-r--r-- | weed/filer/filechunk_manifest.go | 4 | ||||
| -rw-r--r-- | weed/wdclient/vid_map.go | 13 |
2 files changed, 11 insertions, 6 deletions
diff --git a/weed/filer/filechunk_manifest.go b/weed/filer/filechunk_manifest.go index 023d9e04a..32008271b 100644 --- a/weed/filer/filechunk_manifest.go +++ b/weed/filer/filechunk_manifest.go @@ -6,7 +6,6 @@ import ( "github.com/chrislusf/seaweedfs/weed/wdclient" "io" "math" - "math/rand" "net/url" "strings" "time" @@ -143,9 +142,6 @@ func retriedStreamFetchChunkData(writer io.Writer, urlStrings []string, cipherKe var shouldRetry bool var totalWritten int - rand.Shuffle(len(urlStrings), func(i, j int) { - urlStrings[i], urlStrings[j] = urlStrings[j], urlStrings[i] - }) for waitTime := time.Second; waitTime < util.RetryWaitTime; waitTime += waitTime / 2 { for _, urlString := range urlStrings { var localProcesed int diff --git a/weed/wdclient/vid_map.go b/weed/wdclient/vid_map.go index 670d1ad77..e0bea2a01 100644 --- a/weed/wdclient/vid_map.go +++ b/weed/wdclient/vid_map.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/chrislusf/seaweedfs/weed/pb" + "math/rand" "strconv" "strings" "sync" @@ -69,13 +70,21 @@ func (vc *vidMap) LookupVolumeServerUrl(vid string) (serverUrls []string, err er if !found { return nil, fmt.Errorf("volume %d not found", id) } + var sameDcServers, otherDcServers []string for _, loc := range locations { if vc.DataCenter == "" || loc.DataCenter == "" || vc.DataCenter != loc.DataCenter { - serverUrls = append(serverUrls, loc.Url) + sameDcServers = append(sameDcServers, loc.Url) } else { - serverUrls = append([]string{loc.Url}, serverUrls...) + otherDcServers = append(otherDcServers, loc.Url) } } + rand.Shuffle(len(sameDcServers), func(i, j int) { + sameDcServers[i], sameDcServers[j] = sameDcServers[j], sameDcServers[i] + }) + rand.Shuffle(len(otherDcServers), func(i, j int) { + otherDcServers[i], otherDcServers[j] = otherDcServers[j], otherDcServers[i] + }) + serverUrls = append(sameDcServers, otherDcServers...) return } |
