feat: [CDE-142]: gitspace count query optimization (#2230)

* feat: [CDE-142]: gitspace count query optimization
* feat: [CDE-142]: gitspace count query optimization
unified-ui
Ansuman Satapathy 2024-07-16 07:59:17 +00:00 committed by Harness
parent 6e516183fd
commit b7e720c220
3 changed files with 15 additions and 14 deletions

View File

@ -3,4 +3,5 @@ GITNESS_GIT_TRACE=true
GITNESS_PRINCIPAL_ADMIN_EMAIL=admin@gitness.io
GITNESS_PRINCIPAL_ADMIN_PASSWORD=changeit
GITNESS_WEBHOOK_ALLOW_LOOPBACK=true
GITNESS_METRIC_ENABLED=false
GITNESS_METRIC_ENABLED=false
GITNESS_GITSPACE_ENABLE=true

View File

@ -89,7 +89,6 @@ func (c *Controller) Create(
if err != nil {
return nil, err
}
// TODO figure out how to flush the DB txn above before we proceed.
err = c.tx.WithTx(ctx, func(ctx context.Context) error {
infraProviderResource, err := c.infraProviderSvc.FindResourceByIdentifier(
ctx,

View File

@ -51,25 +51,22 @@ func (c *Controller) ListGitspaces(
if err != nil {
return fmt.Errorf("failed to list gitspace configs: %w", err)
}
count, err = c.gitspaceConfigStore.Count(ctx, gitspaceFilter)
if err != nil {
return fmt.Errorf("failed to count gitspaces in space: %w", err)
}
var gitspaceConfigIDs = make([]int64, 0)
for idx := 0; idx < len(gitspaceConfigs); idx++ {
if gitspaceConfigs[idx].IsDeleted {
continue
if len(gitspaceConfigs) >= filter.Size {
count, err = c.gitspaceConfigStore.Count(ctx, gitspaceFilter)
if err != nil {
return fmt.Errorf("failed to count gitspaces in space: %w", err)
}
gitspaceConfigs[idx].SpacePath = space.Path // As the API is for a space, this will remain same
gitspaceConfigIDs = append(gitspaceConfigIDs, gitspaceConfigs[idx].ID)
} else {
count = int64(len(gitspaceConfigs))
}
gitspaceInstancesMap, err := c.getLatestInstanceMap(ctx, gitspaceConfigIDs)
gitspaceInstancesMap, err := c.getLatestInstanceMap(ctx, gitspaceConfigs)
if err != nil {
return err
}
for _, gitspaceConfig := range gitspaceConfigs {
instance := gitspaceInstancesMap[gitspaceConfig.ID]
gitspaceConfig.GitspaceInstance = instance
gitspaceConfig.SpacePath = space.Path
if instance != nil {
gitspaceStateType, err := enum.GetGitspaceStateFromInstance(instance.State)
if err != nil {
@ -91,8 +88,12 @@ func (c *Controller) ListGitspaces(
func (c *Controller) getLatestInstanceMap(
ctx context.Context,
gitspaceConfigIDs []int64,
gitspaceConfigs []*types.GitspaceConfig,
) (map[int64]*types.GitspaceInstance, error) {
var gitspaceConfigIDs = make([]int64, 0)
for idx := 0; idx < len(gitspaceConfigs); idx++ {
gitspaceConfigIDs = append(gitspaceConfigIDs, gitspaceConfigs[idx].ID)
}
var gitspaceInstances, err = c.gitspaceInstanceStore.FindAllLatestByGitspaceConfigID(ctx, gitspaceConfigIDs)
if err != nil {
return nil, err