diff options
Diffstat (limited to 'weed/replication')
| -rw-r--r-- | weed/replication/sink/filersink/fetch_write.go | 5 | ||||
| -rw-r--r-- | weed/replication/sink/filersink/filer_sink.go | 1 | ||||
| -rw-r--r-- | weed/replication/source/filer_source.go | 14 |
3 files changed, 19 insertions, 1 deletions
diff --git a/weed/replication/sink/filersink/fetch_write.go b/weed/replication/sink/filersink/fetch_write.go index 540e16da4..7b3e22b90 100644 --- a/weed/replication/sink/filersink/fetch_write.go +++ b/weed/replication/sink/filersink/fetch_write.go @@ -139,6 +139,11 @@ func (fs *FilerSink) WithFilerClient(streamingMode bool, fn func(filer_pb.Seawee }, fs.grpcAddress, fs.grpcDialOption) } + func (fs *FilerSink) AdjustedUrl(location *filer_pb.Location) string { return location.Url } + +func (fs *FilerSink) GetDataCenter() string { + return fs.dataCenter +} diff --git a/weed/replication/sink/filersink/filer_sink.go b/weed/replication/sink/filersink/filer_sink.go index 4df69f3fc..9a795d4ec 100644 --- a/weed/replication/sink/filersink/filer_sink.go +++ b/weed/replication/sink/filersink/filer_sink.go @@ -52,6 +52,7 @@ func (fs *FilerSink) IsIncremental() bool { func (fs *FilerSink) Initialize(configuration util.Configuration, prefix string) error { fs.isIncremental = configuration.GetBool(prefix + "is_incremental") + fs.dataCenter = configuration.GetString(prefix + "dataCenter") return fs.DoInitialize( "", configuration.GetString(prefix+"grpcAddress"), diff --git a/weed/replication/source/filer_source.go b/weed/replication/source/filer_source.go index f6b310355..6c69b735c 100644 --- a/weed/replication/source/filer_source.go +++ b/weed/replication/source/filer_source.go @@ -27,9 +27,11 @@ type FilerSource struct { Dir string address string proxyByFiler bool + dataCenter string } func (fs *FilerSource) Initialize(configuration util.Configuration, prefix string) error { + fs.dataCenter = configuration.GetString(prefix + "dataCenter") return fs.DoInitialize( "", configuration.GetString(prefix+"grpcAddress"), @@ -84,7 +86,13 @@ func (fs *FilerSource) LookupFileId(part string) (fileUrls []string, err error) if !fs.proxyByFiler { for _, loc := range locations.Locations { - fileUrls = append(fileUrls, fmt.Sprintf("http://%s/%s?readDeleted=true", loc.Url, part)) + fileUrl := fmt.Sprintf("http://%s/%s?readDeleted=true", loc.Url, part) + // Prefer same data center + if fs.dataCenter != "" && fs.dataCenter == loc.DataCenter { + fileUrls = append([]string{fileUrl}, fileUrls...) + } else { + fileUrls = append(fileUrls, fileUrl) + } } } else { fileUrls = append(fileUrls, fmt.Sprintf("http://%s/?proxyChunkId=%s", fs.address, part)) @@ -131,6 +139,10 @@ func (fs *FilerSource) AdjustedUrl(location *filer_pb.Location) string { return location.Url } +func (fs *FilerSource) GetDataCenter() string { + return fs.dataCenter +} + func volumeId(fileId string) string { lastCommaIndex := strings.LastIndex(fileId, ",") if lastCommaIndex > 0 { |
