MM-48984: Add missing timeout while creating a connection (#21847)
If a timeout is missing, this goroutine waits indefinitely trying to get a connection. Leading to a goroutine accumulation in a scenario where the DB is somehow not release connections. https://mattermost.atlassian.net/browse/MM-48984 ```release-note NONE ``` Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
3b043c1f12
Коммит
9ab1d8f805
@@ -8,6 +8,7 @@ import (
|
||||
"database/sql"
|
||||
"database/sql/driver"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/mattermost/mattermost-server/v6/model"
|
||||
"github.com/mattermost/mattermost-server/v6/plugin"
|
||||
@@ -44,7 +45,10 @@ func (d *DriverImpl) Conn(isMaster bool) (string, error) {
|
||||
if !isMaster {
|
||||
dbFunc = d.s.Platform().Store.GetInternalReplicaDB
|
||||
}
|
||||
conn, err := dbFunc().Conn(context.Background())
|
||||
timeout := time.Duration(*d.s.Config().SqlSettings.QueryTimeout) * time.Second
|
||||
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||||
defer cancel()
|
||||
conn, err := dbFunc().Conn(ctx)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
21
app/plugin_db_driver_test.go
Обычный файл
21
app/plugin_db_driver_test.go
Обычный файл
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestConnCreateTimeout(t *testing.T) {
|
||||
th := Setup(t)
|
||||
defer th.TearDown()
|
||||
|
||||
*th.App.Config().SqlSettings.QueryTimeout = 0
|
||||
|
||||
d := NewDriverImpl(th.Server)
|
||||
_, err := d.Conn(true)
|
||||
require.Error(t, err)
|
||||
}
|
||||
Ссылка в новой задаче
Block a user