Chris Lu
6 years ago
4 changed files with 83 additions and 12 deletions
-
8weed/filer2/filer.go
-
16weed/server/filer_grpc_server.go
-
12weed/wdclient/masterclient.go
-
59weed/wdclient/vid_map.go
@ -0,0 +1,59 @@ |
|||||
|
package wdclient |
||||
|
|
||||
|
import ( |
||||
|
"sync" |
||||
|
) |
||||
|
|
||||
|
type Location struct { |
||||
|
Url string `json:"url,omitempty"` |
||||
|
PublicUrl string `json:"publicUrl,omitempty"` |
||||
|
} |
||||
|
|
||||
|
type VidMap struct { |
||||
|
sync.RWMutex |
||||
|
vid2Locations map[uint32][]Location |
||||
|
} |
||||
|
|
||||
|
func (vc *VidMap) GetLocations(vid uint32) (locations []Location) { |
||||
|
vc.RLock() |
||||
|
defer vc.RUnlock() |
||||
|
|
||||
|
return vc.vid2Locations[vid] |
||||
|
} |
||||
|
|
||||
|
func (vc *VidMap) AddLocation(vid uint32, location Location) { |
||||
|
vc.Lock() |
||||
|
defer vc.Unlock() |
||||
|
|
||||
|
locations, found := vc.vid2Locations[vid] |
||||
|
if !found { |
||||
|
vc.vid2Locations[vid] = []Location{location} |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
for _, loc := range locations { |
||||
|
if loc.Url == location.Url { |
||||
|
return |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
vc.vid2Locations[vid] = append(locations, location) |
||||
|
|
||||
|
} |
||||
|
|
||||
|
func (vc *VidMap) DeleteLocation(vid uint32, location Location) { |
||||
|
vc.Lock() |
||||
|
defer vc.Unlock() |
||||
|
|
||||
|
locations, found := vc.vid2Locations[vid] |
||||
|
if !found { |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
for i, loc := range locations { |
||||
|
if loc.Url == location.Url { |
||||
|
vc.vid2Locations[vid] = append(locations[0:i], locations[i+1:]...) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue