mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-04-05 20:52:50 +08:00
Update store.go (#6358)
Add lock for location.ecVolumes And single delete
This commit is contained in:
parent
9b48ce0613
commit
7eb8257126
@ -381,20 +381,33 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
|
|||||||
|
|
||||||
func (s *Store) deleteExpiredEcVolumes() (ecShards, deleted []*master_pb.VolumeEcShardInformationMessage) {
|
func (s *Store) deleteExpiredEcVolumes() (ecShards, deleted []*master_pb.VolumeEcShardInformationMessage) {
|
||||||
for _, location := range s.Locations {
|
for _, location := range s.Locations {
|
||||||
|
// Collect ecVolume to be deleted
|
||||||
|
var toDeleteEvs []*erasure_coding.EcVolume
|
||||||
|
location.ecVolumesLock.RLock()
|
||||||
for _, ev := range location.ecVolumes {
|
for _, ev := range location.ecVolumes {
|
||||||
messages := ev.ToVolumeEcShardInformationMessage()
|
|
||||||
if ev.IsTimeToDestroy() {
|
if ev.IsTimeToDestroy() {
|
||||||
err := location.deleteEcVolumeById(ev.VolumeId)
|
toDeleteEvs = append(toDeleteEvs, ev)
|
||||||
if err != nil {
|
|
||||||
ecShards = append(ecShards, messages...)
|
|
||||||
glog.Errorf("delete EcVolume err %d: %v", ev.VolumeId, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
deleted = append(deleted, messages...)
|
|
||||||
} else {
|
} else {
|
||||||
|
messages := ev.ToVolumeEcShardInformationMessage()
|
||||||
ecShards = append(ecShards, messages...)
|
ecShards = append(ecShards, messages...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
location.ecVolumesLock.RUnlock()
|
||||||
|
|
||||||
|
// Delete expired volumes
|
||||||
|
for _, ev := range toDeleteEvs {
|
||||||
|
messages := ev.ToVolumeEcShardInformationMessage()
|
||||||
|
// deleteEcVolumeById has its own lock
|
||||||
|
err := location.deleteEcVolumeById(ev.VolumeId)
|
||||||
|
if err != nil {
|
||||||
|
ecShards = append(ecShards, messages...)
|
||||||
|
glog.Errorf("delete EcVolume err %d: %v", ev.VolumeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// No need for additional lock here since we only need the messages
|
||||||
|
// from volumes that were already collected
|
||||||
|
deleted = append(deleted, messages...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user