func subtractResourcesFromNUMANodeList()

in pkg/noderesourcetopology/numaresources.go [145:182]


func subtractResourcesFromNUMANodeList(lh logr.Logger, nodes NUMANodeList, numaID int, qos corev1.PodQOSClass, containerRes corev1.ResourceList) error {
	logEntries := []any{"numaCell", numaID}

	for _, node := range nodes {
		if node.NUMAID != numaID {
			continue
		}

		lh.V(5).Info("NUMA resources before", append(logEntries, stringify.ResourceListToLoggable(node.Resources)...)...)

		for resName, resQty := range containerRes {
			isAffine := isNUMAAffineResource(resName)
			if qos != corev1.PodQOSGuaranteed && isAffine {
				lh.V(4).Info("ignoring QoS-depending exclusive request", "resource", resName, "QoS", qos)
				continue
			}
			if resQty.IsZero() {
				lh.V(4).Info("ignoring zero-valued request", "resource", resName)
				continue
			}
			nResQ, ok := node.Resources[resName]
			if !ok {
				lh.V(4).Info("ignoring missing resource", "resource", resName, "affine", isAffine, "request", resQty.String())
				continue
			}
			nodeResQty := nResQ.DeepCopy()
			nodeResQty.Sub(resQty)
			if nodeResQty.Sign() < 0 {
				lh.V(1).Info("resource quantity should not be a negative value", "numaCell", numaID, "resource", resName, "quantity", nResQ.String(), "request", resQty.String())
				return fmt.Errorf("resource %q request %s exceeds NUMA %d availability %s", string(resName), resQty.String(), numaID, nResQ.String())
			}
			node.Resources[resName] = nodeResQty
		}

		lh.V(5).Info("NUMA resources after", append(logEntries, stringify.ResourceListToLoggable(node.Resources)...)...)
	}
	return nil
}