Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 50 additions & 25 deletions internal/controller/mapserver/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,12 +218,24 @@ func GetEnvVarsForDeployment[O pdoknlv3.WMSWFS](obj O, blobsSecretName string) [
// Resources for mapserver container
func GetResourcesForDeployment[O pdoknlv3.WMSWFS](obj O) v1.ResourceRequirements {
resources := v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceMemory: resource.MustParse("800M"),
},
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("0.15"),
},
Limits: v1.ResourceList{},
Requests: v1.ResourceList{},
}

maxResourceVal := func(v1 *resource.Quantity, v2 *resource.Quantity) *resource.Quantity {
if v1 != nil && v2 != nil {
if v1.Value() > v2.Value() {
return v1
} else {
return v2
}
} else if v1 != nil && v2 == nil {
return v1
} else if v1 == nil || v2 != nil {
return v2
}

return &resource.Quantity{}
}

objResources := &v1.ResourceRequirements{}
Expand All @@ -243,38 +255,51 @@ func GetResourcesForDeployment[O pdoknlv3.WMSWFS](obj O) v1.ResourceRequirements

}

if obj.Type() == pdoknlv3.ServiceTypeWMS && obj.Options().UseWebserviceProxy() {
resources.Requests[v1.ResourceCPU] = resource.MustParse("0.1")
/**
Set CPU request and limit
*/
cpuRequest := objResources.Requests.Cpu()
if cpuRequest == nil || cpuRequest.IsZero() {
cpuRequest = smoothoperatorutils.Pointer(resource.MustParse("0.15"))
if obj.Type() == pdoknlv3.ServiceTypeWMS && obj.Options().UseWebserviceProxy() {
cpuRequest = smoothoperatorutils.Pointer(resource.MustParse("0.1"))
}
}
resources.Requests[v1.ResourceCPU] = *cpuRequest

cpuLimit := objResources.Limits.Cpu()
if cpuLimit != nil && !cpuLimit.IsZero() {
resources.Limits[v1.ResourceCPU] = *maxResourceVal(cpuLimit, cpuRequest)
}

if objResources.Limits.Cpu() != nil && objResources.Requests.Cpu().Value() > resources.Requests.Cpu().Value() {
resources.Limits[v1.ResourceCPU] = *objResources.Limits.Cpu()
/**
Set memory limit/request if the request is higher than the limit the request is used as limit
*/
memoryRequest := objResources.Requests.Memory()
if memoryRequest != nil && !memoryRequest.IsZero() {
resources.Requests[v1.ResourceMemory] = *memoryRequest
}

if objResources.Requests.Memory() != nil && !objResources.Requests.Memory().IsZero() {
resources.Requests[v1.ResourceMemory] = *objResources.Requests.Memory()
memoryLimit := objResources.Limits.Memory()
if memoryLimit == nil || memoryLimit.IsZero() {
memoryLimit = smoothoperatorutils.Pointer(resource.MustParse("800M"))
}
resources.Limits[v1.ResourceMemory] = *maxResourceVal(memoryLimit, memoryRequest)

/**
Set ephemeral-storage if there is no ephemeral volume
*/
if use, _ := mapperutils.UseEphemeralVolume(obj); !use {
minimumEphemeralStorageLimit := resource.MustParse("200M")
ephemeralStorageRequest := mapperutils.EphemeralStorageRequest(obj)
ephemeralStorageLimit := mapperutils.EphemeralStorageLimit(obj)

if ephemeralStorageRequest != nil {
resources.Requests[v1.ResourceEphemeralStorage] = *ephemeralStorageRequest
}

if ephemeralStorageLimit != nil && ephemeralStorageLimit.Value() > minimumEphemeralStorageLimit.Value() {
// Request higher than limit, use request as limit
if ephemeralStorageRequest != nil && ephemeralStorageRequest.Value() > ephemeralStorageLimit.Value() {
resources.Limits[v1.ResourceEphemeralStorage] = *ephemeralStorageRequest
} else {
resources.Limits[v1.ResourceEphemeralStorage] = *ephemeralStorageLimit
}
} else {
// No limit given or the given limit is lower than the default, use default
resources.Limits[v1.ResourceEphemeralStorage] = minimumEphemeralStorageLimit
ephemeralStorageLimit := mapperutils.EphemeralStorageLimit(obj)
if ephemeralStorageLimit == nil || ephemeralStorageLimit.IsZero() {
ephemeralStorageLimit = smoothoperatorutils.Pointer(resource.MustParse("200M"))
}
resources.Limits[v1.ResourceEphemeralStorage] = *maxResourceVal(ephemeralStorageLimit, ephemeralStorageRequest)
}

return resources
Expand Down
2 changes: 1 addition & 1 deletion internal/controller/wfs_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ var _ = Describe("WFS Controller", func() {
Expect(container.Ports[0].ContainerPort).Should(Equal(int32(80)))
Expect(container.Image).Should(Equal(reconcilerImages.MapserverImage))
Expect(container.ImagePullPolicy).Should(Equal(v1.PullIfNotPresent))
Expect(container.Resources.Limits.Memory().String()).Should(Equal("800M"))
Expect(container.Resources.Limits.Memory().String()).Should(Equal("12M"))
Expect(container.Resources.Requests.Cpu().String()).Should(Equal("150m"))
Expect(len(container.LivenessProbe.Exec.Command)).Should(Equal(3))
Expect(container.LivenessProbe.Exec.Command[2]).Should(Equal("wget -SO- -T 10 -t 2 'http://127.0.0.1:80/mapserver?SERVICE=wfs&request=GetCapabilities' 2>&1 | egrep -aiA10 'HTTP/1.1 200' | egrep -i 'Content-Type: text/xml'"))
Expand Down
2 changes: 1 addition & 1 deletion internal/controller/wms_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ var _ = Describe("WMS Controller", func() {
Expect(containerMapserver.Ports[0].ContainerPort).Should(Equal(int32(80)))
Expect(containerMapserver.Image).Should(Equal(reconcilerImages.MapserverImage))
Expect(containerMapserver.ImagePullPolicy).Should(Equal(corev1.PullIfNotPresent))
Expect(containerMapserver.Resources.Limits.Memory().String()).Should(Equal("800M"))
Expect(containerMapserver.Resources.Limits.Memory().String()).Should(Equal("12M"))
Expect(containerMapserver.Resources.Requests.Cpu().String()).Should(Equal("100m"))
Expect(len(containerMapserver.LivenessProbe.Exec.Command)).Should(Equal(3))
Expect(containerMapserver.LivenessProbe.Exec.Command[2]).Should(Equal("wget -SO- -T 10 -t 2 'http://127.0.0.1:80/mapserver?SERVICE=wms&request=GetCapabilities' 2>&1 | egrep -aiA10 'HTTP/1.1 200' | egrep -i 'Content-Type: text/xml'"))
Expand Down
Loading