From 9226ccb59f5967f5c784280b993711530615dcd7 Mon Sep 17 00:00:00 2001 From: Hironori Shiina Date: Thu, 11 Nov 2021 11:27:05 -0500 Subject: Enable 'podman run --memory-swappiness=0' '--memory-swappiness=0' used to work. This patch fixes the regression issue, which was caused by the change of infra container creation process. Signed-off-by: Hironori Shiina --- pkg/api/handlers/libpod/pods.go | 6 ++++-- pkg/domain/entities/pods.go | 9 +++++++++ pkg/domain/infra/abi/play.go | 2 +- pkg/specgenutil/specgen.go | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) (limited to 'pkg') diff --git a/pkg/api/handlers/libpod/pods.go b/pkg/api/handlers/libpod/pods.go index 2ba292579..3d18406a5 100644 --- a/pkg/api/handlers/libpod/pods.go +++ b/pkg/api/handlers/libpod/pods.go @@ -39,8 +39,10 @@ func PodCreate(w http.ResponseWriter, r *http.Request) { return } if !psg.NoInfra { - infraOptions := &entities.ContainerCreateOptions{ImageVolume: "bind", IsInfra: true, Net: &entities.NetOptions{}, Devices: psg.Devices} // options for pulling the image and FillOutSpec - err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings) + infraOptions := entities.NewInfraContainerCreateOptions() // options for pulling the image and FillOutSpec + infraOptions.Net = &entities.NetOptions{} + infraOptions.Devices = psg.Devices + err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, &infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings) if err != nil { utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen")) return diff --git a/pkg/domain/entities/pods.go b/pkg/domain/entities/pods.go index 1df18be58..70d2be1e6 100644 --- a/pkg/domain/entities/pods.go +++ b/pkg/domain/entities/pods.go @@ -266,6 +266,15 @@ type ContainerCreateOptions struct { CgroupConf []string } +func NewInfraContainerCreateOptions() ContainerCreateOptions { + options := ContainerCreateOptions{ + IsInfra: true, + ImageVolume: "bind", + MemorySwappiness: -1, + } + return options +} + type PodCreateReport struct { Id string //nolint } diff --git a/pkg/domain/infra/abi/play.go b/pkg/domain/infra/abi/play.go index 3fdb3f286..d2bb95f7c 100644 --- a/pkg/domain/infra/abi/play.go +++ b/pkg/domain/infra/abi/play.go @@ -270,7 +270,7 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY if podOpt.Infra { infraImage := util.DefaultContainerConfig().Engine.InfraImage - infraOptions := entities.ContainerCreateOptions{ImageVolume: "bind"} + infraOptions := entities.NewInfraContainerCreateOptions() podSpec.PodSpecGen.InfraImage = infraImage podSpec.PodSpecGen.NoInfra = false podSpec.PodSpecGen.InfraContainerSpec = specgen.NewSpecGenerator(infraImage, false) diff --git a/pkg/specgenutil/specgen.go b/pkg/specgenutil/specgen.go index 4e8f954fb..04d3add32 100644 --- a/pkg/specgenutil/specgen.go +++ b/pkg/specgenutil/specgen.go @@ -172,7 +172,7 @@ func getMemoryLimits(s *specgen.SpecGenerator, c *entities.ContainerCreateOption memory.Kernel = &mk hasLimits = true } - if c.MemorySwappiness > 0 { + if c.MemorySwappiness >= 0 { swappiness := uint64(c.MemorySwappiness) memory.Swappiness = &swappiness hasLimits = true -- cgit v1.2.3-54-g00ecf