From d171d9f988130eb1517e6d7609dbedbae1fa58bc Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 4 Dec 2020 21:50:26 -0800 Subject: [PATCH] volume: ensure the volume dat and idx files are always closed fix https://github.com/chrislusf/seaweedfs/issues/1646 --- weed/storage/volume_loading.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/weed/storage/volume_loading.go b/weed/storage/volume_loading.go index fe4980e31..34eee876d 100644 --- a/weed/storage/volume_loading.go +++ b/weed/storage/volume_loading.go @@ -25,6 +25,20 @@ func loadVolumeWithoutIndex(dirname string, collection string, id needle.VolumeI func (v *Volume) load(alsoLoadIndex bool, createDatIfMissing bool, needleMapKind NeedleMapType, preallocate int64) (err error) { alreadyHasSuperBlock := false + hasLoadedVolume := false + defer func() { + if !hasLoadedVolume { + if v.nm != nil { + v.nm.Close() + v.nm = nil + } + if v.DataBackend != nil { + v.DataBackend.Close() + v.DataBackend = nil + } + } + }() + hasVolumeInfoFile := v.maybeLoadVolumeInfo() && v.volumeInfo.Version != 0 if v.HasRemoteFile() { @@ -151,5 +165,9 @@ func (v *Volume) load(alsoLoadIndex bool, createDatIfMissing bool, needleMapKind stats.VolumeServerVolumeCounter.WithLabelValues(v.Collection, "volume").Inc() + if err == nil { + hasLoadedVolume = true + } + return err }