|
|
@ -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) |
|
|
|