From 1a64acd655577e04a2930a8283d04f65b5741643 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 27 Jul 2022 17:05:53 +0300 Subject: [PATCH 1/4] fix: Order database queries for templates Fixes a race in a test where the order of templates varies. --- coderd/database/queries.sql.go | 2 ++ coderd/database/queries/templates.sql | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index fde6fca6a6d37..6f9a0d75eddf9 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -1889,6 +1889,7 @@ func (q *sqlQuerier) GetTemplateByOrganizationAndName(ctx context.Context, arg G const getTemplates = `-- name: GetTemplates :many SELECT id, created_at, updated_at, organization_id, deleted, name, provisioner, active_version_id, description, max_ttl, min_autostart_interval, created_by FROM templates +ORDER BY (created_at, id) ASC ` func (q *sqlQuerier) GetTemplates(ctx context.Context) ([]Template, error) { @@ -1953,6 +1954,7 @@ WHERE id = ANY($4) ELSE true END +ORDER BY (created_at, id) ASC ` type GetTemplatesWithFilterParams struct { diff --git a/coderd/database/queries/templates.sql b/coderd/database/queries/templates.sql index 7ff6b0a06c5cf..c9860c1ce4833 100644 --- a/coderd/database/queries/templates.sql +++ b/coderd/database/queries/templates.sql @@ -34,6 +34,7 @@ WHERE id = ANY(@ids) ELSE true END +ORDER BY (created_at, id) ASC ; -- name: GetTemplateByOrganizationAndName :one @@ -49,7 +50,9 @@ LIMIT 1; -- name: GetTemplates :many -SELECT * FROM templates; +SELECT * FROM templates +ORDER BY (created_at, id) ASC +; -- name: InsertTemplate :one INSERT INTO From c0498a9c1586b3d1b030ac2675fbca994b1dfd15 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 27 Jul 2022 17:26:44 +0300 Subject: [PATCH 2/4] fix: Add sorting to databasefake as well --- coderd/database/databasefake/databasefake.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 5122029d9d31c..180a93951b664 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -626,7 +626,8 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, } func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context, - params database.GetWorkspaceBuildByWorkspaceIDParams) ([]database.WorkspaceBuild, error) { + params database.GetWorkspaceBuildByWorkspaceIDParams, +) ([]database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() @@ -893,6 +894,9 @@ func (q *fakeQuerier) GetTemplatesWithFilter(_ context.Context, arg database.Get templates = append(templates, template) } if len(templates) > 0 { + slices.SortFunc(templates, func(i, j database.Template) bool { + return i.CreatedAt.Before(j.CreatedAt) && i.ID.String() < j.ID.String() + }) return templates, nil } @@ -1069,7 +1073,12 @@ func (q *fakeQuerier) GetTemplates(_ context.Context) ([]database.Template, erro q.mutex.RLock() defer q.mutex.RUnlock() - return q.templates[:], nil + templates := slices.Clone(q.templates) + slices.SortFunc(templates, func(i, j database.Template) bool { + return i.CreatedAt.Before(j.CreatedAt) && i.ID.String() < j.ID.String() + }) + + return templates, nil } func (q *fakeQuerier) GetOrganizationMemberByUserID(_ context.Context, arg database.GetOrganizationMemberByUserIDParams) (database.OrganizationMember, error) { From f8df8efb200478f030b1d7e03bf5455da9094065 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 27 Jul 2022 17:27:47 +0300 Subject: [PATCH 3/4] fix: Re-fix databasefake --- coderd/database/databasefake/databasefake.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 180a93951b664..bd2d69a4f466e 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -895,7 +895,10 @@ func (q *fakeQuerier) GetTemplatesWithFilter(_ context.Context, arg database.Get } if len(templates) > 0 { slices.SortFunc(templates, func(i, j database.Template) bool { - return i.CreatedAt.Before(j.CreatedAt) && i.ID.String() < j.ID.String() + if i.CreatedAt.Before(j.CreatedAt) { + return true + } + return i.ID.String() < j.ID.String() }) return templates, nil } @@ -1075,7 +1078,10 @@ func (q *fakeQuerier) GetTemplates(_ context.Context) ([]database.Template, erro templates := slices.Clone(q.templates) slices.SortFunc(templates, func(i, j database.Template) bool { - return i.CreatedAt.Before(j.CreatedAt) && i.ID.String() < j.ID.String() + if i.CreatedAt.Before(j.CreatedAt) { + return true + } + return i.ID.String() < j.ID.String() }) return templates, nil From 97e06672bdb74cf6e6d5a73e56b8ab5fae5596b6 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 27 Jul 2022 17:54:37 +0300 Subject: [PATCH 4/4] fix: Re-fix databasefake^2 --- coderd/database/databasefake/databasefake.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index bd2d69a4f466e..0a92e27d6cbfa 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -895,8 +895,8 @@ func (q *fakeQuerier) GetTemplatesWithFilter(_ context.Context, arg database.Get } if len(templates) > 0 { slices.SortFunc(templates, func(i, j database.Template) bool { - if i.CreatedAt.Before(j.CreatedAt) { - return true + if !i.CreatedAt.Before(j.CreatedAt) { + return false } return i.ID.String() < j.ID.String() }) @@ -1078,8 +1078,8 @@ func (q *fakeQuerier) GetTemplates(_ context.Context) ([]database.Template, erro templates := slices.Clone(q.templates) slices.SortFunc(templates, func(i, j database.Template) bool { - if i.CreatedAt.Before(j.CreatedAt) { - return true + if !i.CreatedAt.Before(j.CreatedAt) { + return false } return i.ID.String() < j.ID.String() })