func (db *ETCDDB) UpdateDesiredLRP(logger lager.Logger, processGuid string, update *models.DesiredLRPUpdate) (*models.DesiredLRP, error) { logger.Info("starting") defer logger.Info("complete") var schedulingInfo *models.DesiredLRPSchedulingInfo var err error var beforeDesiredLRP *models.DesiredLRP for i := 0; i < 2; i++ { var index uint64 beforeDesiredLRP, index, err = db.rawDesiredLRPByProcessGuid(logger, processGuid) if err != nil { logger.Error("failed-to-fetch-desired-lrp", err) break } schedulingInfoValue := beforeDesiredLRP.DesiredLRPSchedulingInfo() schedulingInfo = &schedulingInfoValue schedulingInfo.ApplyUpdate(update) err = db.updateDesiredLRPSchedulingInfo(logger, schedulingInfo, index) if err != nil { logger.Error("update-scheduling-info-failed", err) modelErr := models.ConvertError(err) if modelErr != models.ErrResourceConflict { break } // Retry on CAS fail continue } break } if err != nil { return nil, err } return beforeDesiredLRP, nil }