diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2022-07-22 02:57:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-22 02:57:50 -0700 |
| commit | 0716092b396941e07ab2e41e782641ae658b3793 (patch) | |
| tree | e13bb6cae85e8ba2454658d27698b6577800abab /weed/wdclient/vid_map.go | |
| parent | 8d97add89cddb316466776d875e9dc1419932ae6 (diff) | |
| parent | 994a2dec78bcc0beaf9d643a96b98c9d17bd22b5 (diff) | |
| download | seaweedfs-0716092b396941e07ab2e41e782641ae658b3793.tar.xz seaweedfs-0716092b396941e07ab2e41e782641ae658b3793.zip | |
Merge pull request #3350 from shichanglin5/optimize_masterclient_vidmap
Solve the problem that `LookupFileId` lookup urls is empty due to lea…
Diffstat (limited to 'weed/wdclient/vid_map.go')
| -rw-r--r-- | weed/wdclient/vid_map.go | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/weed/wdclient/vid_map.go b/weed/wdclient/vid_map.go index 754c77051..5771c112a 100644 --- a/weed/wdclient/vid_map.go +++ b/weed/wdclient/vid_map.go @@ -40,6 +40,7 @@ type vidMap struct { ecVid2Locations map[uint32][]Location DataCenter string cursor int32 + cache *vidMap } func newVidMap(dataCenter string) vidMap { @@ -119,17 +120,29 @@ func (vc *vidMap) GetVidLocations(vid string) (locations []Location, err error) } func (vc *vidMap) GetLocations(vid uint32) (locations []Location, found bool) { + glog.V(4).Infof("~ lookup volume id %d: %+v ec:%+v", vid, vc.vid2Locations, vc.ecVid2Locations) + locations, found = vc.getLocations(vid) + if found && len(locations) > 0 { + return locations, found + } + + if vc.cache != nil { + return vc.cache.GetLocations(vid) + } + + return nil, false +} + +func (vc *vidMap) getLocations(vid uint32) (locations []Location, found bool) { vc.RLock() defer vc.RUnlock() - glog.V(4).Infof("~ lookup volume id %d: %+v ec:%+v", vid, vc.vid2Locations, vc.ecVid2Locations) - locations, found = vc.vid2Locations[vid] if found && len(locations) > 0 { return } locations, found = vc.ecVid2Locations[vid] - return locations, found && len(locations) > 0 + return } func (vc *vidMap) addLocation(vid uint32, location Location) { @@ -177,6 +190,10 @@ func (vc *vidMap) addEcLocation(vid uint32, location Location) { } func (vc *vidMap) deleteLocation(vid uint32, location Location) { + if vc.cache != nil { + vc.cache.deleteLocation(vid, location) + } + vc.Lock() defer vc.Unlock() @@ -193,10 +210,13 @@ func (vc *vidMap) deleteLocation(vid uint32, location Location) { break } } - } func (vc *vidMap) deleteEcLocation(vid uint32, location Location) { + if vc.cache != nil { + vc.cache.deleteLocation(vid, location) + } + vc.Lock() defer vc.Unlock() @@ -213,5 +233,4 @@ func (vc *vidMap) deleteEcLocation(vid uint32, location Location) { break } } - } |
