diff --git a/cli/cluster/cluster.go b/cli/cluster/cluster.go index 78961b8f2..b0d430755 100644 --- a/cli/cluster/cluster.go +++ b/cli/cluster/cluster.go @@ -1,12 +1,14 @@ package cluster import ( + "context" "errors" "fmt" "strings" "time" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" + "github.com/tarantool/go-tlsdialer" libcluster "github.com/tarantool/tt/lib/cluster" "github.com/tarantool/tt/lib/connect" ) @@ -78,8 +80,9 @@ func collectEtcdConfig(collectors libcluster.CollectorFactory, func collectTarantoolConfig(collectors libcluster.CollectorFactory, clusterConfig libcluster.ClusterConfig) (*libcluster.Config, error) { type tarantoolOpts struct { - addr string - opts tarantool.Opts + addr string + dialer tarantool.Dialer + opts tarantool.Opts } tarantoolConfig := clusterConfig.Config.Storage @@ -92,31 +95,34 @@ func collectTarantoolConfig(collectors libcluster.CollectorFactory, } else { network, address = connect.ParseBaseURI(endpoint.Uri) } - + addr := fmt.Sprintf("%s://%s", network, address) if endpoint.Params.Transport == "" || endpoint.Params.Transport != "ssl" { opts = append(opts, tarantoolOpts{ + addr: addr, + dialer: tarantool.NetDialer{ + Address: addr, + User: endpoint.Login, + Password: endpoint.Password, + }, opts: tarantool.Opts{ - User: endpoint.Login, - Pass: endpoint.Password, - Transport: endpoint.Params.Transport, SkipSchema: true, }, - addr: fmt.Sprintf("%s://%s", network, address)}) + }) } else { opts = append(opts, tarantoolOpts{ + addr: addr, + dialer: tlsdialer.OpenSSLDialer{ + Address: addr, + User: endpoint.Login, + Password: endpoint.Password, + SslKeyFile: endpoint.Params.SslKeyFile, + SslCertFile: endpoint.Params.SslCertFile, + SslCaFile: endpoint.Params.SslCaFile, + SslCiphers: endpoint.Params.SslCiphers, + }, opts: tarantool.Opts{ - User: endpoint.Login, - Pass: endpoint.Password, - Transport: endpoint.Params.Transport, - Ssl: tarantool.SslOpts{ - KeyFile: endpoint.Params.SslKeyFile, - CertFile: endpoint.Params.SslCertFile, - CaFile: endpoint.Params.SslCaFile, - Ciphers: endpoint.Params.SslCiphers, - }, SkipSchema: true, }, - addr: fmt.Sprintf("%s://%s", network, address), }) } } @@ -124,8 +130,14 @@ func collectTarantoolConfig(collectors libcluster.CollectorFactory, var connectionErrors []error cconfig := libcluster.NewConfig() for _, opt := range opts { - conn, err := tarantool.Connect(opt.addr, opt.opts) + ctx := context.Background() + if opt.opts.Timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, opt.opts.Timeout) + defer cancel() + } + conn, err := tarantool.Connect(ctx, opt.dialer, opt.opts) if err != nil { connectionErrors = append(connectionErrors, fmt.Errorf("error when connecting to endpoint %q: %w", opt.addr, err)) diff --git a/cli/cluster/cmd/common.go b/cli/cluster/cmd/common.go index e20436330..ff744b465 100644 --- a/cli/cluster/cmd/common.go +++ b/cli/cluster/cmd/common.go @@ -1,13 +1,14 @@ package cmd import ( + "context" "errors" "fmt" "os" clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/cli/cluster" libcluster "github.com/tarantool/tt/lib/cluster" "github.com/tarantool/tt/lib/connect" @@ -144,19 +145,26 @@ type connectOpts struct { // connectTarantool establishes a connection to Tarantool. func connectTarantool(uriOpts UriOpts, connOpts connectOpts) (tarantool.Connector, error) { - addr, connectorOpts := MakeConnectOptsFromUriOpts(uriOpts) - if connectorOpts.User == "" && connectorOpts.Pass == "" { - connectorOpts.User = connOpts.Username - connectorOpts.Pass = connOpts.Password - if connectorOpts.User == "" { - connectorOpts.User = os.Getenv(connect.TarantoolUsernameEnv) + if uriOpts.Username == "" && uriOpts.Password == "" { + uriOpts.Username = connOpts.Username + uriOpts.Password = connOpts.Password + if uriOpts.Username == "" { + uriOpts.Username = os.Getenv(connect.TarantoolUsernameEnv) } - if connectorOpts.Pass == "" { - connectorOpts.Pass = os.Getenv(connect.TarantoolPasswordEnv) + if uriOpts.Password == "" { + uriOpts.Password = os.Getenv(connect.TarantoolPasswordEnv) } } - conn, err := tarantool.Connect(addr, connectorOpts) + dialer, connectorOpts := MakeConnectOptsFromUriOpts(uriOpts) + + ctx := context.Background() + if connectorOpts.Timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, connectorOpts.Timeout) + defer cancel() + } + conn, err := tarantool.Connect(ctx, dialer, connectorOpts) if err != nil { return nil, fmt.Errorf("failed to connect to tarantool: %w", err) } diff --git a/cli/cluster/cmd/replicaset.go b/cli/cluster/cmd/replicaset.go index f544d73d3..3e70253df 100644 --- a/cli/cluster/cmd/replicaset.go +++ b/cli/cluster/cmd/replicaset.go @@ -7,7 +7,7 @@ import ( "github.com/apex/log" "github.com/manifoldco/promptui" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/cli/replicaset" libcluster "github.com/tarantool/tt/lib/cluster" clientv3 "go.etcd.io/etcd/client/v3" diff --git a/cli/cluster/cmd/uri.go b/cli/cluster/cmd/uri.go index 26da47a90..bc08c67d2 100644 --- a/cli/cluster/cmd/uri.go +++ b/cli/cluster/cmd/uri.go @@ -7,7 +7,8 @@ import ( "strings" "time" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" + "github.com/tarantool/go-tlsdialer" libcluster "github.com/tarantool/tt/lib/cluster" ) @@ -145,22 +146,32 @@ func MakeEtcdOptsFromUriOpts(src UriOpts) libcluster.EtcdOpts { // MakeConnectOptsFromUriOpts create Tarantool connect options from // URI options. -func MakeConnectOptsFromUriOpts(src UriOpts) (string, tarantool.Opts) { - opts := tarantool.Opts{ - User: src.Username, - Pass: src.Password, - Ssl: tarantool.SslOpts{ - KeyFile: src.KeyFile, - CertFile: src.CertFile, - CaFile: src.CaFile, - Ciphers: src.Ciphers, - }, - Timeout: src.Timeout, +func MakeConnectOptsFromUriOpts(src UriOpts) (tarantool.Dialer, tarantool.Opts) { + address := fmt.Sprintf("tcp://%s", src.Host) + + var dialer tarantool.Dialer + + if src.KeyFile != "" || src.CertFile != "" || src.CaFile != "" || src.Ciphers != "" { + dialer = tlsdialer.OpenSSLDialer{ + Address: address, + User: src.Username, + Password: src.Password, + SslKeyFile: src.KeyFile, + SslCertFile: src.CertFile, + SslCaFile: src.CaFile, + SslCiphers: src.Ciphers, + } + } else { + dialer = tarantool.NetDialer{ + Address: address, + User: src.Username, + Password: src.Password, + } } - if opts.Ssl != (tarantool.SslOpts{}) { - opts.Transport = "ssl" + opts := tarantool.Opts{ + Timeout: src.Timeout, } - return fmt.Sprintf("tcp://%s", src.Host), opts + return dialer, opts } diff --git a/cli/cluster/cmd/uri_test.go b/cli/cluster/cmd/uri_test.go index 72a64c23d..fbf1be2ef 100644 --- a/cli/cluster/cmd/uri_test.go +++ b/cli/cluster/cmd/uri_test.go @@ -8,7 +8,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" + "github.com/tarantool/go-tlsdialer" "github.com/tarantool/tt/cli/cluster/cmd" libcluster "github.com/tarantool/tt/lib/cluster" @@ -335,17 +336,24 @@ func TestMakeEtcdOptsFromUriOpts(t *testing.T) { } func TestMakeConnectOptsFromUriOpts(t *testing.T) { + type Expected struct { + dialer tarantool.Dialer + opts tarantool.Opts + } cases := []struct { - Name string - UriOpts cmd.UriOpts - Expected tarantool.Opts - ExpectedAddr string + Name string + UriOpts cmd.UriOpts + Expected Expected }{ { - Name: "empty", - UriOpts: cmd.UriOpts{}, - Expected: tarantool.Opts{}, - ExpectedAddr: "tcp://", + Name: "empty", + UriOpts: cmd.UriOpts{}, + Expected: Expected{ + tarantool.NetDialer{ + Address: "tcp://", + }, + tarantool.Opts{}, + }, }, { Name: "ignored", @@ -359,10 +367,14 @@ func TestMakeConnectOptsFromUriOpts(t *testing.T) { SkipPeerVerify: true, Timeout: 673, }, - Expected: tarantool.Opts{ - Timeout: 673, + Expected: Expected{ + tarantool.NetDialer{ + Address: "tcp://", + }, + tarantool.Opts{ + Timeout: 673, + }, }, - ExpectedAddr: "tcp://", // is this ok? }, { Name: "full", @@ -383,28 +395,29 @@ func TestMakeConnectOptsFromUriOpts(t *testing.T) { SkipPeerVerify: true, Timeout: 2 * time.Second, }, - Expected: tarantool.Opts{ - User: "username", - Pass: "password", - Timeout: 2 * time.Second, - Transport: "ssl", - Ssl: tarantool.SslOpts{ - KeyFile: "key_file", - CertFile: "cert_file", - CaFile: "ca_file", - Ciphers: "foo:bar:ciphers", + Expected: Expected{ + tlsdialer.OpenSSLDialer{ + Address: "tcp://foo", + User: "username", + Password: "password", + SslKeyFile: "key_file", + SslCertFile: "cert_file", + SslCaFile: "ca_file", + SslCiphers: "foo:bar:ciphers", + }, + tarantool.Opts{ + Timeout: 2 * time.Second, }, }, - ExpectedAddr: "tcp://foo", }, } for _, tc := range cases { t.Run(tc.Name, func(t *testing.T) { - addr, tntOpts := cmd.MakeConnectOptsFromUriOpts(tc.UriOpts) + dialer, opts := cmd.MakeConnectOptsFromUriOpts(tc.UriOpts) - assert.Equal(t, tc.Expected, tntOpts) - assert.Equal(t, tc.ExpectedAddr, addr) + assert.Equal(t, tc.Expected.dialer, dialer) + assert.Equal(t, tc.Expected.opts, opts) }) } } diff --git a/go.mod b/go.mod index b5a1ef5e3..874eea0cf 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,8 @@ require ( github.com/tarantool/cartridge-cli v0.0.0-20220605082730-53e6a5be9a61 github.com/tarantool/go-prompt v1.0.1 github.com/tarantool/go-tarantool v1.12.2 - github.com/tarantool/go-tarantool/v2 v2.2.0 + github.com/tarantool/go-tarantool/v2 v2.2.1 + github.com/tarantool/go-tlsdialer v1.0.0 github.com/tarantool/tt/lib/cluster v0.0.0 github.com/tarantool/tt/lib/integrity v0.0.0 github.com/vmihailenco/msgpack/v5 v5.3.5 @@ -116,6 +117,7 @@ require ( github.com/soheilhy/cmux v0.1.5 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/tarantool/go-iproto v1.1.0 // indirect github.com/tarantool/go-openssl v1.1.1 // indirect github.com/tklauser/go-sysconf v0.3.4 // indirect github.com/tklauser/numcpus v0.2.1 // indirect diff --git a/go.sum b/go.sum index c1af7075c..1962c171d 100644 --- a/go.sum +++ b/go.sum @@ -438,8 +438,10 @@ github.com/tarantool/go-prompt v1.0.1 h1:88Yer6gCFylqGRrdWwikNFVbklRQsqKF7mycvGd github.com/tarantool/go-prompt v1.0.1/go.mod h1:9Vuvi60Bk+3yaXqgYaXNTpLbwPPaaEOeaUgpFW1jqTU= github.com/tarantool/go-tarantool v1.12.2 h1:u4g+gTOHNxbUDJv0EIUFkRurU/lTQSzWrz8o7bHVAqI= github.com/tarantool/go-tarantool v1.12.2/go.mod h1:QRiXv0jnxwgxHtr9ZmifSr/eRba76gTUBgp69pDMX1U= -github.com/tarantool/go-tarantool/v2 v2.2.0 h1:U7RDvWxPaPPecMppqVwfpTGnSJQ++Crg2l9cS/ztgp8= -github.com/tarantool/go-tarantool/v2 v2.2.0/go.mod h1:hKKeZeCP8Y8+U6ZFS32ot1jHV/n4WKVP4fjRAvQznMY= +github.com/tarantool/go-tarantool/v2 v2.2.1 h1:ldzMVfkmTuJl4ie3ByMIr+mmPSKDVTcSkN8XlVZEows= +github.com/tarantool/go-tarantool/v2 v2.2.1/go.mod h1:hKKeZeCP8Y8+U6ZFS32ot1jHV/n4WKVP4fjRAvQznMY= +github.com/tarantool/go-tlsdialer v1.0.0 h1:UZ67erz/QiThttIvcHtUnUWo1ZJ/BlQoN088NvkVmBQ= +github.com/tarantool/go-tlsdialer v1.0.0/go.mod h1:IZuFRmnasGSBtPGZi3LMrpaSUgHYR+hDZ4ec7gR9k/0= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= diff --git a/lib/cluster/collector.go b/lib/cluster/collector.go index 671e875f1..c530fdf71 100644 --- a/lib/cluster/collector.go +++ b/lib/cluster/collector.go @@ -5,7 +5,7 @@ import ( clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" ) // Collector interface must be implemented by a configuration source collector. diff --git a/lib/cluster/collector_test.go b/lib/cluster/collector_test.go index e50f92faf..04d3354f7 100644 --- a/lib/cluster/collector_test.go +++ b/lib/cluster/collector_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/lib/cluster" ) diff --git a/lib/cluster/datacollector.go b/lib/cluster/datacollector.go index c9b96304d..7ff1554af 100644 --- a/lib/cluster/datacollector.go +++ b/lib/cluster/datacollector.go @@ -3,7 +3,7 @@ package cluster import ( "time" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" clientv3 "go.etcd.io/etcd/client/v3" ) diff --git a/lib/cluster/datacollector_test.go b/lib/cluster/datacollector_test.go index 143cb9dd5..0b4283675 100644 --- a/lib/cluster/datacollector_test.go +++ b/lib/cluster/datacollector_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/lib/cluster" ) diff --git a/lib/cluster/datapublisher.go b/lib/cluster/datapublisher.go index 818203801..4a6d37501 100644 --- a/lib/cluster/datapublisher.go +++ b/lib/cluster/datapublisher.go @@ -6,7 +6,7 @@ import ( clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" ) // DataPublisher interface must be implemented by a raw data publisher. diff --git a/lib/cluster/datapublisher_test.go b/lib/cluster/datapublisher_test.go index c9ff73c0c..c128b5cfb 100644 --- a/lib/cluster/datapublisher_test.go +++ b/lib/cluster/datapublisher_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" clientv3 "go.etcd.io/etcd/client/v3" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/lib/cluster" ) diff --git a/lib/cluster/errors.go b/lib/cluster/errors.go index a70b41d0c..e1972b2bc 100644 --- a/lib/cluster/errors.go +++ b/lib/cluster/errors.go @@ -13,3 +13,16 @@ type NotExistError struct { func (e NotExistError) Error() string { return fmt.Sprintf("path %q does not exist", e.path) } + +// CollectEmptyError responses on DataCollector.Collect() if +// config was not found with specified prefix. +type CollectEmptyError struct { + storage string + prefix string +} + +// Error - error interface implementation for NoConfigError. +func (e CollectEmptyError) Error() string { + return fmt.Sprintf("a configuration data not found in %s for prefix %q", + e.storage, e.prefix) +} diff --git a/lib/cluster/etcd.go b/lib/cluster/etcd.go index 35f0327fc..9a25e314f 100644 --- a/lib/cluster/etcd.go +++ b/lib/cluster/etcd.go @@ -129,8 +129,7 @@ func (collector EtcdAllCollector) Collect() ([]Data, error) { } if len(resp.Kvs) == 0 { - return nil, fmt.Errorf("a configuration data not found in etcd for prefix %q", - prefix) + return nil, CollectEmptyError{"etcd", prefix} } collected := []Data{} diff --git a/lib/cluster/go.mod b/lib/cluster/go.mod index 25522e3a2..1c0bc3cec 100644 --- a/lib/cluster/go.mod +++ b/lib/cluster/go.mod @@ -4,8 +4,8 @@ go 1.20 require ( github.com/mitchellh/mapstructure v1.5.0 - github.com/stretchr/testify v1.8.4 - github.com/tarantool/go-tarantool v1.12.2 + github.com/stretchr/testify v1.9.0 + github.com/tarantool/go-tarantool/v2 v2.2.1 go.etcd.io/etcd/api/v3 v3.5.12 go.etcd.io/etcd/client/pkg/v3 v3.5.12 go.etcd.io/etcd/client/v3 v3.5.12 @@ -41,6 +41,7 @@ require ( github.com/sirupsen/logrus v1.7.0 // indirect github.com/soheilhy/cmux v0.1.5 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/tarantool/go-iproto v1.1.0 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect go.etcd.io/bbolt v1.3.8 // indirect @@ -69,10 +70,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/mattn/go-pointer v0.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect - github.com/tarantool/go-openssl v0.0.8-0.20230307065445-720eeb389195 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect go.etcd.io/etcd/tests/v3 v3.5.12 @@ -81,10 +79,8 @@ require ( golang.org/x/net v0.33.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect - google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/vmihailenco/msgpack.v2 v2.9.2 // indirect ) diff --git a/lib/cluster/go.sum b/lib/cluster/go.sum index 485fe8d88..2587a7c60 100644 --- a/lib/cluster/go.sum +++ b/lib/cluster/go.sum @@ -87,7 +87,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -117,8 +116,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= -github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -131,7 +128,6 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -160,7 +156,6 @@ github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3x github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -168,8 +163,6 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -179,13 +172,12 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/tarantool/go-openssl v0.0.8-0.20230307065445-720eeb389195 h1:/AN3eUPsTlvF6W+Ng/8ZjnSU6o7L0H4Wb9GMks6RkzU= -github.com/tarantool/go-openssl v0.0.8-0.20230307065445-720eeb389195/go.mod h1:M7H4xYSbzqpW/ZRBMyH0eyqQBsnhAMfsYk5mv0yid7A= -github.com/tarantool/go-tarantool v1.12.2 h1:u4g+gTOHNxbUDJv0EIUFkRurU/lTQSzWrz8o7bHVAqI= -github.com/tarantool/go-tarantool v1.12.2/go.mod h1:QRiXv0jnxwgxHtr9ZmifSr/eRba76gTUBgp69pDMX1U= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tarantool/go-iproto v1.1.0 h1:HULVOIHsiehI+FnHfM7wMDntuzUddO09DKqu2WnFQ5A= +github.com/tarantool/go-iproto v1.1.0/go.mod h1:LNCtdyZxojUed8SbOiYHoc3v9NvaZTB7p96hUySMlIo= +github.com/tarantool/go-tarantool/v2 v2.2.1 h1:ldzMVfkmTuJl4ie3ByMIr+mmPSKDVTcSkN8XlVZEows= +github.com/tarantool/go-tarantool/v2 v2.2.1/go.mod h1:hKKeZeCP8Y8+U6ZFS32ot1jHV/n4WKVP4fjRAvQznMY= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= @@ -259,7 +251,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -287,14 +278,12 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= @@ -321,7 +310,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -352,12 +340,9 @@ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/vmihailenco/msgpack.v2 v2.9.2 h1:gjPqo9orRVlSAH/065qw3MsFCDpH7fa1KpiizXyllY4= -gopkg.in/vmihailenco/msgpack.v2 v2.9.2/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/lib/cluster/integration_test.go b/lib/cluster/integration_test.go index 2d9fbdd63..2fa808e5c 100644 --- a/lib/cluster/integration_test.go +++ b/lib/cluster/integration_test.go @@ -19,7 +19,7 @@ import ( clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/tests/v3/integration" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" "github.com/tarantool/tt/lib/cluster" ) @@ -47,7 +47,9 @@ func startTcs(t *testing.T) *exec.Cmd { var conn tarantool.Connector // Wait for Tarantool to start. for i := 0; i < 10; i++ { - conn, err = tarantool.Connect("127.0.0.1:3301", tarantool.Opts{}) + conn, err = tarantool.Connect(context.Background(), tarantool.NetDialer{ + Address: "127.0.0.1:3301", + }, tarantool.Opts{}) if err == nil { defer conn.Close() break @@ -622,11 +624,13 @@ var testsIntegrity = []struct { Timeout: 10 * time.Second, Reconnect: 10 * time.Second, MaxReconnects: 10, - User: "client", - Pass: "secret", } - conn, err := tarantool.Connect("127.0.0.1:3301", opts) + conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{ + Address: "127.0.0.1:3301", + User: "client", + Password: "secret", + }, opts) require.NoError(t, err) pub, err := publisherFactory.NewTarantool(conn, prefix, key, 1*time.Second) @@ -647,11 +651,13 @@ var testsIntegrity = []struct { Timeout: 10 * time.Second, Reconnect: 10 * time.Second, MaxReconnects: 10, - User: "client", - Pass: "secret", } - conn, err := tarantool.Connect("127.0.0.1:3301", opts) + conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{ + Address: "127.0.0.1:3301", + User: "client", + Password: "secret", + }, opts) require.NoError(t, err) coll, err := collectorFactory.NewTarantool(conn, prefix, key, 1*time.Second) diff --git a/lib/cluster/tarantool.go b/lib/cluster/tarantool.go index 22843a7b4..24cb1e8ff 100644 --- a/lib/cluster/tarantool.go +++ b/lib/cluster/tarantool.go @@ -8,7 +8,7 @@ import ( "github.com/mitchellh/mapstructure" - "github.com/tarantool/go-tarantool" + "github.com/tarantool/go-tarantool/v2" ) // TarantoolAllCollector collects data from a Tarantool for a whole prefix. @@ -39,8 +39,7 @@ func (collector TarantoolAllCollector) Collect() ([]Data, error) { } if len(resp.Data) == 0 { - return nil, fmt.Errorf("a configuration data not found in tarantool for prefix %q", - prefix) + return nil, CollectEmptyError{"tarantool", prefix} } collected := []Data{} @@ -471,18 +470,17 @@ type tarantoolGetResponse struct { // tarantoolCall retursns result of a function call via tarantool connector. func tarantoolCall(conn tarantool.Connector, - fun string, args []any, timeout time.Duration) ([][]any, error) { + fun string, args []any, timeout time.Duration) ([]any, error) { req := tarantool.NewCallRequest(fun).Args(args) if timeout != 0 { - ctx := context.Background() ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req = req.Context(ctx) } - var result [][]any + var result []any if err := conn.Do(req).GetTyped(&result); err != nil { return nil, err } @@ -500,11 +498,11 @@ func tarantoolGet(conn tarantool.Connector, if err != nil { return resp, fmt.Errorf("failed to fetch data from tarantool: %w", err) } - if len(data) != 1 || len(data[0]) == 0 { + if len(data) != 1 { return resp, fmt.Errorf("unexpected response from tarantool: %q", data) } - if err := mapstructure.Decode(data[0][0], &resp); err != nil { + if err := mapstructure.Decode(data[0], &resp); err != nil { return resp, fmt.Errorf("failed to map response from tarantool: %q", data[0]) } @@ -533,11 +531,11 @@ func tarantoolTxnGet(conn tarantool.Connector, return resp, fmt.Errorf("failed to fetch data from tarantool: %w", err) } - if len(data) != 1 || len(data[0]) == 0 { + if len(data) != 1 { return resp, fmt.Errorf("unexpected response from tarantool: %q", data) } - if err := mapstructure.Decode(data[0][0], &resp); err != nil { + if err := mapstructure.Decode(data[0], &resp); err != nil { return resp, fmt.Errorf("failed to map response from tarantool: %q", data[0]) } if len(resp.Data.Responses) == 0 {