Fix a race condition when handle VolumeLocationList

This commit is contained in:
LIBA-S
2020-09-23 20:56:51 +08:00
parent d7bf2390e2
commit eecd6b5d35
2 changed files with 9 additions and 1 deletions

View File

@@ -165,7 +165,7 @@ func vacuumOneVolumeLayout(grpcDialOption grpc.DialOption, volumeLayout *VolumeL
volumeLayout.accessLock.RLock()
tmpMap := make(map[needle.VolumeId]*VolumeLocationList)
for vid, locationList := range volumeLayout.vid2location {
tmpMap[vid] = locationList
tmpMap[vid] = locationList.Copy()
}
volumeLayout.accessLock.RUnlock()

View File

@@ -18,6 +18,14 @@ func (dnll *VolumeLocationList) String() string {
return fmt.Sprintf("%v", dnll.list)
}
func (dnll *VolumeLocationList) Copy() *VolumeLocationList {
list := make([]*DataNode, len(dnll.list))
copy(list, dnll.list)
return &VolumeLocationList{
list: list,
}
}
func (dnll *VolumeLocationList) Head() *DataNode {
//mark first node as master volume
return dnll.list[0]