prow/cmd/pipeline/controller.go
func (c *controller) Run(threads int, stop <-chan struct{}) error {
	defer runtime.HandleCrash()
	defer c.workqueue.ShutDown()

	logrus.Info("Starting Pipeline controller")
	logrus.Info("Waiting for informer caches to sync")
	if ok := cache.WaitForCacheSync(stop, c.hasSynced); !ok {
		return fmt.Errorf("failed to wait for caches to sync")
	}

	logrus.Info("Starting workers")
	for i := 0; i < threads; i++ {
		go wait.Until(c.runWorker, time.Second, stop)
	}

	logrus.Info("Started workers")
	<-stop
	logrus.Info("Shutting down workers")
	return nil
}
func (c *controller) Run(threads int, stop <-chan struct{}) error {
	defer runtime.HandleCrash()
	defer c.workqueue.ShutDown()

	logrus.Info("Starting Pipeline controller")
	logrus.Info("Waiting for informer caches to sync")
	if ok := cache.WaitForCacheSync(stop, c.hasSynced); !ok {
		return fmt.Errorf("failed to wait for caches to sync")
	}

	logrus.Info("Starting workers")
	for i := 0; i < threads; i++ {
		go wait.Until(c.runWorker, time.Second, stop)
	}

	logrus.Info("Started workers")
	<-stop
	logrus.Info("Shutting down workers")
	return nil
}
func ( c * controller ) Run ( threads int , stop <- chan struct { } ) error { defer runtime . HandleCrash ( ) defer c . workqueue . ShutDown ( ) logrus . Info ( " " ) logrus . Info ( " " ) if ok := cache . WaitForCacheSync ( stop , c . hasSynced ) ; ! ok { return fmt . Errorf ( " " ) } logrus . Info ( " " ) for i := 0 ; i < threads ; i ++ { go wait . Until ( c . runWorker , time . Second , stop ) } logrus . Info ( " " ) <- stop logrus . Info ( " " ) return nil }
// Run starts threads workers, returning after receiving a stop signal.
Run starts threads workers returning after receiving a stop signal .