Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create connection from socket fd #321

Closed
locker opened this issue Jul 31, 2023 · 2 comments · Fixed by #349
Closed

Create connection from socket fd #321

locker opened this issue Jul 31, 2023 · 2 comments · Fixed by #349
Assignees
Labels
2sp feature A new functionality teamE

Comments

@locker
Copy link
Member

locker commented Jul 31, 2023

Currently, to create a connection, the user has to specify a URI. The connector creates a socket and connects it to the given URI under the hood. There are use cases when the user doesn't have a URI but does have a connected socket fd. For example, a socket fd could be inherited from the parent process on fork. We need a way to wrap a raw socket fd number in a connection object.

For more details see the IPROTO over socketpair design document.

oleg-jukovec added a commit that referenced this issue Jul 31, 2023
The patch fixes a typo that made it impossible to setup
SelectOpts.After, SelectOpts.BatchSize and SelectOpts.ForceMapCall.

Part of #321
@oleg-jukovec
Copy link
Collaborator

oleg-jukovec commented Aug 18, 2023

The implementation on Tarantool:
tarantool/tarantool#8984

@oleg-jukovec oleg-jukovec added teamE feature A new functionality labels Aug 18, 2023
@LeonidVas LeonidVas added the 2sp label Sep 12, 2023
@askalt askalt self-assigned this Oct 31, 2023
@oleg-jukovec
Copy link
Collaborator

oleg-jukovec commented Nov 1, 2023

Possibly changes from the public interface:

1. Just parse fd from URI

Let's just support a new uri format (we need to find a suitable URL scheme) for file descriptors and use it with connect:

conn, err := tarantool.Connect(ctx, "fd://236", opts)

2. Replace address and most of connect options by the Dialer interface

Use a Dialer{} interface instead of address:

// For regular connections:
//dialer := tarantool.TtDialer{
//    Username: "foo",
//    Password: "bar",
//}
// For TLS connections:
//dialer := tarantool.TlsDialer{
//    Username: "foo",
//    Password: "bar",
//    KeyFile: "foo/bar/file.key",
//}
dialer := tarantool.FdDialer{
    Fd: 233,
}
dialer := tarantool.Connect(ctx, dialer, opts)

Advantages

  • Flexible and testable interface.

Disadvantages

  • This requires refactoring before the task (1-3 days.).
  • Users may not like too big changes in the public API.
  • The change requires update the Connect/ConnectWithOpts of the pool package too.

askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 17, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`TtDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.TtDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Connections will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.TtDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`. This function
panics if the connection has not been established.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

Part of #321
askalt added a commit that referenced this issue Nov 17, 2023
askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 17, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`TtDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.TtDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Connections will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.TtDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`. This function
panics if the connection has not been established.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

Part of #321
askalt added a commit that referenced this issue Nov 17, 2023
askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 17, 2023
askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 17, 2023
askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 17, 2023
askalt added a commit that referenced this issue Nov 17, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 20, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`TtDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.TtDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Connections will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.TtDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`. This function
panics if the connection has not been established.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

Part of #321
askalt added a commit that referenced this issue Nov 20, 2023
askalt added a commit that referenced this issue Nov 20, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 20, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`TtDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.TtDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Connections will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.TtDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`. This function
panics if the connection has not been established.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

Part of #321
askalt added a commit that referenced this issue Nov 20, 2023
askalt added a commit that referenced this issue Nov 20, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 20, 2023
askalt added a commit that referenced this issue Nov 20, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Closes #321
askalt added a commit that referenced this issue Nov 24, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`NetDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Dialers will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.NetDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

`pool.GetPoolInfo` was renamed to `pool.GetInfo`. Return type changed to
`map[string]ConnectionInfo`.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`NetDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Dialers will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.NetDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

`pool.GetPoolInfo` was renamed to `pool.GetInfo`. Return type changed to
`map[string]ConnectionInfo`.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`NetDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Dialers will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.NetDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

`pool.GetPoolInfo` was renamed to `pool.GetInfo`. Return type changed to
`map[string]ConnectionInfo`.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Part of #321
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
askalt added a commit that referenced this issue Nov 24, 2023
oleg-jukovec pushed a commit that referenced this issue Nov 27, 2023
This patch modifies `Connect` api.

Now, to connect to the Tarantool, you need to pass an
object that satisfies `tarantool.Dialer` interface.

You can use one of the existing implementations:
`NetDialer` or `OpenSslDialer`.

For example:
```
conn, err := tarantool.Connect(context.Background(), tarantool.NetDialer{
	Address:  "127.0.0.1:3301",
	User:     "user",
	Password: "secret",
}, tarantool.Opts{})
```

To create a connection pool, you need to pass a `map[string]tarantool.Dialer`,
where each dialer is associated with a unique ID (for example, it can be
the server address). Dialers will be distinguished from each other using
these IDs.

For example:
```
connPool, err := pool.Connect(context.Background(), map[string]tarantool.Dialer{
	"127.0.0.1": tarantool.NetDialer{
		Address:  "127.0.0.1",
		User:     "user",
		Password: "secret",
	},
}, tarantool.Opts{})
```

The `conn.RemoteAddr` and `conn.LocalAddr` functions have been removed.
To obtain the connection address, you can use `conn.Addr`.

Now, `NewWatcher` checks the actual features of the server, rather than relying
on the features provided by the user during connection creation.

In the case of connection pool, watchers are created for connections that support
this feature.

`ClientProtocolInfo`, `ServerProtocolInfo` were removed. Now, there is `ProtocolInfo`,
which returns the server protocol info.

`pool.GetPoolInfo` was renamed to `pool.GetInfo`. Return type changed to
`map[string]ConnectionInfo`.

Part of #321
oleg-jukovec pushed a commit that referenced this issue Nov 27, 2023
This patch introduces `FdDialer`, which connects to Tarantool
using an existing socket file descriptor.

`FdDialer` is not authenticated when creating a connection.

Part of #321
oleg-jukovec pushed a commit that referenced this issue Nov 27, 2023
oleg-jukovec pushed a commit that referenced this issue Nov 27, 2023
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    More linters on CI (#310).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335)

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Flaky decimal/TestSelect (#300).

    Tests with crud 1.4.0 (#336).

    Tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    More linters on CI (#310).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 11, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
oleg-jukovec added a commit that referenced this issue Feb 12, 2024
Overview

    There are a lot of changes in the new major version. The main ones:

    * The `go_tarantool_call_17` build tag is no longer needed, since
      by default the `CallRequest` is `Call17Request`.
    * The `go_tarantool_msgpack_v5` build tag is no longer needed,
      since only the `msgpack/v5` library is used.
    * The `go_tarantool_ssl_disable` build tag is no longer needed,
      since the connector is no longer depends on `OpenSSL` by default.
      You could use the external library go-tlsdialer[1] to create a
      connection with the `ssl` transport.
    * Required Go version is `1.20` now.
    * The `Connect` function became more flexible. It now allows
      to create a connection with cancellation and a custom `Dialer`
      implementation.
    * It is required to use `Request` implementation types with the
      `Connection.Do` method instead of `Connection.<Request>` methods.
    * The `connection_pool` package renamed to `pool`.

    See the migration guide[2] for more details.

Breaking changes

    connection_pool renamed to pool (#239).

    Use msgpack/v5 instead of msgpack.v2 (#236).

    Call/NewCallRequest = Call17/NewCall17Request (#235).

    Change encoding of the queue.Identify() UUID argument from binary
    blob to plain string. Needed for upgrade to Tarantool 3.0, where a
    binary blob is decoded to a varbinary object (#313).

    Use objects of the Decimal type instead of pointers (#238).

    Use objects of the Datetime type instead of pointers (#238).

    `connection.Connect` no longer return non-working connection
    objects (#136). This function now does not attempt to reconnect
    and tries to establish a connection only once. Function might be
    canceled via context. Context accepted as first argument.
    `pool.Connect` and `pool.Add` now accept context as the first
    argument, which user may cancel in process. If `pool.Connect` is
    canceled in progress, an error will be returned. All created
    connections will be closed.

    `iproto.Feature` type now used instead of `ProtocolFeature` (#337).

    `iproto.IPROTO_FEATURE_` constants now used instead of local
    `Feature` constants for `protocol` (#337).

    Change `crud` operations `Timeout` option type to `crud.OptFloat64`
    instead of `crud.OptUint` (#342).

    Change all `Upsert` and `Update` requests to accept
    `*tarantool.Operations`  as `ops` parameters instead of
    `interface{}` (#348).

    Change `OverrideSchema(*Schema)` to `SetSchema(Schema)` (#7).

    Change values, stored by pointers in the `Schema`, `Space`,
    `Index` structs,  to be stored by their values (#7).

    Make `Dialer` mandatory for creation a single connection (#321).

    Remove `Connection.RemoteAddr()`, `Connection.LocalAddr()`.
    Add `Addr()` function instead (#321).

    Remove `Connection.ClientProtocolInfo`,
    `Connection.ServerProtocolInfo`. Add `ProtocolInfo()` function
    instead, which returns the server protocol info (#321).

    `NewWatcher` checks the actual features of the server, rather
    than relying on the features provided by the user during connection
    creation (#321).

    `pool.NewWatcher` does not create watchers for connections that do
    not support it (#321).

    Rename `pool.GetPoolInfo` to `pool.GetInfo`. Change return type to
    `map[string]ConnectionInfo` (#321).

    `Response` is now an interface (#237).

    All responses are now implementations of the `Response`
    interface (#237). `SelectResponse`, `ExecuteResponse`,
    `PrepareResponse`, `PushResponse` are part of a public API.
    `Pos()`, `MetaData()`, `SQLInfo()` methods created for them to
    get specific info. Special types of responses are used with
    special requests.

    `IsPush()` method is added to the response iterator (#237). It
    returns the information if the current response is a
    `PushResponse`. `PushCode` constant is removed.

    Method `Get` for `Future` now returns response data (#237). To get
    the actual response new `GetResponse` method has been added.
    Methods `AppendPush` and `SetResponse` accept response `Header`
    and data as their arguments.

    `Future` constructors now accept `Request` as their argument
    (#237).

    Operations `Ping`, `Select`, `Insert`, `Replace`, `Delete`,
    `Update`, `Upsert`, `Call`, `Call16`, `Call17`, `Eval`, `Execute`
    of a `Connector` and `Pooler` return response data instead of an
    actual responses (#237).

    `pool.Connect`, `pool.ConnetcWithOpts` and `pool.Add` use a
    new type `pool.Instance` to determinate connection options (#356).

    `pool.Connect`, `pool.ConnectWithOpts` and `pool.Add` add
    connections to the pool even it is unable to connect to it (#372).

    Required Go version from `1.13` to `1.20` (#378).

    multi subpackage is removed (#240).

    msgpack.v2 support is removed (#236).

    pool/RoundRobinStrategy is removed (#158).

    DeadlineIO is removed (#158).

    UUID_extId is removed (#158).

    IPROTO constants are removed (#158).

    Code() method from the Request interface is removed (#158).

    `Schema` field from the `Connection` struct is removed (#7).

    `OkCode` and `PushCode` constants is removed (#237).

    SSL support is removed (#301).

    `Future.Err()` method is removed (#382).

New features

    Type() method to the Request interface (#158).

    Enumeration types for RLimitAction/iterators (#158).

    IsNullable flag for Field (#302).

    Meaningful description for read/write socket errors (#129).

    Support `operation_data` in `crud.Error` (#330).

    Support `fetch_latest_metadata` option for crud requests with
    metadata (#335).

    Support `noreturn` option for data change crud requests (#335).

    Support `crud.schema` request (#336, #351).

    Support `IPROTO_WATCH_ONCE` request type for Tarantool
    version >= 3.0.0-alpha1 (#337).

    Support `yield_every` option for crud select requests (#350).

    Support `IPROTO_FEATURE_SPACE_AND_INDEX_NAMES` for Tarantool
    version >= 3.0.0-alpha1 (#338). It allows to use space and index
    names in requests instead of their IDs.

    `GetSchema` function to get the actual schema (#7).

    Support connection via an existing socket fd (#321).

    `Header` struct for the response header (#237). It can be accessed
    via `Header()` method of the `Response` interface.

   `Response` method added to the `Request` interface (#237).

   New `LogAppendPushFailed` connection log constant (#237).
   It is logged when connection fails to append a push response.

   `ErrorNo` constant that indicates that no error has occurred while
   getting the response (#237).

   `AuthDialer` type for creating a dialer with authentication (#301).

   `ProtocolDialer` type for creating a dialer with `ProtocolInfo`
   receiving and  check (#301).

   `GreetingDialer` type for creating a dialer, that fills `Greeting`
   of a connection (#301).

   New method `Pool.DoInstance` to execute a request on a target
   instance in a pool (#376).

Bugfixes

    Race condition at roundRobinStrategy.GetNextConnection() (#309).

    Incorrect decoding of an MP_DECIMAL when the `scale` value is
    negative (#314).

    Incorrect options (`after`, `batch_size` and `force_map_call`)
    setup for crud.SelectRequest (#320).

    Incorrect options (`vshard_router`, `fields`, `bucket_id`, `mode`,
    `prefer_replica`, `balance`) setup for crud.GetRequest (#335).

    Splice update operation accepts 3 arguments instead of 5 (#348).

    Unable to use a slice of custom types as a slice of tuples or
    objects for `crud.*ManyRequest/crud.*ObjectManyRequest` (#365).

Testing

    More linters on CI (#310).

    Added an ability to mock connections for tests (#237). Added new
    types `MockDoer`, `MockRequest` to `test_helpers`.

    Fixed flaky decimal/TestSelect (#300).

    Fixed tests with crud 1.4.0 (#336).

    Fixed tests with case sensitive SQL (#341).

    Renamed `StrangerResponse` to `MockResponse` (#237).

Other

    All Connection.<Request>, Connection.<Request>Typed and
    Connection.<Request>Async methods are now deprecated. Instead you
    should use requests objects + Connection.Do() (#241).

    All ConnectionPool.<Request>, ConnectionPool.<Request>Typed and
    ConnectionPool.<Request>Async methods are now deprecated. Instead
    you should use requests objects + ConnectionPool.Do() (#241).

    box.session.push() usage is deprecated: Future.AppendPush() and
    Future.GetIterator() methods, ResponseIterator and
    TimeoutResponseIterator types (#324).

1. https://github.com/tarantool/go-tlsdialer
2. https://github.com/tarantool/go-tarantool/blob/master/MIGRATION.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2sp feature A new functionality teamE
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants