Ensure all code paths close *sql.Rows (#679)
* ensure all code paths close *sql.Rows
This commit is contained in:
parent
702b4b1061
commit
6e214ebc3d
8 changed files with 40 additions and 10 deletions
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/mattermost/focalboard/server/services/store/sqlstore"
|
"github.com/mattermost/focalboard/server/services/store/sqlstore"
|
||||||
|
|
||||||
pluginapi "github.com/mattermost/mattermost-plugin-api"
|
pluginapi "github.com/mattermost/mattermost-plugin-api"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v5/model"
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
"github.com/mattermost/mattermost-server/v5/plugin"
|
"github.com/mattermost/mattermost-server/v5/plugin"
|
||||||
)
|
)
|
||||||
|
@ -125,7 +126,7 @@ func (p *Plugin) OnActivate() error {
|
||||||
return fmt.Errorf("error initializing the DB: %v", err)
|
return fmt.Errorf("error initializing the DB: %v", err)
|
||||||
}
|
}
|
||||||
if cfg.AuthMode == server.MattermostAuthMod {
|
if cfg.AuthMode == server.MattermostAuthMod {
|
||||||
layeredStore, err2 := mattermostauthlayer.New(cfg.DBType, sqlDB, db)
|
layeredStore, err2 := mattermostauthlayer.New(cfg.DBType, sqlDB, db, logger)
|
||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
return fmt.Errorf("error initializing the DB: %v", err2)
|
return fmt.Errorf("error initializing the DB: %v", err2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,7 @@ func NewStore(config *config.Configuration, logger *mlog.Logger) (store.Store, e
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if config.AuthMode == MattermostAuthMod {
|
if config.AuthMode == MattermostAuthMod {
|
||||||
layeredStore, err2 := mattermostauthlayer.New(config.DBType, db.(*sqlstore.SQLStore).DBHandle(), db)
|
layeredStore, err2 := mattermostauthlayer.New(config.DBType, db.(*sqlstore.SQLStore).DBHandle(), db, logger)
|
||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
return nil, err2
|
return nil, err2
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
|
|
||||||
"github.com/mattermost/focalboard/server/model"
|
"github.com/mattermost/focalboard/server/model"
|
||||||
|
"github.com/mattermost/focalboard/server/services/mlog"
|
||||||
"github.com/mattermost/focalboard/server/services/store"
|
"github.com/mattermost/focalboard/server/services/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,14 +25,16 @@ type MattermostAuthLayer struct {
|
||||||
store.Store
|
store.Store
|
||||||
dbType string
|
dbType string
|
||||||
mmDB *sql.DB
|
mmDB *sql.DB
|
||||||
|
logger *mlog.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new SQL implementation of the store.
|
// New creates a new SQL implementation of the store.
|
||||||
func New(dbType string, db *sql.DB, store store.Store) (*MattermostAuthLayer, error) {
|
func New(dbType string, db *sql.DB, store store.Store, logger *mlog.Logger) (*MattermostAuthLayer, error) {
|
||||||
layer := &MattermostAuthLayer{
|
layer := &MattermostAuthLayer{
|
||||||
Store: store,
|
Store: store,
|
||||||
dbType: dbType,
|
dbType: dbType,
|
||||||
mmDB: db,
|
mmDB: db,
|
||||||
|
logger: logger,
|
||||||
}
|
}
|
||||||
|
|
||||||
return layer, nil
|
return layer, nil
|
||||||
|
@ -191,6 +194,8 @@ func (s *MattermostAuthLayer) GetWorkspace(id string) (*model.Workspace, error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
first := true
|
first := true
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
if first {
|
if first {
|
||||||
|
@ -247,6 +252,7 @@ func (s *MattermostAuthLayer) GetUsersByWorkspace(workspaceID string) ([]*model.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
users, err := s.usersFromRows(rows)
|
users, err := s.usersFromRows(rows)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -257,8 +263,6 @@ func (s *MattermostAuthLayer) GetUsersByWorkspace(workspaceID string) ([]*model.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MattermostAuthLayer) usersFromRows(rows *sql.Rows) ([]*model.User, error) {
|
func (s *MattermostAuthLayer) usersFromRows(rows *sql.Rows) ([]*model.User, error) {
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
users := []*model.User{}
|
users := []*model.User{}
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
@ -292,3 +296,9 @@ func (s *MattermostAuthLayer) usersFromRows(rows *sql.Rows) ([]*model.User, erro
|
||||||
|
|
||||||
return users, nil
|
return users, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *MattermostAuthLayer) CloseRows(rows *sql.Rows) {
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
s.logger.Error("error closing MattermostAuthLayer row set", mlog.Err(err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ func (s *SQLStore) GetBlocksWithParentAndType(c store.Container, parentID string
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -70,6 +71,7 @@ func (s *SQLStore) GetBlocksWithParent(c store.Container, parentID string) ([]mo
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -99,6 +101,7 @@ func (s *SQLStore) GetBlocksWithRootID(c store.Container, rootID string) ([]mode
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -128,6 +131,7 @@ func (s *SQLStore) GetBlocksWithType(c store.Container, blockType string) ([]mod
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -158,6 +162,7 @@ func (s *SQLStore) GetSubTree2(c store.Container, blockID string) ([]model.Block
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -196,6 +201,7 @@ func (s *SQLStore) GetSubTree3(c store.Container, blockID string) ([]model.Block
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
@ -224,13 +230,12 @@ func (s *SQLStore) GetAllBlocks(c store.Container) ([]model.Block, error) {
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
return s.blocksFromRows(rows)
|
return s.blocksFromRows(rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SQLStore) blocksFromRows(rows *sql.Rows) ([]model.Block, error) {
|
func (s *SQLStore) blocksFromRows(rows *sql.Rows) ([]model.Block, error) {
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
results := []model.Block{}
|
results := []model.Block{}
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
@ -451,6 +456,7 @@ func (s *SQLStore) GetBlockCountsByType() (map[string]int64, error) {
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
m := make(map[string]int64)
|
m := make(map[string]int64)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ func (s *SQLStore) GetSystemSettings() (map[string]string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
results := map[string]string{}
|
results := map[string]string{}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ func (s *SQLStore) getUsersByCondition(condition sq.Eq) ([]*model.User, error) {
|
||||||
log.Printf("getUsersByCondition ERROR: %v", err)
|
log.Printf("getUsersByCondition ERROR: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
users, err := s.usersFromRows(rows)
|
users, err := s.usersFromRows(rows)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -192,8 +193,6 @@ func (s *SQLStore) GetUsersByWorkspace(workspaceID string) ([]*model.User, error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SQLStore) usersFromRows(rows *sql.Rows) ([]*model.User, error) {
|
func (s *SQLStore) usersFromRows(rows *sql.Rows) ([]*model.User, error) {
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
users := []*model.User{}
|
users := []*model.User{}
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
|
13
server/services/store/sqlstore/util.go
Normal file
13
server/services/store/sqlstore/util.go
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package sqlstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
"github.com/mattermost/focalboard/server/services/mlog"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *SQLStore) CloseRows(rows *sql.Rows) {
|
||||||
|
if err := rows.Close(); err != nil {
|
||||||
|
s.logger.Error("error closing MattermostAuthLayer row set", mlog.Err(err))
|
||||||
|
}
|
||||||
|
}
|
|
@ -128,6 +128,7 @@ func (s *SQLStore) GetWorkspaceCount() (int64, error) {
|
||||||
s.logger.Error("ERROR GetWorkspaceCount", mlog.Err(err))
|
s.logger.Error("ERROR GetWorkspaceCount", mlog.Err(err))
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
defer s.CloseRows(rows)
|
||||||
|
|
||||||
var count int64
|
var count int64
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue