From 37ab8909b00c35fc8dce8eb7aba795bb7d8e438d Mon Sep 17 00:00:00 2001 From: chrislu Date: Tue, 26 Apr 2022 23:28:34 -0700 Subject: [PATCH] use two flags: v.isCompacting and v.isCommitCompacting --- weed/storage/disk_location.go | 2 +- weed/storage/volume.go | 3 ++- weed/storage/volume_vacuum.go | 4 ++-- weed/storage/volume_write.go | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/weed/storage/disk_location.go b/weed/storage/disk_location.go index d618db296..e92810022 100644 --- a/weed/storage/disk_location.go +++ b/weed/storage/disk_location.go @@ -283,7 +283,7 @@ func (l *DiskLocation) UnloadVolume(vid needle.VolumeId) error { func (l *DiskLocation) unmountVolumeByCollection(collectionName string) map[needle.VolumeId]*Volume { deltaVols := make(map[needle.VolumeId]*Volume, 0) for k, v := range l.volumes { - if v.Collection == collectionName && !v.isCompacting { + if v.Collection == collectionName && !v.isCompacting && !v.isCommitCompacting { deltaVols[k] = v } } diff --git a/weed/storage/volume.go b/weed/storage/volume.go index f388c7d99..b4791692e 100644 --- a/weed/storage/volume.go +++ b/weed/storage/volume.go @@ -42,7 +42,8 @@ type Volume struct { lastCompactIndexOffset uint64 lastCompactRevision uint16 - isCompacting bool + isCompacting bool + isCommitCompacting bool volumeInfo *volume_server_pb.VolumeInfo location *DiskLocation diff --git a/weed/storage/volume_vacuum.go b/weed/storage/volume_vacuum.go index 7651420aa..ac6f8f8d5 100644 --- a/weed/storage/volume_vacuum.go +++ b/weed/storage/volume_vacuum.go @@ -94,9 +94,9 @@ func (v *Volume) CommitCompact() error { } glog.V(0).Infof("Committing volume %d vacuuming...", v.Id) - v.isCompacting = true + v.isCommitCompacting = true defer func() { - v.isCompacting = false + v.isCommitCompacting = false }() v.dataFileAccessLock.Lock() diff --git a/weed/storage/volume_write.go b/weed/storage/volume_write.go index 794b1c125..7a96c9695 100644 --- a/weed/storage/volume_write.go +++ b/weed/storage/volume_write.go @@ -54,7 +54,7 @@ func (v *Volume) isFileUnchanged(n *needle.Needle) bool { // Destroy removes everything related to this volume func (v *Volume) Destroy() (err error) { - if v.isCompacting { + if v.isCompacting || v.isCommitCompacting { err = fmt.Errorf("volume %d is compacting", v.Id) return }