From ceb9b5af52b69f5c9ce9eb1ad50fef38d381c4f6 Mon Sep 17 00:00:00 2001 From: Oleg Jukovec Date: Sun, 11 Feb 2024 20:12:28 +0300 Subject: [PATCH] Release 2.0.0 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.` 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., Connection.Typed and Connection.Async methods are now deprecated. Instead you should use requests objects + Connection.Do() (#241). All ConnectionPool., ConnectionPool.Typed and ConnectionPool.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 --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b964384..4215aa6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,20 +10,47 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release. ### Added +### Changed + +### Fixed + +## [2.0.0] - 2024-02-14 + +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](https://github.com/tarantool/go-tlsdialer) 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.` methods. +* The `connection_pool` package renamed to `pool`. + +See the [migration guide](./MIGRATION.md) for more details. + +### Added + - 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 `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 +- 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 + 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) @@ -37,12 +64,12 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release. - Ability to mock connections for tests (#237). Added new types `MockDoer`, `MockRequest` to `test_helpers`. - `AuthDialer` type for creating a dialer with authentication (#301) -- `ProtocolDialer` type for creating a dialer with `ProtocolInfo` receiving and +- `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). + a pool (#376) ### Changed @@ -54,22 +81,22 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release. 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 +- `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` +- `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` +- 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, +- 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()`. @@ -103,7 +130,7 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release. `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.11` to `1.20` (#378) +- Required Go version updated from `1.13` to `1.20` (#378) ### Deprecated