From fc0e095180e1d8ce7a12f0b2bb2e2e0b5f956531 Mon Sep 17 00:00:00 2001 From: Braden Rayhorn Date: Mon, 24 Jan 2022 13:30:32 -0600 Subject: [PATCH] runtime: fix handling container spec's memory limit The OCI container spec specifies a limit of -1 signifies unlimited memory. Update the sandbox memory calculator to reflect this part of the spec. Fixes: #3512 Signed-off-by: Braden Rayhorn --- src/runtime/virtcontainers/sandbox.go | 2 +- src/runtime/virtcontainers/sandbox_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/runtime/virtcontainers/sandbox.go b/src/runtime/virtcontainers/sandbox.go index 3574d28ea..0bd9c1db5 100644 --- a/src/runtime/virtcontainers/sandbox.go +++ b/src/runtime/virtcontainers/sandbox.go @@ -1989,7 +1989,7 @@ func (s *Sandbox) calculateSandboxMemory() (int64, bool, int64) { if m := c.Resources.Memory; m != nil { currentLimit := int64(0) - if m.Limit != nil { + if m.Limit != nil && *m.Limit > 0 { currentLimit = *m.Limit memorySandbox += currentLimit } diff --git a/src/runtime/virtcontainers/sandbox_test.go b/src/runtime/virtcontainers/sandbox_test.go index bfec3f686..2dda62a41 100644 --- a/src/runtime/virtcontainers/sandbox_test.go +++ b/src/runtime/virtcontainers/sandbox_test.go @@ -178,6 +178,20 @@ func TestCalculateSandboxMem(t *testing.T) { } } +func TestCalculateSandboxMemHandlesNegativeLimits(t *testing.T) { + sandbox := &Sandbox{} + sandbox.config = &SandboxConfig{} + container := newTestContainerConfigNoop("cont-00001") + limit := int64(-1) + container.Resources.Memory = &specs.LinuxMemory{Limit: &limit} + + sandbox.config.Containers = []ContainerConfig{container} + mem, needSwap, swap := sandbox.calculateSandboxMemory() + assert.Equal(t, mem, int64(0)) + assert.Equal(t, needSwap, false) + assert.Equal(t, swap, int64(0)) +} + func TestCreateSandboxEmptyID(t *testing.T) { hConfig := newHypervisorConfig(nil, nil) _, err := testCreateSandbox(t, "", MockHypervisor, hConfig, NetworkConfig{}, nil, nil)