Skip to content

go-tarantool: Connect method freezes and context.WithTimeout doest recover it

./picodata run --data-dir d1 --listen localhost:3301 --pg-listen localhost:5432
./picodata run --data-dir d2 --listen localhost:3302 --pg-listen localhost:5433 --peer localhost:3301
echo "CREATE USER \"stress\" WITH PASSWORD 'Secrett5' USING chap-sha1;
ALTER USER \"stress\" WITH LOGIN;
GRANT CREATE TABLE TO \"stress\";
GRANT ALTER TABLE TO \"stress\";
GRANT DROP TABLE TO \"stress\";
GRANT READ TABLE TO \"stress\";
GRANT WRITE TABLE TO \"stress\";" | ./picodata admin d1/admin.sock
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/tarantool/go-tarantool/v2"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
	defer cancel()
	dialer := tarantool.NetDialer{
		Address:  "localhost:5432",
		User:     "stress",
		Password: "Secrett5",
	}
	opts := tarantool.Opts{
		Timeout: 0,
	}

	println("before!")
	conn, err := tarantool.Connect(ctx, dialer, opts)
	println("after!")
	if err != nil {
		fmt.Println("Connection refused:", err)
		return
	}

	data, err := conn.Do(
		tarantool.NewCallRequest(".proc_version_info").Args([]any{})).Get()
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Data:", data)
	}
}
Edited by Georgiy Lomakin