Skip to content

Goroutine leak at conn_http_query.go #1456

Open
@Wmuga

Description

@Wmuga

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

Pprof output
pprof output
pprof raw

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions