aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/storage/disk_location.go2
-rw-r--r--weed/storage/volume.go3
-rw-r--r--weed/storage/volume_vacuum.go4
-rw-r--r--weed/storage/volume_write.go2
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
}