Open
Description
Observed
goroutine leak at github.com/ClickHouse/clickhouse-go/v2.(*httpConnect).query.func1 (conn_http_query.go:98)
I guess these are just errors that are not read from a channel
Expected behaviour
no goroutine leak :)
Code example
Select from clickhouse using *sql.DB
package dh
func (d *dataHolder) Select(ctx context.Context, query string, timeStr string) (res [][]interface{}, err error) {
t, err := time.Parse(time.DateTime, timeStr)
if err != nil {
return nil, err
}
rows, err = d.db.QueryContext(ctx, query, timeStr)
if err != nil {
return nil, err
}
defer rows.Close()
cols, err := rows.Columns()
if err != nil {
return nil, err
}
for rows.Next() {
vals := make([]interface{}, len(cols), len(cols)+1)
for i := range vals {
vals[i] = new(interface{})
}
err = rows.Scan(vals...)
vals = append(vals, t.Unix())
if err != nil {
return nil, err
}
res = append(res, vals)
}
return res, nil
}
But I'm not sure if Its Select's "fault". Maybe it's a ping check on interval
func (d *dataHolder) ping(ctx context.Context) (err error) {
ctxTimeout, cancel := context.WithTimeout(ctx, pingTimeout)
defer cancel()
return d.db.PingContext(ctxTimeout)
}
Details
Environment
-
clickhouse-go
version: v2.30.0 - Interface:
database/sql
compatible driver - Go version: 1.22.3
- Operating system: linux/amd64
- ClickHouse version:
- Is it a ClickHouse Cloud?
- ClickHouse Server non-default settings, if any:
-
CREATE TABLE
statements for tables involved: - Sample data for all these tables, use clickhouse-obfuscator if necessary