func (s *Scheduler) scheduleTaskAuction(taskAuction *auctiontypes.TaskAuction, startingContainerWeight float64) (*auctiontypes.TaskAuction, error) { var winnerCell *Cell winnerScore := 1e20 filteredZones := []Zone{} for _, zone := range s.zones { cells := zone.FilterCells(taskAuction.RootFs) if len(cells) > 0 { filteredZones = append(filteredZones, Zone(cells)) } } if len(filteredZones) == 0 { return nil, auctiontypes.ErrorCellMismatch } for _, zone := range filteredZones { for _, cell := range zone { score, err := cell.ScoreForTask(&taskAuction.Task, startingContainerWeight) if err != nil { continue } if score < winnerScore { winnerScore = score winnerCell = cell } } } if winnerCell == nil { return nil, rep.ErrorInsufficientResources } err := winnerCell.ReserveTask(&taskAuction.Task) if err != nil { s.logger.Error("task-failed-to-reserve-cell", err, lager.Data{"cell-guid": winnerCell.Guid, "task-guid": taskAuction.Identifier()}) return nil, err } winningAuction := taskAuction.Copy() winningAuction.Winner = winnerCell.Guid return &winningAuction, nil }