code: func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenAPIService, stopCh <-chan struct{}) {
  	defer utilruntime.HandleCrash()
  	defer c.queue.ShutDown()
  	defer klog.Infof("Shutting down OpenAPI controller")
  
  	klog.Infof("Starting OpenAPI controller")
  
  	c.staticSpec = staticSpec
  	c.openAPIService = openAPIService
  
  	if !cache.WaitForCacheSync(stopCh, c.crdsSynced) {
  		utilruntime.HandleError(fmt.Errorf("timed out waiting for caches to sync"))
  		return
  	}
  
  	// create initial spec to avoid merging once per CRD on startup
  	crds, err := c.crdLister.List(labels.Everything())
  	if err != nil {
  		utilruntime.HandleError(fmt.Errorf("failed to initially list all CRDs: %v", err))
  		return
  	}
  	for _, crd := range crds {
  		if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) {
  			continue
  		}
  		newSpecs, changed, err := buildVersionSpecs(crd, nil)
  		if err != nil {
  			utilruntime.HandleError(fmt.Errorf("failed to build OpenAPI spec of CRD %s: %v", crd.Name, err))
  		} else if !changed {
  			continue
  		}
  		c.crdSpecs[crd.Name] = newSpecs
  	}
  	if err := c.updateSpecLocked(); err != nil {
  		utilruntime.HandleError(fmt.Errorf("failed to initially create OpenAPI spec for CRDs: %v", err))
  		return
  	}
  
  	// only start one worker thread since its a slow moving API
  	go wait.Until(c.runWorker, time.Second, stopCh)
  
  	<-stopCh
  }
docs: // Run sets openAPIAggregationManager and starts workers