Browse Source
Detect underflow when calculating unused space (#5758)
Detect underflow when calculating unused space (#5758)
* Detect underflow when calculating unused space * Detect underflow when calculating unused spacepull/5512/merge
Dan
6 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 84 additions and 2 deletions
@ -0,0 +1,78 @@ |
|||||
|
package storage |
||||
|
|
||||
|
import ( |
||||
|
"testing" |
||||
|
"time" |
||||
|
|
||||
|
"github.com/seaweedfs/seaweedfs/weed/storage/backend" |
||||
|
"github.com/seaweedfs/seaweedfs/weed/storage/needle" |
||||
|
"github.com/seaweedfs/seaweedfs/weed/util" |
||||
|
) |
||||
|
|
||||
|
type ( |
||||
|
mockBackendStorageFile struct { |
||||
|
backend.DiskFile |
||||
|
|
||||
|
datSize int64 |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
func (df *mockBackendStorageFile) GetStat() (datSize int64, modTime time.Time, err error) { |
||||
|
return df.datSize, time.Now(), nil |
||||
|
} |
||||
|
|
||||
|
type ( |
||||
|
mockNeedleMapper struct { |
||||
|
NeedleMap |
||||
|
|
||||
|
idxSize uint64 |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
func (nm *mockNeedleMapper) IndexFileSize() (idxSize uint64) { |
||||
|
return nm.idxSize |
||||
|
} |
||||
|
|
||||
|
func TestUnUsedSpace(t *testing.T) { |
||||
|
minFreeSpace := util.MinFreeSpace{Type: util.AsPercent, Percent: 1, Raw: "1"} |
||||
|
|
||||
|
diskLocation := DiskLocation{ |
||||
|
Directory: "/test/", |
||||
|
DirectoryUuid: "1234", |
||||
|
IdxDirectory: "/test/", |
||||
|
DiskType: "hdd", |
||||
|
MaxVolumeCount: 0, |
||||
|
OriginalMaxVolumeCount: 0, |
||||
|
MinFreeSpace: minFreeSpace, |
||||
|
} |
||||
|
diskLocation.volumes = make(map[needle.VolumeId]*Volume) |
||||
|
|
||||
|
volumes := [3]*Volume{ |
||||
|
{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 0, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, |
||||
|
{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 1, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, |
||||
|
{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 2, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, |
||||
|
} |
||||
|
|
||||
|
for i, vol := range volumes { |
||||
|
diskLocation.SetVolume(needle.VolumeId(i), vol) |
||||
|
} |
||||
|
|
||||
|
// Testing when there's still space
|
||||
|
unUsedSpace := diskLocation.UnUsedSpace(1200) |
||||
|
if unUsedSpace != 600 { |
||||
|
t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 1500) |
||||
|
} |
||||
|
|
||||
|
// Testing when there's exactly 0 space
|
||||
|
unUsedSpace = diskLocation.UnUsedSpace(1000) |
||||
|
if unUsedSpace != 0 { |
||||
|
t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 0) |
||||
|
} |
||||
|
|
||||
|
// Testing when there's negative free space
|
||||
|
unUsedSpace = diskLocation.UnUsedSpace(900) |
||||
|
if unUsedSpace != 0 { |
||||
|
t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 0) |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue