diff options
Diffstat (limited to 'weed/wdclient/vid_map.go')
| -rw-r--r-- | weed/wdclient/vid_map.go | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/weed/wdclient/vid_map.go b/weed/wdclient/vid_map.go index 9d5e5d378..179381b0c 100644 --- a/weed/wdclient/vid_map.go +++ b/weed/wdclient/vid_map.go @@ -4,13 +4,14 @@ import ( "context" "errors" "fmt" - "github.com/seaweedfs/seaweedfs/weed/pb" "math/rand" "strconv" "strings" "sync" "sync/atomic" + "github.com/seaweedfs/seaweedfs/weed/pb" + "github.com/seaweedfs/seaweedfs/weed/glog" ) @@ -41,7 +42,7 @@ type vidMap struct { ecVid2Locations map[uint32][]Location DataCenter string cursor int32 - cache *vidMap + cache atomic.Pointer[vidMap] } func newVidMap(dataCenter string) *vidMap { @@ -135,8 +136,8 @@ func (vc *vidMap) GetLocations(vid uint32) (locations []Location, found bool) { return locations, found } - if vc.cache != nil { - return vc.cache.GetLocations(vid) + if cachedMap := vc.cache.Load(); cachedMap != nil { + return cachedMap.GetLocations(vid) } return nil, false @@ -212,8 +213,8 @@ 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) + if cachedMap := vc.cache.Load(); cachedMap != nil { + cachedMap.deleteLocation(vid, location) } vc.Lock() @@ -235,8 +236,8 @@ func (vc *vidMap) deleteLocation(vid uint32, location Location) { } func (vc *vidMap) deleteEcLocation(vid uint32, location Location) { - if vc.cache != nil { - vc.cache.deleteLocation(vid, location) + if cachedMap := vc.cache.Load(); cachedMap != nil { + cachedMap.deleteEcLocation(vid, location) } vc.Lock() |
