aboutsummaryrefslogtreecommitdiff
path: root/weed/wdclient/vid_map.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/wdclient/vid_map.go')
-rw-r--r--weed/wdclient/vid_map.go17
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()