mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-14 22:33:34 +00:00
adds pinned field to imageRecords
This commit is contained in:
parent
d3ae0a381a
commit
e9766c2b81
@ -146,6 +146,9 @@ type imageRecord struct {
|
|||||||
|
|
||||||
// Size of the image in bytes.
|
// Size of the image in bytes.
|
||||||
size int64
|
size int64
|
||||||
|
|
||||||
|
// Pinned status of the image
|
||||||
|
pinned bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewImageGCManager instantiates a new ImageGCManager object.
|
// NewImageGCManager instantiates a new ImageGCManager object.
|
||||||
@ -257,6 +260,9 @@ func (im *realImageGCManager) detectImages(detectTime time.Time) (sets.String, e
|
|||||||
|
|
||||||
klog.V(5).InfoS("Image ID has size", "imageID", image.ID, "size", image.Size)
|
klog.V(5).InfoS("Image ID has size", "imageID", image.ID, "size", image.Size)
|
||||||
im.imageRecords[image.ID].size = image.Size
|
im.imageRecords[image.ID].size = image.Size
|
||||||
|
|
||||||
|
klog.V(5).InfoS("Image ID is pinned", "imageID", image.ID, "pinned", image.Pinned)
|
||||||
|
im.imageRecords[image.ID].pinned = image.Pinned
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove old images from our records.
|
// Remove old images from our records.
|
||||||
@ -338,16 +344,6 @@ func (im *realImageGCManager) freeSpace(bytesToFree int64, freeTime time.Time) (
|
|||||||
im.imageRecordsLock.Lock()
|
im.imageRecordsLock.Lock()
|
||||||
defer im.imageRecordsLock.Unlock()
|
defer im.imageRecordsLock.Unlock()
|
||||||
|
|
||||||
// Make the ListImages into a map to grab an image by ID
|
|
||||||
allImages, err := im.runtime.ListImages()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
imagesMap := make(map[string]container.Image, len(allImages))
|
|
||||||
for _, img := range allImages {
|
|
||||||
imagesMap[img.ID] = img
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all images in eviction order.
|
// Get all images in eviction order.
|
||||||
images := make([]evictionInfo, 0, len(im.imageRecords))
|
images := make([]evictionInfo, 0, len(im.imageRecords))
|
||||||
for image, record := range im.imageRecords {
|
for image, record := range im.imageRecords {
|
||||||
@ -356,7 +352,7 @@ func (im *realImageGCManager) freeSpace(bytesToFree int64, freeTime time.Time) (
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Check if image is pinned, prevent garbage collection
|
// Check if image is pinned, prevent garbage collection
|
||||||
if imagesMap[image].Pinned {
|
if record.pinned {
|
||||||
klog.V(5).InfoS("Image is pinned, skipping garbage collection", "imageID", image)
|
klog.V(5).InfoS("Image is pinned, skipping garbage collection", "imageID", image)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -207,7 +207,10 @@ func TestDeleteUnusedImagesExemptSandboxImage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDeletePinnedImage(t *testing.T) {
|
func TestDeletePinnedImage(t *testing.T) {
|
||||||
manager, fakeRuntime, _ := newRealImageGCManager(ImageGCPolicy{})
|
mockCtrl := gomock.NewController(t)
|
||||||
|
mockStatsProvider := statstest.NewMockProvider(mockCtrl)
|
||||||
|
|
||||||
|
manager, fakeRuntime := newRealImageGCManager(ImageGCPolicy{}, mockStatsProvider)
|
||||||
fakeRuntime.ImageList = []container.Image{
|
fakeRuntime.ImageList = []container.Image{
|
||||||
{
|
{
|
||||||
ID: sandboxImage,
|
ID: sandboxImage,
|
||||||
@ -227,7 +230,10 @@ func TestDeletePinnedImage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDoNotDeletePinnedImage(t *testing.T) {
|
func TestDoNotDeletePinnedImage(t *testing.T) {
|
||||||
manager, fakeRuntime, _ := newRealImageGCManager(ImageGCPolicy{})
|
mockCtrl := gomock.NewController(t)
|
||||||
|
mockStatsProvider := statstest.NewMockProvider(mockCtrl)
|
||||||
|
|
||||||
|
manager, fakeRuntime := newRealImageGCManager(ImageGCPolicy{}, mockStatsProvider)
|
||||||
fakeRuntime.ImageList = []container.Image{
|
fakeRuntime.ImageList = []container.Image{
|
||||||
{
|
{
|
||||||
ID: "1",
|
ID: "1",
|
||||||
@ -248,7 +254,10 @@ func TestDoNotDeletePinnedImage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteUnPinnedImage(t *testing.T) {
|
func TestDeleteUnPinnedImage(t *testing.T) {
|
||||||
manager, fakeRuntime, _ := newRealImageGCManager(ImageGCPolicy{})
|
mockCtrl := gomock.NewController(t)
|
||||||
|
mockStatsProvider := statstest.NewMockProvider(mockCtrl)
|
||||||
|
|
||||||
|
manager, fakeRuntime := newRealImageGCManager(ImageGCPolicy{}, mockStatsProvider)
|
||||||
fakeRuntime.ImageList = []container.Image{
|
fakeRuntime.ImageList = []container.Image{
|
||||||
{
|
{
|
||||||
ID: "1",
|
ID: "1",
|
||||||
@ -269,7 +278,10 @@ func TestDeleteUnPinnedImage(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAllPinnedImages(t *testing.T) {
|
func TestAllPinnedImages(t *testing.T) {
|
||||||
manager, fakeRuntime, _ := newRealImageGCManager(ImageGCPolicy{})
|
mockCtrl := gomock.NewController(t)
|
||||||
|
mockStatsProvider := statstest.NewMockProvider(mockCtrl)
|
||||||
|
|
||||||
|
manager, fakeRuntime := newRealImageGCManager(ImageGCPolicy{}, mockStatsProvider)
|
||||||
fakeRuntime.ImageList = []container.Image{
|
fakeRuntime.ImageList = []container.Image{
|
||||||
{
|
{
|
||||||
ID: "1",
|
ID: "1",
|
||||||
@ -289,6 +301,7 @@ func TestAllPinnedImages(t *testing.T) {
|
|||||||
assert.EqualValues(0, spaceFreed)
|
assert.EqualValues(0, spaceFreed)
|
||||||
assert.Len(fakeRuntime.ImageList, 2)
|
assert.Len(fakeRuntime.ImageList, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDetectImagesContainerStopped(t *testing.T) {
|
func TestDetectImagesContainerStopped(t *testing.T) {
|
||||||
mockCtrl := gomock.NewController(t)
|
mockCtrl := gomock.NewController(t)
|
||||||
defer mockCtrl.Finish()
|
defer mockCtrl.Finish()
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user