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