[v10.0.x] Nested folders: Fix missing URL from folder responses (#68226)
Nested folders: Fix missing URL from folder responses (#68082)
* Nested folders: Set URL in folder responses always
* Apply suggestions from code review
Co-authored-by: Arati R. <33031346+suntala@users.noreply.github.com>
(cherry picked from commit d883404f50)
Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
This commit is contained in:
co-authored by
Sofia Papagiannaki
parent
869a693bcf
commit
fdbe99b48a
@@ -5,10 +5,9 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/dskit/concurrency"
|
||||
"github.com/grafana/grafana/pkg/infra/db"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/infra/slugify"
|
||||
"github.com/grafana/grafana/pkg/services/dashboards"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
@@ -74,7 +73,7 @@ func (ss *sqlStore) Create(ctx context.Context, cmd folder.CreateFolderCommand)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return foldr, err
|
||||
return foldr.WithURL(), err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) Delete(ctx context.Context, uid string, orgID int64) error {
|
||||
@@ -159,7 +158,7 @@ func (ss *sqlStore) Update(ctx context.Context, cmd folder.UpdateFolderCommand)
|
||||
return nil
|
||||
})
|
||||
|
||||
return foldr, err
|
||||
return foldr.WithURL(), err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) Get(ctx context.Context, q folder.GetFolderQuery) (*folder.Folder, error) {
|
||||
@@ -185,8 +184,7 @@ func (ss *sqlStore) Get(ctx context.Context, q folder.GetFolderQuery) (*folder.F
|
||||
}
|
||||
return nil
|
||||
})
|
||||
foldr.URL = dashboards.GetFolderURL(foldr.UID, slugify.Slugify(foldr.Title))
|
||||
return foldr, err
|
||||
return foldr.WithURL(), err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetParents(ctx context.Context, q folder.GetParentsQuery) ([]*folder.Folder, error) {
|
||||
@@ -218,6 +216,13 @@ func (ss *sqlStore) GetParents(ctx context.Context, q folder.GetParentsQuery) ([
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := concurrency.ForEachJob(ctx, len(folders), len(folders), func(ctx context.Context, idx int) error {
|
||||
folders[idx].WithURL()
|
||||
return nil
|
||||
}); err != nil {
|
||||
ss.log.Debug("failed to set URL to folders", "err", err)
|
||||
}
|
||||
default:
|
||||
ss.log.Debug("recursive CTE subquery is not supported; it fallbacks to the iterative implementation")
|
||||
return ss.getParentsMySQL(ctx, q)
|
||||
@@ -257,6 +262,13 @@ func (ss *sqlStore) GetChildren(ctx context.Context, q folder.GetChildrenQuery)
|
||||
if err != nil {
|
||||
return folder.ErrDatabaseError.Errorf("failed to get folder children: %w", err)
|
||||
}
|
||||
|
||||
if err := concurrency.ForEachJob(ctx, len(folders), len(folders), func(ctx context.Context, idx int) error {
|
||||
folders[idx].WithURL()
|
||||
return nil
|
||||
}); err != nil {
|
||||
ss.log.Debug("failed to set URL to folders", "err", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return folders, err
|
||||
@@ -281,7 +293,8 @@ func (ss *sqlStore) getParentsMySQL(ctx context.Context, cmd folder.GetParentsQu
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
folders = append(folders, f)
|
||||
|
||||
folders = append(folders, f.WithURL())
|
||||
uid = f.ParentUID
|
||||
if len(folders) > folder.MaxNestedFolderDepth {
|
||||
return folder.ErrMaximumDepthReached.Errorf("failed to get parent folders iteratively")
|
||||
|
||||
Reference in New Issue
Block a user