[lxc-devel] [lxd/master] Add a few missing rows.Close() calls
freeekanayaka on Github
lxc-bot at linuxcontainers.org
Mon Aug 20 09:59:00 UTC 2018
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 361 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180820/e51c1fb4/attachment.bin>
-------------- next part --------------
From f87e3d4acd7d9d37a676ab2335ac94a5dbd6a8f6 Mon Sep 17 00:00:00 2001
From: Free Ekanayaka <free.ekanayaka at canonical.com>
Date: Mon, 20 Aug 2018 11:58:14 +0200
Subject: [PATCH] Add a few missing rows.Close() calls
Signed-off-by: Free Ekanayaka <free.ekanayaka at canonical.com>
---
lxd/api_internal.go | 2 ++
lxd/db/migration.go | 6 ++++++
lxd/db/node/update.go | 2 +-
lxd/db/query/dump.go | 1 +
lxd/db/schema/query.go | 3 +++
5 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/lxd/api_internal.go b/lxd/api_internal.go
index dcfc667fbb..84b67dfea7 100644
--- a/lxd/api_internal.go
+++ b/lxd/api_internal.go
@@ -255,12 +255,14 @@ func internalSQLPost(d *Daemon, r *http.Request) Response {
func internalSQLSelect(tx *sql.Tx, query string, result *internalSQLResult) error {
result.Type = "select"
+
rows, err := tx.Query(query)
if err != nil {
return errors.Wrap(err, "Failed to execute query")
}
defer rows.Close()
+
result.Columns, err = rows.Columns()
if err != nil {
return errors.Wrap(err, "Failed to fetch colume names")
diff --git a/lxd/db/migration.go b/lxd/db/migration.go
index ee769f53cf..f889c661fb 100644
--- a/lxd/db/migration.go
+++ b/lxd/db/migration.go
@@ -51,12 +51,15 @@ DELETE FROM storage_volumes_config WHERE storage_volume_id NOT IN (SELECT id FRO
logger.Debugf("Loading data from table %s", table)
data := [][]interface{}{}
stmt := fmt.Sprintf("SELECT * FROM %s", table)
+
rows, err := tx.Query(stmt)
if err != nil {
return nil, errors.Wrapf(err, "failed to fetch rows from %s", table)
}
+
columns, err := rows.Columns()
if err != nil {
+ rows.Close()
return nil, errors.Wrapf(err, "failed to get columns of %s", table)
}
dump.Schema[table] = columns
@@ -69,14 +72,17 @@ DELETE FROM storage_volumes_config WHERE storage_volume_id NOT IN (SELECT id FRO
}
err := rows.Scan(row...)
if err != nil {
+ rows.Close()
return nil, errors.Wrapf(err, "failed to scan row from %s", table)
}
data = append(data, values)
}
err = rows.Err()
if err != nil {
+ rows.Close()
return nil, errors.Wrapf(err, "error while fetching rows from %s", table)
}
+ rows.Close()
dump.Data[table] = data
}
diff --git a/lxd/db/node/update.go b/lxd/db/node/update.go
index 4ffdf936d3..65ba00f889 100644
--- a/lxd/db/node/update.go
+++ b/lxd/db/node/update.go
@@ -725,11 +725,11 @@ PRAGMA foreign_keys=ON; -- Make sure we turn integrity checks back on.`
if err != nil {
return err
}
+ defer rows.Close()
var tablestodelete []string
var rowidtodelete []int
- defer rows.Close()
for rows.Next() {
var tablename string
var rowid int
diff --git a/lxd/db/query/dump.go b/lxd/db/query/dump.go
index 3aa12933c0..0a0cb36258 100644
--- a/lxd/db/query/dump.go
+++ b/lxd/db/query/dump.go
@@ -86,6 +86,7 @@ func dumpTable(tx *sql.Tx, table, schema string) (string, error) {
if err != nil {
return "", errors.Wrap(err, "failed to fetch rows")
}
+ defer rows.Close()
// Figure column names
columns, err := rows.Columns()
diff --git a/lxd/db/schema/query.go b/lxd/db/schema/query.go
index 3c4b84dbce..9919c78f60 100644
--- a/lxd/db/schema/query.go
+++ b/lxd/db/schema/query.go
@@ -22,15 +22,18 @@ SELECT COUNT(name) FROM sqlite_master WHERE type = 'table' AND name = 'schema'
return false, err
}
defer rows.Close()
+
if !rows.Next() {
return false, fmt.Errorf("schema table query returned no rows")
}
var count int
+
err = rows.Scan(&count)
if err != nil {
return false, err
}
+
return count == 1, nil
}
More information about the lxc-devel
mailing list