Skip to content

Commit 455395d

Browse files
authored
optimisations (#5641)
1 parent 6decb39 commit 455395d

File tree

14 files changed

+169
-112
lines changed

14 files changed

+169
-112
lines changed

api/restHandler/app/workflow/AppWorkflowRestHandler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,9 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
280280
} else {
281281
workflows[bean3.Workflows] = []appWorkflow.AppWorkflowDto{}
282282
}
283-
isAppLevelGitOpsConfigured, err := impl.chartService.IsGitOpsRepoConfiguredForDevtronApps(appId)
283+
isAppLevelGitOpsConfigured, err := impl.chartService.IsGitOpsRepoConfiguredForDevtronApp(appId)
284284
if err != nil && !util.IsErrNoRows(err) {
285-
impl.Logger.Errorw("service err, IsGitOpsRepoConfiguredForDevtronApps", "appId", appId, "envIds", envIds, "err", err)
285+
impl.Logger.Errorw("service err, IsGitOpsRepoConfiguredForDevtronApp", "appId", appId, "envIds", envIds, "err", err)
286286
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
287287
return
288288
}

cmd/external-app/wire_gen.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/sql/repository/deploymentConfig/repository.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,17 +134,15 @@ func (impl *RepositoryImpl) GetAppLevelConfigByAppIds(appIds []int) ([]*Deployme
134134
func (impl *RepositoryImpl) GetAppAndEnvLevelConfigsInBulk(appIdToEnvIdsMap map[int][]int) ([]*DeploymentConfig, error) {
135135
var result []*DeploymentConfig
136136
err := impl.dbConnection.Model(&result).
137-
WhereGroup(func(query *orm.Query) (*orm.Query, error) {
137+
WhereOrGroup(func(query *orm.Query) (*orm.Query, error) {
138138
for appId, envIds := range appIdToEnvIdsMap {
139139
if len(envIds) == 0 {
140140
continue
141141
}
142-
query = query.WhereOr(" app_id = ? and environment_id in (?) and active=true ", appId, pg.In(envIds))
142+
query = query.Where("app_id = ?", appId).Where("environment_id in (?)", pg.In((envIds))).Where("active = ?", true)
143143
}
144144
return query, nil
145-
}).
146-
Where("active = ?", true).
147-
Select()
145+
}).Select()
148146
return result, err
149147
}
150148

internal/sql/repository/pipelineConfig/PipelineRepository.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,11 @@ type PipelineRepository interface {
100100
FindAllPipelineCreatedCountInLast24Hour() (pipelineCount int, err error)
101101
FindAllDeletedPipelineCountInLast24Hour() (pipelineCount int, err error)
102102
FindActiveByEnvId(envId int) (pipelines []*Pipeline, err error)
103+
FindActivePipelineAppIdsByEnvId(envId int) ([]int, error)
103104
FindActivePipelineByEnvId(envId int) (pipelines []*Pipeline, err error)
104105
FindActiveByEnvIds(envId []int) (pipelines []*Pipeline, err error)
105106
FindActiveByInFilter(envId int, appIdIncludes []int) (pipelines []*Pipeline, err error)
107+
FindActivePipelineAppIdsByInFilter(envId int, appIdIncludes []int) ([]int, error)
106108
FindActiveByNotFilter(envId int, appIdExcludes []int) (pipelines []*Pipeline, err error)
107109
FindAllPipelinesByChartsOverrideAndAppIdAndChartId(chartOverridden bool, appId int, chartId int) (pipelines []*Pipeline, err error)
108110
FindActiveByAppIdAndPipelineId(appId int, pipelineId int) ([]*Pipeline, error)
@@ -128,6 +130,7 @@ type PipelineRepository interface {
128130
FindWithEnvironmentByCiIds(ctx context.Context, cIPipelineIds []int) ([]*Pipeline, error)
129131
FindDeploymentAppTypeByAppIdAndEnvId(appId, envId int) (string, error)
130132
FindByAppIdToEnvIdsMapping(appIdToEnvIds map[int][]int) ([]*Pipeline, error)
133+
FindDeploymentAppTypeByIds(ids []int) (pipelines []*Pipeline, err error)
131134
}
132135

133136
type CiArtifactDTO struct {
@@ -483,6 +486,15 @@ func (impl PipelineRepositoryImpl) FindActiveByEnvId(envId int) (pipelines []*Pi
483486
return pipelines, err
484487
}
485488

489+
func (impl PipelineRepositoryImpl) FindActivePipelineAppIdsByEnvId(envId int) ([]int, error) {
490+
var appIds []int
491+
err := impl.dbConnection.Model((*Pipeline)(nil)).Column("app_id").
492+
Where("environment_id = ?", envId).
493+
Where("deleted = ?", false).
494+
Select(&appIds)
495+
return appIds, err
496+
}
497+
486498
func (impl PipelineRepositoryImpl) FindActivePipelineByEnvId(envId int) (pipelines []*Pipeline, err error) {
487499
err = impl.dbConnection.Model(&pipelines).Column("pipeline.*", "App", "Environment").
488500
Where("environment_id = ?", envId).
@@ -509,6 +521,15 @@ func (impl PipelineRepositoryImpl) FindActiveByInFilter(envId int, appIdIncludes
509521
return pipelines, err
510522
}
511523

524+
func (impl PipelineRepositoryImpl) FindActivePipelineAppIdsByInFilter(envId int, appIdIncludes []int) ([]int, error) {
525+
var appIds []int
526+
err := impl.dbConnection.Model((*Pipeline)(nil)).Column("app_id").
527+
Where("environment_id = ?", envId).
528+
Where("app_id in (?)", pg.In(appIdIncludes)).
529+
Where("deleted = ?", false).Select(&appIds)
530+
return appIds, err
531+
}
532+
512533
func (impl PipelineRepositoryImpl) FindActiveByNotFilter(envId int, appIdExcludes []int) (pipelines []*Pipeline, err error) {
513534
err = impl.dbConnection.Model(&pipelines).Column("pipeline.*", "App", "Environment").
514535
Where("environment_id = ?", envId).
@@ -812,3 +833,9 @@ func (impl PipelineRepositoryImpl) FindByAppIdToEnvIdsMapping(appIdToEnvIds map[
812833
Select()
813834
return pipelines, err
814835
}
836+
837+
func (impl PipelineRepositoryImpl) FindDeploymentAppTypeByIds(ids []int) (pipelines []*Pipeline, err error) {
838+
err = impl.dbConnection.Model(&pipelines).Column("id", "app_id", "env_id", "deployment_app_type").
839+
Where("id in (?)", pg.In(ids)).Where("deleted = ?", false).Select()
840+
return pipelines, err
841+
}

pkg/appWorkflow/AppWorkflowService.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ func (impl AppWorkflowServiceImpl) FindCdPipelinesByAppId(appId int) (*bean.CdPi
851851
AppId: appId,
852852
}
853853

854-
isAppLevelGitOpsConfigured, err := impl.chartService.IsGitOpsRepoConfiguredForDevtronApps(appId)
854+
isAppLevelGitOpsConfigured, err := impl.chartService.IsGitOpsRepoConfiguredForDevtronApp(appId)
855855
if err != nil {
856856
impl.Logger.Errorw("error in fetching latest chart details for app by appId")
857857
return nil, err

pkg/chart/ChartService.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ type ChartService interface {
6767

6868
ConfigureGitOpsRepoUrlForApp(appId int, repoUrl, chartLocation string, isCustomRepo bool, userId int32) (*bean2.DeploymentConfig, error)
6969

70-
IsGitOpsRepoConfiguredForDevtronApps(appId int) (bool, error)
70+
IsGitOpsRepoConfiguredForDevtronApp(appId int) (bool, error)
71+
IsGitOpsRepoConfiguredForDevtronApps(appIds []int) (map[int]bool, error)
7172
IsGitOpsRepoAlreadyRegistered(gitOpsRepoUrl string) (bool, error)
7273
}
7374

@@ -542,7 +543,7 @@ func (impl *ChartServiceImpl) getNewVersion(chartRepo, chartName, refChartLocati
542543
return placeholders[0] + "." + placeholders[1] + "." + strconv.FormatInt(count, 10), nil
543544
}
544545

545-
func (impl *ChartServiceImpl) IsGitOpsRepoConfiguredForDevtronApps(appId int) (bool, error) {
546+
func (impl *ChartServiceImpl) IsGitOpsRepoConfiguredForDevtronApp(appId int) (bool, error) {
546547
gitOpsConfigStatus, err := impl.gitOpsConfigReadService.IsGitOpsConfigured()
547548
if err != nil {
548549
impl.logger.Errorw("error in fetching latest chart for app by appId")
@@ -560,6 +561,30 @@ func (impl *ChartServiceImpl) IsGitOpsRepoConfiguredForDevtronApps(appId int) (b
560561
return !apiGitOpsBean.IsGitOpsRepoNotConfigured(latestChartConfiguredInApp.GitRepoUrl), nil
561562
}
562563

564+
func (impl *ChartServiceImpl) IsGitOpsRepoConfiguredForDevtronApps(appIds []int) (map[int]bool, error) {
565+
gitOpsConfigStatus, err := impl.gitOpsConfigReadService.IsGitOpsConfigured()
566+
if err != nil {
567+
impl.logger.Errorw("error in fetching latest chart for app by appId")
568+
return nil, err
569+
}
570+
appIdRepoConfiguredMap := make(map[int]bool, len(appIds))
571+
for _, appId := range appIds {
572+
if !gitOpsConfigStatus.IsGitOpsConfigured {
573+
appIdRepoConfiguredMap[appId] = false
574+
} else if !gitOpsConfigStatus.AllowCustomRepository {
575+
appIdRepoConfiguredMap[appId] = true
576+
} else {
577+
latestChartConfiguredInApp, err := impl.FindLatestChartForAppByAppId(appId)
578+
if err != nil {
579+
impl.logger.Errorw("error in fetching latest chart for app by appId")
580+
return nil, err
581+
}
582+
appIdRepoConfiguredMap[appId] = !apiGitOpsBean.IsGitOpsRepoNotConfigured(latestChartConfiguredInApp.GitRepoUrl)
583+
}
584+
}
585+
return appIdRepoConfiguredMap, nil
586+
}
587+
563588
func (impl *ChartServiceImpl) FindLatestChartForAppByAppId(appId int) (chartTemplate *TemplateRequest, err error) {
564589
chart, err := impl.chartRepository.FindLatestChartForAppByAppId(appId)
565590
if err != nil {

pkg/deployment/common/bean/bean.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type UniqueDeploymentConfigIdentifier string
2222
type DeploymentConfigSelector struct {
2323
AppId int
2424
EnvironmentId int
25+
CDPipelineId int
2526
}
2627

2728
func (u UniqueDeploymentConfigIdentifier) String() string {

pkg/deployment/common/deploymentConfigService.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package common
22

33
import (
4+
"fmt"
45
"github.com/devtron-labs/devtron/api/bean/gitOps"
56
appRepository "github.com/devtron-labs/devtron/internal/sql/repository/app"
67
"github.com/devtron-labs/devtron/internal/sql/repository/deploymentConfig"
@@ -24,6 +25,7 @@ type DeploymentConfigService interface {
2425
GetAndMigrateConfigIfAbsentForHelmApp(appId, envId int) (*bean.DeploymentConfig, error)
2526
GetAppLevelConfigForDevtronApp(appId int) (*bean.DeploymentConfig, error)
2627
UpdateRepoUrlForAppAndEnvId(repoURL string, appId, envId int) error
28+
GetDeploymentAppTypeForCDInBulk(pipelines []*pipelineConfig.Pipeline) (map[int]string, error)
2729
}
2830

2931
type DeploymentConfigServiceImpl struct {
@@ -430,3 +432,30 @@ func (impl *DeploymentConfigServiceImpl) UpdateRepoUrlForAppAndEnvId(repoURL str
430432
}
431433
return nil
432434
}
435+
436+
func (impl *DeploymentConfigServiceImpl) GetDeploymentAppTypeForCDInBulk(pipelines []*pipelineConfig.Pipeline) (map[int]string, error) {
437+
resp := make(map[int]string, len(pipelines)) //map of pipelineId and deploymentAppType
438+
if impl.deploymentServiceTypeConfig.UseDeploymentConfigData {
439+
appIdEnvIdMapping := make(map[int][]int, len(pipelines))
440+
appIdEnvIdKeyPipelineIdMap := make(map[string]int, len(pipelines))
441+
for _, pipeline := range pipelines {
442+
appIdEnvIdMapping[pipeline.AppId] = append(appIdEnvIdMapping[pipeline.AppId], pipeline.EnvironmentId)
443+
appIdEnvIdKeyPipelineIdMap[fmt.Sprintf("%d-%d", pipeline.AppId, pipeline.EnvironmentId)] = pipeline.Id
444+
}
445+
configs, err := impl.deploymentConfigRepository.GetAppAndEnvLevelConfigsInBulk(appIdEnvIdMapping)
446+
if err != nil {
447+
impl.logger.Errorw("error, GetAppAndEnvLevelConfigsInBulk", "appIdEnvIdMapping", appIdEnvIdMapping, "err", err)
448+
return nil, err
449+
}
450+
for _, config := range configs {
451+
pipelineId := appIdEnvIdKeyPipelineIdMap[fmt.Sprintf("%d-%d", config.AppId, config.EnvironmentId)]
452+
resp[pipelineId] = config.DeploymentAppType
453+
}
454+
}
455+
for _, pipeline := range pipelines {
456+
if _, ok := resp[pipeline.Id]; !ok { //not found in map, either flag is disabled or config not migrated yet. Getting from old data
457+
resp[pipeline.Id] = pipeline.DeploymentAppType
458+
}
459+
}
460+
return resp, nil
461+
}

pkg/pipeline/AppDeploymentTypeChangeManager.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -418,14 +418,6 @@ func (impl *AppDeploymentTypeChangeManagerImpl) TriggerDeploymentAfterTypeChange
418418
"err", err)
419419
}
420420

421-
deploymentConfigSelector := make([]*bean4.DeploymentConfigSelector, len(pipelineIds))
422-
for _, pipeline := range pipelines {
423-
deploymentConfigSelector = append(deploymentConfigSelector, &bean4.DeploymentConfigSelector{
424-
AppId: pipeline.AppId,
425-
EnvironmentId: pipeline.EnvironmentId,
426-
})
427-
}
428-
429421
for _, p := range pipelines {
430422
envDeploymentConfig, err := impl.deploymentConfigService.GetAndMigrateConfigIfAbsentForDevtronApps(p.AppId, p.EnvironmentId)
431423
if err != nil {

pkg/pipeline/BuildPipelineConfigService.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ import (
3333
pipelineConfigBean "github.com/devtron-labs/devtron/pkg/pipeline/bean"
3434
"github.com/devtron-labs/devtron/pkg/pipeline/bean/CiPipeline"
3535
"github.com/devtron-labs/devtron/pkg/pipeline/history"
36+
"github.com/devtron-labs/devtron/pkg/pipeline/repository"
3637
"github.com/devtron-labs/devtron/pkg/pipeline/types"
38+
repository2 "github.com/devtron-labs/devtron/pkg/plugin/repository"
3739
resourceGroup2 "github.com/devtron-labs/devtron/pkg/resourceGroup"
3840
"github.com/devtron-labs/devtron/pkg/sql"
3941
"github.com/devtron-labs/devtron/util/rbac"
@@ -133,6 +135,8 @@ type CiPipelineConfigServiceImpl struct {
133135
customTagService CustomTagService
134136
cdWorkflowRepository pipelineConfig.CdWorkflowRepository
135137
buildPipelineSwitchService BuildPipelineSwitchService
138+
pipelineStageRepository repository.PipelineStageRepository
139+
globalPluginRepository repository2.GlobalPluginRepository
136140
}
137141

138142
func NewCiPipelineConfigServiceImpl(logger *zap.SugaredLogger,
@@ -157,8 +161,8 @@ func NewCiPipelineConfigServiceImpl(logger *zap.SugaredLogger,
157161
customTagService CustomTagService,
158162
cdWorkflowRepository pipelineConfig.CdWorkflowRepository,
159163
buildPipelineSwitchService BuildPipelineSwitchService,
160-
) *CiPipelineConfigServiceImpl {
161-
164+
pipelineStageRepository repository.PipelineStageRepository,
165+
globalPluginRepository repository2.GlobalPluginRepository) *CiPipelineConfigServiceImpl {
162166
securityConfig := &SecurityConfig{}
163167
err := env.Parse(securityConfig)
164168
if err != nil {
@@ -188,6 +192,8 @@ func NewCiPipelineConfigServiceImpl(logger *zap.SugaredLogger,
188192
customTagService: customTagService,
189193
cdWorkflowRepository: cdWorkflowRepository,
190194
buildPipelineSwitchService: buildPipelineSwitchService,
195+
pipelineStageRepository: pipelineStageRepository,
196+
globalPluginRepository: globalPluginRepository,
191197
}
192198
}
193199

0 commit comments

Comments
 (0)