[v10.0.x] Annotations: Fix database lock while updating annotations (#71207)

Annotations: Fix database lock while updating annotations (#71199)

(cherry picked from commit 56f52dc97e)

Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com>
This commit is contained in:
grafana-delivery-bot[bot]
2023-07-13 10:33:43 +02:00
committed by GitHub
co-authored by Emil Tullstedt
parent 1f058705be
commit e17ebf1205
2 changed files with 36 additions and 1 deletions
@@ -143,7 +143,13 @@ func (r *xormRepositoryImpl) synchronizeTags(ctx context.Context, item *annotati
}
func (r *xormRepositoryImpl) Update(ctx context.Context, item *annotations.Item) error {
return r.db.WithTransactionalDbSession(ctx, func(sess *db.Session) error {
return r.db.InTransaction(ctx, func(ctx context.Context) error {
return r.update(ctx, item)
})
}
func (r *xormRepositoryImpl) update(ctx context.Context, item *annotations.Item) error {
return r.db.WithDbSession(ctx, func(sess *db.Session) error {
var (
isExist bool
err error
@@ -368,6 +368,35 @@ func TestIntegrationAnnotations(t *testing.T) {
assert.Greater(t, items[0].Updated, items[0].Created)
})
t.Run("Can update annotation with additional tags", func(t *testing.T) {
query := &annotations.ItemQuery{
OrgID: 1,
DashboardID: 1,
From: 0,
To: 15,
SignedInUser: testUser,
}
items, err := repo.Get(context.Background(), query)
require.NoError(t, err)
annotationId := items[0].ID
err = repo.Update(context.Background(), &annotations.Item{
ID: annotationId,
OrgID: 1,
Text: "something new",
Tags: []string{"newtag1", "newtag3"},
})
require.NoError(t, err)
items, err = repo.Get(context.Background(), query)
require.NoError(t, err)
assert.Equal(t, annotationId, items[0].ID)
assert.Equal(t, []string{"newtag1", "newtag3"}, items[0].Tags)
assert.Equal(t, "something new", items[0].Text)
assert.Greater(t, items[0].Updated, items[0].Created)
})
t.Run("Can update annotations with data", func(t *testing.T) {
query := &annotations.ItemQuery{
OrgID: 1,