Browse Source

fix a deadlock

pull/279/head
tnextday 10 years ago
parent
commit
57dd6bbe0c
  1. 5
      weed/topology/data_node.go

5
weed/topology/data_node.go

@ -106,19 +106,20 @@ func (dn *DataNode) UpdateVolumes(actualVolumes []*storage.VolumeInfo) (deletedV
for _, v := range actualVolumes { for _, v := range actualVolumes {
actualVolumeMap[v.Id] = v actualVolumeMap[v.Id] = v
} }
dn.mutex.RLock()
for vid, v := range dn.volumes { for vid, v := range dn.volumes {
if _, ok := actualVolumeMap[vid]; !ok { if _, ok := actualVolumeMap[vid]; !ok {
deletedVolumes = append(deletedVolumes, v) deletedVolumes = append(deletedVolumes, v)
} }
} }
dn.mutex.Lock()
dn.mutex.RUnlock()
for _, v := range deletedVolumes { for _, v := range deletedVolumes {
glog.V(0).Infoln("Deleting volume id:", v.Id) glog.V(0).Infoln("Deleting volume id:", v.Id)
dn.DeleteVolume(v.Id) dn.DeleteVolume(v.Id)
dn.UpAdjustVolumeCountDelta(-1) dn.UpAdjustVolumeCountDelta(-1)
dn.UpAdjustActiveVolumeCountDelta(-1) dn.UpAdjustActiveVolumeCountDelta(-1)
} }
dn.mutex.Unlock()
//TODO: adjust max volume id, if need to reclaim volume ids //TODO: adjust max volume id, if need to reclaim volume ids

Loading…
Cancel
Save