func matchLrpAuction(offerAggregates [][]*mesos.Offer, lrpAuction *auctiontypes.LRPAuction) (int, []*mesos.Offer) { lrpAuction.Attempts++ for i, offers := range offerAggregates { if getOffersMem(offers) > float64(lrpAuction.MemoryMB) && getOffersCpu(offers) > taskCpuAllocation && getOffersDisk(offers) > float64(lrpAuction.DiskMB) { lrpAuction.Winner = offers[0].SlaveId.GetValue() lrpAuction.WaitDuration = time.Now().Sub(lrpAuction.QueueTime) offers[0].Resources = append(offers[0].Resources, util.NewScalarResource("mem", float64(-lrpAuction.MemoryMB)), util.NewScalarResource("cpu", -taskCpuAllocation), util.NewScalarResource("disk", float64(-lrpAuction.DiskMB))) return i, offers } } lrpAuction.PlacementError = rep.ErrorInsufficientResources.Error() return -1, nil }
results = s.Schedule(auctiontypes.AuctionRequest{LRPs: []auctiontypes.LRPAuction{startAuction}}) }) It("picks the best cell for the job", func() { Expect(clients["A-cell"].PerformCallCount()).To(Equal(0)) Expect(clients["B-cell"].PerformCallCount()).To(Equal(0)) Expect(clients["C-cell"].PerformCallCount()).To(Equal(1)) startsToC := clients["C-cell"].PerformArgsForCall(0).LRPs Expect(startsToC).To(ConsistOf(startAuction.LRP)) }) It("marks the start auction as succeeded", func() { setLRPWinner("C-cell", &startAuction) startAuction.WaitDuration = time.Minute Expect(results.SuccessfulLRPs).To(ConsistOf(startAuction)) Expect(results.FailedLRPs).To(BeEmpty()) }) }) }) }) Context("with an existing LRP (zone balancing)", func() { BeforeEach(func() { startAuction = BuildLRPAuction("pg-3", "domain", 1, linuxRootFSURL, 10, 10, clock.Now()) }) Context("when it picks a winner", func() { BeforeEach(func() { clock.Increment(time.Minute)