diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-08-31 18:10:53 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-08-31 18:10:53 -0700 |
| commit | 38e06d783d0a910c3df8e22bd097d3409e5d5312 (patch) | |
| tree | 82212e4f7680bab392a8b93269c9d733cf44c55b | |
| parent | dbb10e0f0b7e9d9341ca170ce2bd50836bbca4f8 (diff) | |
| download | seaweedfs-38e06d783d0a910c3df8e22bd097d3409e5d5312.tar.xz seaweedfs-38e06d783d0a910c3df8e22bd097d3409e5d5312.zip | |
volume: check disk space before compaction
fix https://github.com/chrislusf/seaweedfs/issues/1440
| -rw-r--r-- | weed/storage/store_vacuum.go | 5 |
1 files changed, 5 insertions, 0 deletions
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) |
