diff options
Diffstat (limited to 'weed/wdclient')
| -rw-r--r-- | weed/wdclient/masterclient.go | 6 | ||||
| -rw-r--r-- | weed/wdclient/vid_map.go | 14 | ||||
| -rw-r--r-- | weed/wdclient/vid_map_test.go | 2 |
3 files changed, 13 insertions, 9 deletions
diff --git a/weed/wdclient/masterclient.go b/weed/wdclient/masterclient.go index e91e6f28e..e39b9dfdf 100644 --- a/weed/wdclient/masterclient.go +++ b/weed/wdclient/masterclient.go @@ -24,14 +24,14 @@ type MasterClient struct { vidMap } -func NewMasterClient(grpcDialOption grpc.DialOption, clientType string, clientHost string, clientGrpcPort uint32, masters []string) *MasterClient { +func NewMasterClient(grpcDialOption grpc.DialOption, clientType string, clientHost string, clientGrpcPort uint32, clientDataCenter string, masters []string) *MasterClient { return &MasterClient{ clientType: clientType, clientHost: clientHost, grpcPort: clientGrpcPort, masters: masters, grpcDialOption: grpcDialOption, - vidMap: newVidMap(), + vidMap: newVidMap(clientDataCenter), } } @@ -89,7 +89,7 @@ func (mc *MasterClient) tryAllMasters() { } mc.currentMaster = "" - mc.vidMap = newVidMap() + mc.vidMap = newVidMap("") } } diff --git a/weed/wdclient/vid_map.go b/weed/wdclient/vid_map.go index b72ac3f55..09b9eb71c 100644 --- a/weed/wdclient/vid_map.go +++ b/weed/wdclient/vid_map.go @@ -24,13 +24,14 @@ type Location struct { type vidMap struct { sync.RWMutex vid2Locations map[uint32][]Location - - cursor int32 + DataCenter string + cursor int32 } -func newVidMap() vidMap { +func newVidMap(dataCenter string) vidMap { return vidMap{ vid2Locations: make(map[uint32][]Location), + DataCenter: dataCenter, cursor: -1, } } @@ -57,7 +58,11 @@ func (vc *vidMap) LookupVolumeServerUrl(vid string) (serverUrls []string, err er return nil, fmt.Errorf("volume %d not found", id) } for _, loc := range locations { - serverUrls = append(serverUrls, loc.Url) + if vc.DataCenter == "" || loc.DataCenter == "" || vc.DataCenter != loc.DataCenter { + serverUrls = append(serverUrls, loc.Url) + } else { + serverUrls = append([]string{loc.Url}, serverUrls...) + } } return } @@ -93,7 +98,6 @@ func (vc *vidMap) GetVidLocations(vid string) (locations []Location, err error) func (vc *vidMap) GetLocations(vid uint32) (locations []Location, found bool) { vc.RLock() defer vc.RUnlock() - locations, found = vc.vid2Locations[vid] return } diff --git a/weed/wdclient/vid_map_test.go b/weed/wdclient/vid_map_test.go index 87be2fc25..0cea698ac 100644 --- a/weed/wdclient/vid_map_test.go +++ b/weed/wdclient/vid_map_test.go @@ -45,7 +45,7 @@ func TestLocationIndex(t *testing.T) { mustOk(7, maxCursorIndex, 0) // test with constructor - vm = newVidMap() + vm = newVidMap("") length := 7 for i := 0; i < 100; i++ { got, err := vm.getLocationIndex(length) |
