mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Bug(sqlstore): fix issue with postgres unable to find existing main organization (#73789)
* SQLStore: fix issue where postgres would not find the existing org Grafana using a postgres databases would fail to find the created org when the CreatedAt and UpdatedAt times are (inaccurately) populated. This issue only occurs in postgres, and only shows up when getOrCreateOrg run to create the admin user AND the organization already exists. See https://github.com/grafana/grafana/issues/71781 for more information and a reproduction. * add an integration test
This commit is contained in:
parent
1b8e9b51b2
commit
3e272d2bda
@ -146,8 +146,6 @@ func verifyExistingOrg(sess *DBSession, orgId int64) error {
|
|||||||
|
|
||||||
func (ss *SQLStore) getOrCreateOrg(sess *DBSession, orgName string) (int64, error) {
|
func (ss *SQLStore) getOrCreateOrg(sess *DBSession, orgName string) (int64, error) {
|
||||||
var org org.Org
|
var org org.Org
|
||||||
org.Created = time.Now()
|
|
||||||
org.Updated = org.Created
|
|
||||||
|
|
||||||
if ss.Cfg.AutoAssignOrg {
|
if ss.Cfg.AutoAssignOrg {
|
||||||
has, err := sess.Where("id=?", ss.Cfg.AutoAssignOrgId).Get(&org)
|
has, err := sess.Where("id=?", ss.Cfg.AutoAssignOrgId).Get(&org)
|
||||||
@ -167,6 +165,8 @@ func (ss *SQLStore) getOrCreateOrg(sess *DBSession, orgName string) (int64, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
org.Name = mainOrgName
|
org.Name = mainOrgName
|
||||||
|
org.Created = time.Now()
|
||||||
|
org.Updated = org.Created
|
||||||
org.ID = int64(ss.Cfg.AutoAssignOrgId)
|
org.ID = int64(ss.Cfg.AutoAssignOrgId)
|
||||||
if err := sess.InsertId(&org, ss.Dialect); err != nil {
|
if err := sess.InsertId(&org, ss.Dialect); err != nil {
|
||||||
ss.log.Error("failed to insert organization with provided id", "org_id", org.ID, "err", err)
|
ss.log.Error("failed to insert organization with provided id", "org_id", org.ID, "err", err)
|
||||||
@ -178,6 +178,8 @@ func (ss *SQLStore) getOrCreateOrg(sess *DBSession, orgName string) (int64, erro
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
org.Name = orgName
|
org.Name = orgName
|
||||||
|
org.Created = time.Now()
|
||||||
|
org.Updated = org.Created
|
||||||
if _, err := sess.InsertOne(&org); err != nil {
|
if _, err := sess.InsertOne(&org); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
40
pkg/services/sqlstore/user_test.go
Normal file
40
pkg/services/sqlstore/user_test.go
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package sqlstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
// testing a regression which shows up when the main org is created, but not the
|
||||||
|
// admin user: getOrCreateOrg was unable to find the existing org.
|
||||||
|
// https://github.com/grafana/grafana/issues/71781
|
||||||
|
func TestIntegrationGetOrCreateOrg(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("Skipping integration test in short mode")
|
||||||
|
}
|
||||||
|
ss := InitTestDB(t)
|
||||||
|
|
||||||
|
err := ss.WithNewDbSession(context.Background(), func(sess *DBSession) error {
|
||||||
|
// Create the org only:
|
||||||
|
ss.Cfg.AutoAssignOrg = true
|
||||||
|
ss.Cfg.DisableInitAdminCreation = true
|
||||||
|
ss.Cfg.AutoAssignOrgId = 1
|
||||||
|
createdOrgID, err := ss.getOrCreateOrg(sess, mainOrgName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, int64(1), createdOrgID)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = ss.WithNewDbSession(context.Background(), func(sess *DBSession) error {
|
||||||
|
// Run it a second time and verify that it finds the org that was
|
||||||
|
// created above.
|
||||||
|
gotOrgId, err := ss.getOrCreateOrg(sess, mainOrgName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, int64(1), gotOrgId)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user