From c7ebadc25dd47b4167b9c25d381db1276e7c5a80 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 22 Nov 2020 17:15:59 -0800 Subject: [PATCH] avoid possible concurrent access inside ensureCorrectWritables() --- weed/topology/topology.go | 4 +++- weed/topology/volume_layout.go | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/weed/topology/topology.go b/weed/topology/topology.go index e217617e9..bde72cf09 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -177,7 +177,9 @@ func (t *Topology) DeleteCollection(collectionName string) { } func (t *Topology) RegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode) { - t.GetVolumeLayout(v.Collection, v.ReplicaPlacement, v.Ttl).RegisterVolume(&v, dn) + vl := t.GetVolumeLayout(v.Collection, v.ReplicaPlacement, v.Ttl) + vl.RegisterVolume(&v, dn) + vl.EnsureCorrectWritables(&v) } func (t *Topology) UnRegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode) { glog.Infof("removing volume info:%+v", v) diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go index 4c9c84459..0db95d289 100644 --- a/weed/topology/volume_layout.go +++ b/weed/topology/volume_layout.go @@ -141,7 +141,6 @@ func (vl *VolumeLayout) RegisterVolume(v *storage.VolumeInfo, dn *DataNode) { vl.accessLock.Lock() defer vl.accessLock.Unlock() - defer vl.ensureCorrectWritables(v.Id) defer vl.rememberOversizedVolume(v, dn) if _, ok := vl.vid2location[v.Id]; !ok {