Skip to content

v2.0.0

Compare
Choose a tag to compare
@oleg-jukovec oleg-jukovec released this 12 Feb 16:57
· 14 commits to master since this release

Overview

There are many 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 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 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 are 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).