fiil serverUrls sorted by data center
This commit is contained in:
@@ -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("")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user