Commit d50bd9e7 authored by k8s-merge-robot's avatar k8s-merge-robot Committed by GitHub

Merge pull request #27996 from ronnielai/gc-threshold

Automatic merge from submit-queue Image GC logic should compensate for reserved blocks Calculating the disk usage based on available bytes instead of usage bytes to account for reserved blocks in image GC #27169
parents 9ff31ad1 038b8797
......@@ -213,8 +213,12 @@ func (im *realImageManager) GarbageCollect() error {
if err != nil {
return err
}
usage := int64(fsInfo.Usage)
capacity := int64(fsInfo.Capacity)
available := int64(fsInfo.Available)
if available > capacity {
glog.Warningf("available %d is larger than capacity %d", available, capacity)
available = capacity
}
// Check valid capacity.
if capacity == 0 {
......@@ -224,9 +228,9 @@ func (im *realImageManager) GarbageCollect() error {
}
// If over the max threshold, free enough to place us at the lower threshold.
usagePercent := int(usage * 100 / capacity)
usagePercent := 100 - int(available*100/capacity)
if usagePercent >= im.policy.HighThresholdPercent {
amountToFree := usage - (int64(im.policy.LowThresholdPercent) * capacity / 100)
amountToFree := capacity*int64(100-im.policy.LowThresholdPercent)/100 - available
glog.Infof("[ImageManager]: Disk usage on %q (%s) is at %d%% which is over the high threshold (%d%%). Trying to free %d bytes", fsInfo.Device, fsInfo.Mountpoint, usagePercent, im.policy.HighThresholdPercent, amountToFree)
freed, err := im.freeSpace(amountToFree, time.Now())
if err != nil {
......
......@@ -374,7 +374,7 @@ func TestGarbageCollectBelowLowThreshold(t *testing.T) {
// Expect 40% usage.
mockCadvisor.On("ImagesFsInfo").Return(cadvisorapiv2.FsInfo{
Usage: 400,
Available: 600,
Capacity: 1000,
}, nil)
......@@ -401,7 +401,7 @@ func TestGarbageCollectBelowSuccess(t *testing.T) {
// Expect 95% usage and most of it gets freed.
mockCadvisor.On("ImagesFsInfo").Return(cadvisorapiv2.FsInfo{
Usage: 950,
Available: 50,
Capacity: 1000,
}, nil)
fakeRuntime.ImageList = []container.Image{
......@@ -420,7 +420,7 @@ func TestGarbageCollectNotEnoughFreed(t *testing.T) {
// Expect 95% usage and little of it gets freed.
mockCadvisor.On("ImagesFsInfo").Return(cadvisorapiv2.FsInfo{
Usage: 950,
Available: 50,
Capacity: 1000,
}, nil)
fakeRuntime.ImageList = []container.Image{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment