Storage/SQL: Support more filter by namespace/group/resource (#99249)

This commit is contained in:
Ryan McKinley
2025-01-21 12:15:08 +03:00
committed by GitHub
parent 680e6bc1f8
commit d91d729749
28 changed files with 150 additions and 31 deletions
@@ -1,7 +1,9 @@
DELETE FROM {{ .Ident "resource" }}
WHERE 1 = 1
AND {{ .Ident "namespace" }} = {{ .Arg .WriteEvent.Key.Namespace }}
AND {{ .Ident "group" }} = {{ .Arg .WriteEvent.Key.Group }}
AND {{ .Ident "resource" }} = {{ .Arg .WriteEvent.Key.Resource }}
AND {{ .Ident "name" }} = {{ .Arg .WriteEvent.Key.Name }}
WHERE 1 = 1
AND {{ .Ident "namespace" }} = {{ .Arg .WriteEvent.Key.Namespace }}
AND {{ .Ident "group" }} = {{ .Arg .WriteEvent.Key.Group }}
AND {{ .Ident "resource" }} = {{ .Arg .WriteEvent.Key.Resource }}
{{ if .WriteEvent.Key.Name }}
AND {{ .Ident "name" }} = {{ .Arg .WriteEvent.Key.Name }}
{{ end }}
;
@@ -1,4 +1,12 @@
DELETE FROM {{ .Ident "resource_history" }}
WHERE 1 = 1
WHERE {{ .Ident "namespace" }} = {{ .Arg .Namespace }}
{{ if .GUID }}
AND {{ .Ident "guid" }} = {{ .Arg .GUID }}
{{ end }}
{{ if .Group }}
AND {{ .Ident "group" }} = {{ .Arg .Group }}
{{ end }}
{{ if .Resource }}
AND {{ .Ident "resource" }} = {{ .Arg .Resource }}
{{ end }}
@@ -6,7 +6,9 @@ INSERT INTO {{ .Ident "resource_history" }}
{{ .Ident "namespace" }},
{{ .Ident "name" }},
{{ .Ident "folder" }},
{{ if gt .ResourceVersion 0 }}
{{ .Ident "resource_version" }},
{{ end }}
{{ .Ident "previous_resource_version"}},
{{ .Ident "value" }},
{{ .Ident "action" }}
@@ -19,7 +21,9 @@ INSERT INTO {{ .Ident "resource_history" }}
{{ .Arg .WriteEvent.Key.Namespace }},
{{ .Arg .WriteEvent.Key.Name }},
{{ .Arg .Folder }},
{{ if gt .ResourceVersion 0 }}
{{ .Arg .ResourceVersion }},
{{ end }}
{{ .Arg .WriteEvent.PreviousRV }},
{{ .Arg .WriteEvent.Value }},
{{ .Arg .WriteEvent.Type }}
@@ -9,6 +9,12 @@ WHERE 1 = 1
{{ if .Namespace }}
AND {{ .Ident "namespace" }} = {{ .Arg .Namespace }}
{{ end}}
{{ if .Group }}
AND {{ .Ident "group" }} = {{ .Arg .Group }}
{{ end}}
{{ if .Resource }}
AND {{ .Ident "resource" }} = {{ .Arg .Resource }}
{{ end}}
{{ if .Folder }}
AND {{ .Ident "folder" }} = {{ .Arg .Folder }}
{{ end}}
+1
View File
@@ -119,6 +119,7 @@ func (b *backend) runStartupDataMigrations(ctx context.Context) error {
_, err = dbutil.Exec(ctx, tx, sqlResourceHistoryDelete, &sqlResourceHistoryDeleteRequest{
SQLTemplate: sqltemplate.New(b.dialect),
GUID: req.GUID,
Namespace: item.Marker.GetNamespace(),
})
if err != nil {
return err
+21 -2
View File
@@ -78,6 +78,9 @@ type sqlResourceRequest struct {
GUID string
WriteEvent resource.WriteEvent
Folder string
// Useful when batch writing
ResourceVersion int64
}
func (r sqlResourceRequest) Validate() error {
@@ -87,6 +90,8 @@ func (r sqlResourceRequest) Validate() error {
type sqlStatsRequest struct {
sqltemplate.SQLTemplate
Namespace string
Group string
Resource string
Folder string
MinCount int
}
@@ -206,11 +211,25 @@ func (r sqlResourceHistoryListRequest) Results() (*resource.ResourceWrapper, err
type sqlResourceHistoryDeleteRequest struct {
sqltemplate.SQLTemplate
GUID string
// TODO, add other constraints
Namespace string
Group string
Resource string
}
func (r *sqlResourceHistoryDeleteRequest) Validate() error {
return nil // TODO
if r.Namespace == "" {
return fmt.Errorf("missing namespace")
}
if r.GUID == "" {
if r.Group == "" {
return fmt.Errorf("missing group")
}
if r.Resource == "" {
return fmt.Errorf("missing resource")
}
}
return nil
}
type sqlGetHistoryRequest struct {
+22 -3
View File
@@ -284,14 +284,14 @@ func TestUnifiedStorageQueries(t *testing.T) {
sqlResourceStats: {
{
Name: "query",
Name: "global",
Data: &sqlStatsRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
MinCount: 10, // Not yet used in query (only response filter)
},
},
{
Name: "query-namespace",
Name: "namespace",
Data: &sqlStatsRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
Namespace: "default",
@@ -299,7 +299,7 @@ func TestUnifiedStorageQueries(t *testing.T) {
},
},
{
Name: "query-folder",
Name: "folder",
Data: &sqlStatsRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
Namespace: "default",
@@ -307,6 +307,15 @@ func TestUnifiedStorageQueries(t *testing.T) {
MinCount: 10, // Not yet used in query (only response filter)
},
},
{
Name: "resource",
Data: &sqlStatsRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
Namespace: "default",
Group: "dashboard.grafana.app",
Resource: "dashboards",
},
},
},
sqlResourceBlobInsert: {
{
@@ -363,6 +372,16 @@ func TestUnifiedStorageQueries(t *testing.T) {
Data: &sqlResourceHistoryDeleteRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
GUID: `xxxx`,
Namespace: "ns",
},
},
{
Name: "wipe",
Data: &sqlResourceHistoryDeleteRequest{
SQLTemplate: mocks.NewTestingSQLTemplate(),
Namespace: "ns",
Group: "ggg",
Resource: "rrr",
},
},
},
@@ -1,7 +1,7 @@
DELETE FROM `resource`
WHERE 1 = 1
AND `namespace` = 'nn'
AND `group` = 'gg'
AND `resource` = 'rr'
AND `name` = 'name'
WHERE 1 = 1
AND `namespace` = 'nn'
AND `group` = 'gg'
AND `resource` = 'rr'
AND `name` = 'name'
;
@@ -1,3 +1,3 @@
DELETE FROM `resource_history`
WHERE 1 = 1
WHERE `namespace` = 'ns'
AND `guid` = 'xxxx'
@@ -0,0 +1,4 @@
DELETE FROM `resource_history`
WHERE `namespace` = 'ns'
AND `group` = 'ggg'
AND `resource` = 'rrr'
+16
View File
@@ -0,0 +1,16 @@
SELECT
`namespace`,
`group`,
`resource`,
COUNT(*),
MAX(`resource_version`)
FROM `resource`
WHERE 1 = 1
AND `namespace` = 'default'
AND `group` = 'dashboard.grafana.app'
AND `resource` = 'dashboards'
GROUP BY
`namespace`,
`group`,
`resource`
;
@@ -1,7 +1,7 @@
DELETE FROM "resource"
WHERE 1 = 1
AND "namespace" = 'nn'
AND "group" = 'gg'
AND "resource" = 'rr'
AND "name" = 'name'
WHERE 1 = 1
AND "namespace" = 'nn'
AND "group" = 'gg'
AND "resource" = 'rr'
AND "name" = 'name'
;
@@ -1,3 +1,3 @@
DELETE FROM "resource_history"
WHERE 1 = 1
WHERE "namespace" = 'ns'
AND "guid" = 'xxxx'
@@ -0,0 +1,4 @@
DELETE FROM "resource_history"
WHERE "namespace" = 'ns'
AND "group" = 'ggg'
AND "resource" = 'rrr'
+16
View File
@@ -0,0 +1,16 @@
SELECT
"namespace",
"group",
"resource",
COUNT(*),
MAX("resource_version")
FROM "resource"
WHERE 1 = 1
AND "namespace" = 'default'
AND "group" = 'dashboard.grafana.app'
AND "resource" = 'dashboards'
GROUP BY
"namespace",
"group",
"resource"
;
@@ -1,7 +1,7 @@
DELETE FROM "resource"
WHERE 1 = 1
AND "namespace" = 'nn'
AND "group" = 'gg'
AND "resource" = 'rr'
AND "name" = 'name'
WHERE 1 = 1
AND "namespace" = 'nn'
AND "group" = 'gg'
AND "resource" = 'rr'
AND "name" = 'name'
;
@@ -1,3 +1,3 @@
DELETE FROM "resource_history"
WHERE 1 = 1
WHERE "namespace" = 'ns'
AND "guid" = 'xxxx'
@@ -0,0 +1,4 @@
DELETE FROM "resource_history"
WHERE "namespace" = 'ns'
AND "group" = 'ggg'
AND "resource" = 'rrr'
+16
View File
@@ -0,0 +1,16 @@
SELECT
"namespace",
"group",
"resource",
COUNT(*),
MAX("resource_version")
FROM "resource"
WHERE 1 = 1
AND "namespace" = 'default'
AND "group" = 'dashboard.grafana.app'
AND "resource" = 'dashboards'
GROUP BY
"namespace",
"group",
"resource"
;