func (h *DesireAppHandler) createDesiredApp( logger lager.Logger, desireAppMessage cc_messages.DesireAppRequestFromCC, ) error { var builder recipebuilder.RecipeBuilder = h.recipeBuilders["buildpack"] if desireAppMessage.DockerImageUrl != "" { builder = h.recipeBuilders["docker"] } desiredLRP, err := builder.Build(&desireAppMessage) if err != nil { logger.Error("failed-to-build-recipe", err) return err } logger.Debug("creating-desired-lrp", lager.Data{"routes": sanitizeRoutes(desiredLRP.Routes)}) err = h.bbsClient.DesireLRP(desiredLRP) if err != nil { logger.Error("failed-to-create-lrp", err) return err } logger.Debug("created-desired-lrp") return nil }
func (p *Processor) createMissingDesiredLRPs( logger lager.Logger, cancel <-chan struct{}, missing <-chan []cc_messages.DesireAppRequestFromCC, invalidCount *int32, ) <-chan error { logger = logger.Session("create-missing-desired-lrps") errc := make(chan error, 1) go func() { defer close(errc) for { var desireAppRequests []cc_messages.DesireAppRequestFromCC select { case <-cancel: return case selected, open := <-missing: if !open { return } desireAppRequests = selected } works := make([]func(), len(desireAppRequests)) for i, desireAppRequest := range desireAppRequests { desireAppRequest := desireAppRequest var builder recipebuilder.RecipeBuilder = p.builders["buildpack"] if desireAppRequest.DockerImageUrl != "" { builder = p.builders["docker"] } works[i] = func() { logger.Debug("building-create-desired-lrp-request", desireAppRequestDebugData(&desireAppRequest)) desired, err := builder.Build(&desireAppRequest) if err != nil { logger.Error("failed-building-create-desired-lrp-request", err, lager.Data{"process-guid": desireAppRequest.ProcessGuid}) errc <- err return } logger.Debug("succeeded-building-create-desired-lrp-request", desireAppRequestDebugData(&desireAppRequest)) logger.Debug("creating-desired-lrp", createDesiredReqDebugData(desired)) err = p.bbsClient.DesireLRP(desired) if err != nil { logger.Error("failed-creating-desired-lrp", err, lager.Data{"process-guid": desired.ProcessGuid}) if models.ConvertError(err).Type == models.Error_InvalidRequest { atomic.AddInt32(invalidCount, int32(1)) } else { errc <- err } return } logger.Debug("succeeded-creating-desired-lrp", createDesiredReqDebugData(desired)) } } throttler, err := workpool.NewThrottler(p.updateLRPWorkPoolSize, works) if err != nil { errc <- err return } logger.Info("processing-batch", lager.Data{"size": len(desireAppRequests)}) throttler.Work() logger.Info("done-processing-batch", lager.Data{"size": len(desireAppRequests)}) } }() return errc }