edgedb/edgedb-go

Idle connections are never replaced after timeout

fmoor opened this issue · 0 comments

fmoor commented

When a connection is closed because it's idle timeout expires the connection is never replaced which effectively reduces the pool's concurrency by 1.

Version:
github.com/edgedb/edgedb-go v0.13.4

Reproduction

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/edgedb/edgedb-go"
)

func query(ctx context.Context, db *edgedb.Client) error {
	var result int64
	return db.QuerySingle(ctx, `select 1 + 1`, &result)
}

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 65*time.Second)
	defer cancel()

	client, err := edgedb.CreateClient(ctx, edgedb.Options{Concurrency: 1})
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("first query")
	err = query(ctx, client)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("sleeping...")
	time.Sleep(60 * time.Second)
	fmt.Println("second query")
	err = query(ctx, client)
	if err != nil {
		log.Fatal(err)
	}
}