From 38e06d783d0a910c3df8e22bd097d3409e5d5312 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 31 Aug 2020 18:10:53 -0700 Subject: [PATCH] volume: check disk space before compaction fix https://github.com/chrislusf/seaweedfs/issues/1440 --- weed/storage/store_vacuum.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/weed/storage/store_vacuum.go b/weed/storage/store_vacuum.go index 38159496e..32666a417 100644 --- a/weed/storage/store_vacuum.go +++ b/weed/storage/store_vacuum.go @@ -2,6 +2,7 @@ package storage import ( "fmt" + "github.com/chrislusf/seaweedfs/weed/stats" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/storage/needle" @@ -16,6 +17,10 @@ func (s *Store) CheckCompactVolume(volumeId needle.VolumeId) (float64, error) { } func (s *Store) CompactVolume(vid needle.VolumeId, preallocate int64, compactionBytePerSecond int64) error { if v := s.findVolume(vid); v != nil { + s := stats.NewDiskStatus(v.dir) + if int64(s.Free) < preallocate { + return fmt.Errorf("free space: %d bytes, not enough for %d bytes", s.Free, preallocate) + } return v.Compact2(preallocate, compactionBytePerSecond) } return fmt.Errorf("volume id %d is not found during compact", vid)