func (s *Scheduler) createOrUpdateNode(n *api.Node) { nodeInfo, _ := s.nodeHeap.nodeInfo(n.ID) var resources api.Resources if n.Description != nil && n.Description.Resources != nil { resources = *n.Description.Resources // reconcile resources by looping over all tasks in this node for _, task := range nodeInfo.Tasks { reservations := taskReservations(task.Spec) resources.MemoryBytes -= reservations.MemoryBytes resources.NanoCPUs -= reservations.NanoCPUs } } nodeInfo.Node = n nodeInfo.AvailableResources = resources s.nodeHeap.addOrUpdateNode(nodeInfo) }
func parseResourceCPU(flags *pflag.FlagSet, resources *api.Resources, name string) error { cpu, err := flags.GetString(name) if err != nil { return err } nanoCPUs, ok := new(big.Rat).SetString(cpu) if !ok { return fmt.Errorf("invalid cpu: %s", cpu) } cpuRat := new(big.Rat).Mul(nanoCPUs, big.NewRat(1e9, 1)) if !cpuRat.IsInt() { return fmt.Errorf("CPU value cannot have more than 9 decimal places: %s", cpu) } resources.NanoCPUs = cpuRat.Num().Int64() return nil }