func fetchStateAndBuildZones(logger lager.Logger, workPool *workpool.WorkPool, clients map[string]rep.Client, metricEmitter auctiontypes.AuctionMetricEmitterDelegate) map[string]Zone { wg := &sync.WaitGroup{} zones := map[string]Zone{} lock := &sync.Mutex{} wg.Add(len(clients)) for guid, client := range clients { guid, client := guid, client workPool.Submit(func() { defer wg.Done() state, err := client.State() if err != nil { metricEmitter.FailedCellStateRequest() logger.Error("failed-to-get-state", err, lager.Data{"cell-guid": guid}) return } if state.Evacuating { return } cell := NewCell(logger, guid, client, state) lock.Lock() zones[state.Zone] = append(zones[state.Zone], cell) lock.Unlock() }) } wg.Wait() return zones }
DiskMB: 100.0, Containers: 100, } var timeout time.Duration var workers int var svgReport *visualization.SVGReport var reports []*visualization.Report var reportName string var disableSVGReport bool var sessionsToTerminate []*gexec.Session var runnerProcess ifrit.Process var runnerDelegate *auctionRunnerDelegate var workPool *workpool.WorkPool var runner auctiontypes.AuctionRunner var logger lager.Logger func init() { flag.StringVar(&communicationMode, "communicationMode", "inprocess", "one of inprocess or http") flag.DurationVar(&timeout, "timeout", time.Second, "timeout when waiting for responses from remote calls") flag.IntVar(&workers, "workers", 500, "number of concurrent communication worker pools") flag.BoolVar(&disableSVGReport, "disableSVGReport", false, "disable displaying SVG reports of the simulation runs") flag.StringVar(&reportName, "reportName", "report", "report name") } func TestAuction(t *testing.T) { RegisterFailHandler(Fail) RunSpecs(t, "Auction Suite")
"github.com/cloudfoundry-incubator/auction/auctionrunner" "github.com/cloudfoundry-incubator/auction/auctiontypes/fakes" "github.com/cloudfoundry-incubator/rep" "github.com/cloudfoundry-incubator/rep/repfakes" "github.com/cloudfoundry/gunk/workpool" "github.com/pivotal-golang/lager" "github.com/pivotal-golang/lager/lagertest" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("ZoneBuilder", func() { var repA, repB, repC *repfakes.FakeSimClient var clients map[string]rep.Client var workPool *workpool.WorkPool var logger lager.Logger var metricEmitter *fakes.FakeAuctionMetricEmitterDelegate BeforeEach(func() { logger = lagertest.NewTestLogger("test") var err error workPool, err = workpool.NewWorkPool(5) Expect(err).NotTo(HaveOccurred()) repA = new(repfakes.FakeSimClient) repB = new(repfakes.FakeSimClient) repC = new(repfakes.FakeSimClient) clients = map[string]rep.Client{
package workpool_test import ( "github.com/cloudfoundry/gunk/workpool" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("WorkPool", func() { var pool *workpool.WorkPool AfterEach(func() { if pool != nil { pool.Stop() } }) Context("when max workers is non-positive", func() { It("errors", func() { _, err := workpool.NewWorkPool(0) Expect(err).To(HaveOccurred()) }) }) Context("when max workers is positive", func() { var maxWorkers int var calledChan chan int var unblockChan chan struct{} var work func(int) func()